¿API para revertir la latitud del geocodificación, la longitud al tramo censal?

11

Tengo un montón de coordenadas de latitud y longitud (principalmente centroides de ciudad / pueblo) en los Estados Unidos para los que me gustaría encontrar el tramo censal que lo contiene.

Por ejemplo,

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

¿Existe una API gratuita o de bajo costo que pueda ayudar? (Esencialmente Yahoo Placefinder, con la respuesta adicional del tramo del censo).

(Entiendo que muchas ciudades incluyen múltiples secciones censales y esperaría que algunas ciudades pequeñas contengan solo partes de una o más secciones censales. Me siento cómodo ignorando ese tema por ahora).

Citizentools
fuente
¿Está pensando en una solución para un área determinada o una solución independiente del país?
radek

Respuestas:

10

La API de conversión de bloque de censo de la FCC es exactamente lo que está buscando.

tmcw
fuente
Sip. Vergonzoso, porque lo consideré para otra parte del proyecto, y lo había olvidado. Gracias.
Citizentools
Tenga en cuenta que en 2018 ese enlace muestra "Esta API ha sido reemplazada por la nueva API de Área y Bloque de Censo, actualizada para reducir el tiempo de respuesta y admitir elementos de datos adicionales relacionados con el Área. Como tal, esta API heredada se está retirando del servicio". y enlaces a geo.fcc.gov/api/census . Comentando para la posteridad
arvi1000
5

En PostGIS, si tiene una tabla de puntos y la información de límites del censo a la que @Sminbamangu se refiere, puede calcular esto utilizando el siguiente enfoque:

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

Puedes ver la descripción ST_Contains aquí . Esto devolvería una tabla de los puntos y el área del censo donde están ubicados.

djq
fuente
Intenté eso en Spatialite con 10 puntos y los datos de California y lo hace en aproximadamente 0.2 segundos ... +1.
Simbamangu
Agradable, debo explorar Spatialite. Comencé a usar PostGIS hace 6 meses y me encanta, pero es bastante pesado. Sería bueno tener más conjuntos de datos independientes que sean portátiles para los momentos en que no hay internet.
djq
2

Puede hacerlo localmente en lugar de una API en línea. Una solución con R: los datos de límites del censo para los EE. UU. Están disponibles a través de TIGER en census.gov ; Si está pensando en los EE. UU., entonces puede descargar los estados de los EE. UU. y usar una función para obtener los tratados. Por ejemplo, usando California y un punto aleatorio (o aleatorio):

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
}

Pruébalo:

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

Da 0004, que es correcto.

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

Esto funciona, pero toma 5 segundos en mi Mac, lo que probablemente sería demasiado si vas a hacer mucho de esto; Sospecho que alguien pesará en breve con una solución PostGIS que será un millón de veces más rápida ...

Simbamangu
fuente
1

Como lo mencionó @Simbamangu, esto podría hacerse fácilmente a nivel local por casi cualquier software GIS de escritorio en el mercado.

Para el código libre y abierto, eche un vistazo a " unir atributos por ubicación " en QGIS .

Si planea hacer esto repetidamente con el tiempo, podría considerar colocar los conjuntos de datos en PostGIS y crear una unión espacial (consulte este ejemplo en la ayuda en línea). Luego puede visualizar los resultados en QGIS.

RyanKDalton
fuente