API для изменения широты геокода, долготы до участка переписи?

11

У меня есть набор координат широты и долготы (в основном, центроиды городов / поселков) в Соединенных Штатах, для которых я хотел бы найти участок переписи.

Например,

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

Есть ли бесплатный или недорогой API, который может помочь? (По сути, Yahoo Placefinder, с дополнительным ответом переписного тракта.)

(Я понимаю, что во многих городах имеется несколько переписных участков, и я ожидаю, что некоторые небольшие города содержат только части одного или нескольких переписных участков. На данный момент я спокойно проигнорирую этот вопрос.)

Citizentools
источник
Думаете ли вы о решении для определенного региона или страны?
Радек

Ответы:

10

Преобразования блок Переписи FCC API именно то , что вы ищете.

tmcw
источник
Ага. Смущает, потому что я рассматривал это для другой части проекта и забыл. Спасибо.
Citizentools
Обратите внимание, что в 2018 году эта ссылка показывает: «Этот API был заменен новым API области и блока переписи, обновлен для уменьшения времени отклика и поддержки дополнительных элементов данных, связанных с областью. Таким образом, этот устаревший API выводится из эксплуатации». и ссылки на geo.fcc.gov/api/census . Комментирование для потомков
arvi1000
5

В 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 здесь . Это вернуло бы таблицу точек и участок переписи, где они расположены.

djq
источник
Попробовал это в Spatialite с 10 точками и данными Калифорнии, и он делает это примерно за 0,2 секунды ... +1.
Симбамангу
Хорошо - я должен исследовать Spatialite. Я начал использовать PostGIS 6 месяцев назад и люблю его, но это довольно тяжелый режим. Было бы неплохо иметь больше автономных наборов данных, которые будут переносимы в те времена, когда нет интернета.
DJQ
2

Вы можете сделать это локально вместо онлайн-API. Одно решение с данными R: границы переписи для США доступно через TIGER на census.gov ; если вы думаете о США, вы можете скачать штаты США и использовать функцию для получения трактатов. Например, используя Калифорнию и случайную (или случайную) точку:

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)

Это работает, но занимает 5 секунд на моем Mac, что, вероятно, будет слишком много, если вы собираетесь делать много этого; Я подозреваю, что в скором времени кто-то получит решение PostGIS, которое будет в миллион раз быстрее ...

Simbamangu
источник
1

Как упомянул @Simbamangu, это может быть легко сделано локально с помощью любого программного обеспечения для настольных ГИС на рынке.

Чтобы получить бесплатный и открытый исходный код, взгляните на « объединять атрибуты по местоположению » в QGIS .

Если вы планируете делать это неоднократно с течением времени, вы можете рассмотреть возможность размещения наборов данных в PostGIS и создания пространственного соединения (см. Этот пример в интерактивной справке). Затем вы можете визуализировать результаты в QGIS.

RyanKDalton
источник