API untuk membalikkan geocode lintang, bujur ke saluran sensus?


11

Saya memiliki banyak garis lintang, koordinat bujur (sebagian besar pusat kota / kota) di Amerika Serikat yang ingin saya temukan saluran sensus yang berisi.

Contohnya,

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

Apakah ada API gratis atau berbiaya rendah di luar sana yang dapat membantu? (Intinya Yahoo Placefinder, dengan respons tambahan dari saluran sensus.)

(Saya mengerti bahwa banyak kota memiliki banyak trus sensus dan saya berharap bahwa beberapa kota kecil hanya berisi bagian dari satu trus sensus atau lebih. Saya nyaman mengabaikan masalah itu untuk saat ini.)


Apakah Anda memikirkan solusi untuk solusi agnostik area atau negara tertentu?
radek

Jawaban:


10

The FCC blok sensus konversi API adalah apa yang Anda cari.


Ya. Memalukan, karena saya menganggapnya sebagai bagian lain dari proyek, dan telah lupa. Terima kasih.
Citizentools

Perhatikan, pada tahun 2018 tautan itu menunjukkan "API ini telah digantikan oleh API Blok Area dan Sensus yang baru, diperbarui untuk mengurangi waktu respons dan mendukung elemen data terkait Area tambahan. Dengan demikian, API lawas ini sedang dinonaktifkan." dan tautan ke geo.fcc.gov/api/census . Mengomentari anak cucu
arvi1000

5

Di PostGIS, jika Anda memiliki tabel poin, dan informasi batas sensus yang dirujuk oleh @Sminbamangu, Anda dapat menghitung ini menggunakan pendekatan berikut:

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

Anda dapat melihat deskripsi ST_Contain di sini . Ini akan mengembalikan tabel poin, dan trus sensus tempat mereka berada.


Mencoba itu di Spatialite dengan 10 poin dan data California dan melakukannya dalam sekitar 0,2 detik ... +1.
Simbamangu

Bagus - Saya harus menjelajahi Spatialite. Saya mulai menggunakan PostGIS 6 bulan yang lalu dan menyukainya, tapi itu tugas yang cukup berat. Akan menyenangkan untuk memiliki lebih banyak dataset mandiri yang portabel untuk saat-saat ketika tidak ada internet.
djq

2

Anda dapat melakukannya secara lokal alih-alih API online. Satu solusi dengan R: Data batas sensus untuk AS tersedia melalui TIGER di census.gov ; jika Anda berpikir tentang AS maka Anda dapat mengunduh negara bagian AS dan menggunakan fungsi untuk mendapatkan traktat. Misalnya, menggunakan California dan titik acak (atau acak-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
}

Cobalah:

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

Memberi 0004, yang benar.

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

Ini berfungsi, tetapi membutuhkan 5 detik pada Mac saya, yang mungkin akan terlalu banyak jika Anda akan melakukan banyak ini; Saya mencurigai seseorang akan menimbang dengan solusi PostGIS yang akan jutaan kali lebih cepat ...


1

Seperti yang disebutkan oleh @Simbamangu, ini dapat dengan mudah dilakukan secara lokal oleh hampir semua perangkat lunak GIS desktop di pasaran.

Untuk sumber gratis & terbuka, lihat " gabung atribut berdasarkan lokasi " di QGIS .

Jika Anda berencana untuk perlu melakukan ini berulang kali dari waktu ke waktu, Anda dapat mempertimbangkan untuk meletakkan kumpulan data ke dalam PostGIS dan membuat gabungan spasial (lihat contoh ini dalam bantuan online). Anda kemudian dapat memvisualisasikan hasil dalam QGIS.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.