API zur Umkehrung des Breiten- und Längengrads des Geocodes zum Zensus-Trakt?

10

Ich habe eine Reihe von Längen- und Breitengradkoordinaten (hauptsächlich Stadt- / Stadtschwerpunkte) in den Vereinigten Staaten, für die ich den Zensus-Trakt finden möchte.

Zum Beispiel,

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

Gibt es eine kostenlose oder kostengünstige API, die helfen kann? (Im Wesentlichen Yahoo Placefinder, mit der zusätzlichen Antwort des Zensus-Trakts.)

(Ich verstehe, dass viele Städte mehrere Zensusgebiete enthalten, und ich würde erwarten, dass einige Kleinstädte nur Teile eines oder mehrerer Zensusgebiete enthalten. Ich kann dieses Problem vorerst gerne ignorieren.)

Citizentools
quelle
Denken Sie über eine Lösung für eine bestimmte bereichs- oder länderunabhängige Lösung nach?
Radek

Antworten:

9

Die FCC- API zur Konvertierung von Zensusblöcken ist genau das, wonach Sie suchen.

tmcw
quelle
Jep. Peinlich, weil ich es für einen anderen Teil des Projekts in Betracht gezogen und vergessen hatte. Vielen Dank.
Citizentools
Beachten Sie, dass dieser Link im Jahr 2018 Folgendes anzeigt: "Diese API wurde durch die neue Bereichs- und Volkszählungsblock-API ersetzt, die aktualisiert wurde, um die Antwortzeit zu verkürzen und zusätzliche bereichsbezogene Datenelemente zu unterstützen. Daher wird diese ältere API außer Betrieb genommen." und Links zu geo.fcc.gov/api/census . Kommentar für die Nachwelt
arvi1000
5

Wenn Sie in PostGIS eine Punktetabelle und die Informationen zur Volkszählungsgrenze haben , auf die sich @Sminbamangu bezieht, können Sie dies mithilfe des folgenden Ansatzes berechnen:

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

Die Beschreibung ST_Contains finden Sie hier . Dies würde eine Tabelle der Punkte und des Zensus-Trakts zurückgeben, in dem sie sich befinden.

djq
quelle
Versuchte das in Spatialite mit 10 Punkten und den kalifornischen Daten und es macht es in ca. 0,2 Sekunden ... +1.
Simbamangu
Schön - ich muss Spatialite erforschen. Ich habe vor 6 Monaten angefangen, PostGIS zu verwenden und liebe es, aber es ist ziemlich anstrengend. Es wäre schön, mehr in sich geschlossene Datensätze zu haben, die für Zeiten ohne Internet portabel sind.
DJQ
2

Sie können dies lokal anstelle einer Online-API tun. Eine Lösung mit R: Census Boundary-Daten für die USA ist über TIGER unter census.gov verfügbar . Wenn Sie an die USA denken, können Sie die US-Bundesstaaten herunterladen und eine Funktion verwenden, um die Traktate abzurufen. Verwenden Sie beispielsweise Kalifornien und einen zufälligen (oder zufälligen) Punkt:

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
}

Versuch es:

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

Gibt 0004, was richtig ist.

# 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)

Dies funktioniert, dauert aber auf meinem Mac 5 Sekunden, was wahrscheinlich zu viel wäre, wenn Sie viel davon tun würden. Ich vermute, jemand wird in Kürze mit einer PostGIS-Lösung abwägen, die millionenfach schneller sein wird ...

Simbamangu
quelle
1

Wie von @Simbamangu erwähnt, kann dies von nahezu jeder Desktop-GIS-Software auf dem Markt problemlos lokal durchgeführt werden.

Schauen Sie sich für Free & Open Source einen " Join-Attribute nach Standort " in QGIS an .

Wenn Sie dies im Laufe der Zeit wiederholt tun möchten, können Sie die Datensätze in PostGIS einfügen und einen räumlichen Join erstellen (siehe dieses Beispiel in der Online-Hilfe). Anschließend können Sie die Ergebnisse in QGIS visualisieren.

RyanKDalton
quelle