API do odwrócenia szerokości geograficznej, długości geograficznej do obszaru spisu?


11

Mam kilka współrzędnych szerokości i długości geograficznej (głównie centroidy miasta / miasta) w Stanach Zjednoczonych, dla których chciałbym znaleźć zawierający spis ludności.

Na przykład,

input => nn.nnn, -nn.nnn 
output => 010300

Czy jest dostępny darmowy lub tani interfejs API, który może pomóc? (Zasadniczo Yahoo Placefinder, z dodatkową odpowiedzią ze spisu powszechnego.)

(Rozumiem, że wiele miast zawiera wiele obszarów spisu powszechnego i spodziewałbym się, że niektóre małe miasta zawierają tylko części jednego lub więcej obszarów spisu powszechnego. Na razie mogę zignorować ten problem).


Zastanawiasz się nad rozwiązaniem dla pewnego obszaru lub rozwiązania agnostycznego dla danego kraju?
radek

Odpowiedzi:


10

FCC konwersja blok spisu API jest dokładnie to, czego szukasz.


Tak. Żenujące, bo pomyślałem o tym w innej części projektu i zapomniałem. Dzięki.
Citizentools

Uwaga: w 2018 r. Ten link pokazuje „Ten interfejs API został zastąpiony nowym interfejsem API obszaru i spisu ludności, zaktualizowanym w celu skrócenia czasu odpowiedzi i obsługi dodatkowych elementów danych związanych z obszarem. W związku z tym ten interfejs API został wycofany z eksploatacji”. oraz linki do geo.fcc.gov/api/census . Komentowanie dla potomności
arvi1000,

5

W PostGIS, jeśli masz tabelę punktów, a informacje o granicy spisu , do których odnosi się @Sminbamangu, możesz to obliczyć, stosując następujące podejście:

SELECT 
       c.census_tract, 
       p.point_id
FROM
       census_boundary as c,
       table_of_points as p
WHERE
       ST_Contains(c.geom, p.geom);

Możesz zobaczyć opis ST_Contains tutaj . To zwróci tabelę punktów i obszar spisu, w którym się znajdują.


Próbowałem tego w Spatialite z 10 punktami i danymi z Kalifornii i robi to w około 0,2 sekundy ... +1.
Simbamangu,

Fajnie - muszę odkryć Spatialite. Zacząłem używać PostGIS 6 miesięcy temu i uwielbiam to, ale jest dość ciężkie. Byłoby miło mieć więcej niezależnych zestawów danych, które są przenośne na czas, gdy nie ma internetu.
djq,

2

Możesz to zrobić lokalnie zamiast interfejsu API online. Jedno rozwiązanie z danymi granicznymi R: Spis dla USA jest dostępne za pośrednictwem TIGER na stronie census.gov ; jeśli myślisz o Stanach Zjednoczonych, możesz pobrać stany USA i użyć funkcji, aby uzyskać traktaty. Na przykład, używając Kalifornii i losowego (lub losowego) punktu:

library(maps)
library(maptools)


tractLookup <- function(x, y, state) {
  pt <- SpatialPoints(data.frame(x = x, y = y))
  overlay.pt <- overlay(pt, state) # what index number does pt fall inside?
  return(census$TRACT[overlay.pt]) # give the Tract number from the census layer
}

Wypróbuj to:

california <- readShapePoly("~/Downloads/US_2000_Census_Tracts/tr06_d00_shp/tr06_d00.shp")
tractLookup(-123.123, 40.789, california)

Podaje 0004, co jest poprawne.

# Look at the map
plot(census)
map('state', c('California'), lwd = 2, col = 'green', add = F) # optional
points(-123.123, 40.789, col = 'red', lwd = 2)

To działa, ale na moim komputerze Mac zajmuje 5 sekund, co prawdopodobnie byłoby za dużo, jeśli zamierzasz zrobić dużo tego; Podejrzewam, że ktoś wkrótce waży dzięki rozwiązaniu PostGIS, które będzie milion razy szybsze ...


1

Jak wspomniano w @Simbamangu, można to łatwo zrobić lokalnie za pomocą dowolnego oprogramowania komputerowego GIS na rynku.

Aby uzyskać bezpłatne i otwarte oprogramowanie, spójrz na „ dołącz atrybuty według lokalizacji ” w QGIS .

Jeśli planujesz robić to wielokrotnie, możesz rozważyć umieszczenie zestawów danych w PostGIS i utworzenie połączenia przestrzennego (zobacz ten przykład w pomocy online). Następnie możesz wizualizować wyniki w QGIS.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.