Answers:
在FCC人口普查块转换 API正是你要寻找的。
在PostGIS中,如果有一张点表,并且@Sminbamangu所引用的人口普查边界信息可以使用以下方法来计算:
SELECT
c.census_tract,
p.point_id
FROM
census_boundary as c,
table_of_points as p
WHERE
ST_Contains(c.geom, p.geom);
您可以在此处查看说明ST_Contains 。这将返回一个点表以及它们所在的人口普查区。
您可以在本地而不是在线API上进行操作。R的一种解决方案:美国的人口普查边界数据可通过census.gov上的TIGER获得;如果您正在考虑美国,则可以下载美国各州并使用一个函数来获取摘要。例如,使用加利福尼亚和随机(或随机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
}
试试看:
california <- readShapePoly("~/Downloads/US_2000_Census_Tracts/tr06_d00_shp/tr06_d00.shp")
tractLookup(-123.123, 40.789, california)
给出0004,这是正确的。
# 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)
这可以工作,但是在我的Mac上需要5秒钟,如果您打算做很多事情,这可能会太多。我怀疑有人不久就会考虑使用PostGIS解决方案,它将快一百万倍...