API pour inverser la latitude et la longitude du géocodage vers le secteur de recensement?

11

J'ai un tas de coordonnées de latitude et de longitude (principalement des centres de ville / ville) aux États-Unis pour lesquelles j'aimerais trouver le secteur de recensement contenant.

Par exemple,

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

Existe-t-il une API gratuite ou à faible coût qui peut vous aider? (Essentiellement Yahoo Placefinder, avec la réponse supplémentaire des secteurs de recensement.)

(Je comprends que de nombreuses villes comprennent plusieurs secteurs de recensement et je m'attends à ce que certaines petites villes ne contiennent que des parties d'un ou plusieurs secteurs de recensement. Je suis à l'aise d'ignorer ce problème pour l'instant.)

Citizentools
la source
Pensez-vous à une solution pour une zone ou un pays agnostique?
radek

Réponses:

10

L' API de conversion des blocs de recensement de la FCC est exactement ce que vous recherchez.

tmcw
la source
Ouaip. Embarrassant, car je l'ai envisagé pour une autre partie du projet, et j'avais oublié. Merci.
Citizentools
Remarque, en 2018, ce lien affiche "Cette API a été remplacée par la nouvelle API de zone et de bloc de recensement, mise à jour pour réduire le temps de réponse et prendre en charge des éléments de données supplémentaires liés à la zone. En tant que telle, cette API héritée est en cours de déclassement." et des liens vers geo.fcc.gov/api/census . Commentaire pour la postérité
arvi1000
5

Dans PostGIS, si vous avez un tableau de points et les informations sur les limites du recensement auxquelles @Sminbamangu fait référence, vous pouvez les calculer en utilisant l'approche suivante:

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

Vous pouvez voir la description ST_Contient ici . Cela retournerait un tableau des points et le secteur de recensement où ils se trouvent.

djq
la source
Je l'ai essayé dans Spatialite avec 10 points et les données de Californie et il le fait en environ 0,2 seconde ... +1.
Simbamangu
Nice - je dois explorer Spatialite. J'ai commencé à utiliser PostGIS il y a 6 mois et je l'adore, mais c'est assez lourd. Ce serait bien d'avoir plus de jeux de données autonomes qui sont portables pendant les périodes où il n'y a pas d'Internet.
djq
2

Vous pouvez le faire localement au lieu d'une API en ligne. Une solution avec R: Les données sur les limites du recensement pour les États-Unis sont disponibles via TIGER à Census.gov ; si vous pensez aux États-Unis, vous pouvez télécharger les États américains et utiliser une fonction pour obtenir les tracts. Par exemple, en utilisant la Californie et un point aléatoire (ou random-ish):

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
}

Essaye le:

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

Donne 0004, ce qui est correct.

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

Cela fonctionne, mais prend 5 secondes sur mon Mac, ce qui serait probablement trop si vous allez faire beaucoup de choses; Je soupçonne que quelqu'un va peser sous peu avec une solution PostGIS qui sera un million de fois plus rapide ...

Simbamangu
la source
1

Comme mentionné par @Simbamangu, cela pourrait facilement être fait localement par à peu près n'importe quel logiciel SIG de bureau sur le marché.

Pour les sources libres et ouvertes, jetez un coup d'œil à un " joindre les attributs par emplacement " dans QGIS .

Si vous prévoyez de devoir effectuer cette opération à plusieurs reprises au fil du temps, vous pouvez envisager de placer les ensembles de données dans PostGIS et de créer une jointure spatiale (voir cet exemple dans l'aide en ligne). Vous pouvez ensuite visualiser les résultats dans QGIS.

RyanKDalton
la source