API para inverter a latitude do geocódigo, a longitude do setor censitário?

11

Tenho várias coordenadas de latitude e longitude (principalmente centróides de cidades) nos Estados Unidos, para as quais gostaria de encontrar o setor censitário.

Por exemplo,

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

Existe uma API gratuita ou de baixo custo por aí que possa ajudar? (Essencialmente o Yahoo Placefinder, com a resposta adicional do setor censitário.)

(Entendo que muitas cidades incluem vários setores censitários e espero que algumas cidades pequenas contenham apenas partes de um ou mais setores censitários. Estou confortável em ignorar esse problema por enquanto.)

Citizentools
fonte
Você está pensando em solução para uma determinada solução agnóstica em uma área ou país?
Radek

Respostas:

10

A API de conversão de blocos censitários da FCC é exatamente o que você está procurando.

tmcw
fonte
Sim. Embaraçoso, porque eu considerei isso para outra parte do projeto, e tinha esquecido. Obrigado.
Citizentools 15/03/12
Observe que em 2018 esse link mostra "Esta API foi substituída pela nova API de Área e Bloco de Censo, atualizada para reduzir o tempo de resposta e oferecer suporte a elementos de dados adicionais relacionados à Área. Como tal, esta API herdada está sendo desativada". e links para geo.fcc.gov/api/census . Comentando para
posterity
5

No PostGIS, se você tiver uma tabela de pontos, e as informações de limite do censo a que @Sminbamangu se refere, você poderá calcular isso usando a seguinte abordagem:

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

Você pode ver a descrição ST_Contains aqui . Isso retornaria uma tabela dos pontos e o setor censitário onde eles estão localizados.

djq
fonte
Tentei isso em Spatialite com 10 pontos e os dados da Califórnia e faz isso em cerca de 0,2 segundos ... +1.
Simbamangu 11/03/12
Bom - eu devo explorar o Spatialite. Comecei a usar o PostGIS há 6 meses e adoro, mas é bastante resistente. Seria bom ter mais conjuntos de dados independentes que sejam portáteis para momentos em que não há Internet.
DJQ
2

Você poderia fazer isso localmente, em vez de uma API online. Uma solução com os dados de limite do R: Censo para os EUA está disponível no TIGER em census.gov ; se você está pensando nos EUA, pode fazer o download dos estados dos EUA e usar uma função para obter os folhetos. Por exemplo, usando a Califórnia e um ponto aleatório (ou aleatório):

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
}

Experimente:

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

Dá 0004, o que está correto.

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

Isso funciona, mas leva 5 segundos no meu Mac, o que provavelmente seria demais se você fizer muito disso; Eu suspeito que alguém pesará em breve com uma solução PostGIS que será um milhão de vezes mais rápida ...

Simbamangu
fonte
1

Conforme mencionado por @Simbamangu, isso poderia ser feito facilmente localmente por praticamente qualquer software GIS para desktop no mercado.

Para código-fonte gratuito e aberto, dê uma olhada em " juntar atributos por local " no QGIS .

Se você planeja fazer isso repetidamente ao longo do tempo, considere colocar os conjuntos de dados no PostGIS e criar uma junção espacial (veja este exemplo na ajuda on-line). Você pode visualizar os resultados no QGIS.

RyanKDalton
fonte