Coğrafi enlem, sayım sistemine boylam ters API?


11

İçinde bulunduğum nüfus sayımı sistemini bulmak istediğim bir grup enlem, boylam koordinatı (çoğunlukla şehir / kasaba centroidleri) var.

Örneğin,

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

Orada yardımcı olabilecek ücretsiz veya düşük maliyetli bir API var mı? (Temelde Yahoo Placefinder, sayım sisteminin ek yanıtı ile.)

(Birçok şehrin birden fazla nüfus sayımı sistemi içerdiğini anlıyorum ve bazı küçük kasabaların bir veya daha fazla nüfus sayımı sisteminin sadece bir kısmını içermesini beklerdim. Şimdilik bu sorunu görmezden geliyorum.)


Belirli bir alan veya ülke agnostik çözümü için çözüm mü düşünüyorsunuz?
radek

Yanıtlar:


10

FCC nüfus bloku dönüşüm API aradığınız tam olarak ne olduğunu.


Evet. Utanç verici, çünkü projenin başka bir kısmı için düşündüm ve unutmuştum. Teşekkürler.
Citizentools

2018'de bağlantının "Bu API'nın yerini yeni Alan ve Sayım Bloğu API'sı almıştır, yanıt süresini azaltmak ve Alanla ilgili ek veri öğelerini desteklemek üzere güncellenmiştir. Bu nedenle, bu eski API hizmetten çıkarılıyor." ve geo.fcc.gov/api/census bağlantılarını içerir . Posterity için yorum
arvi1000

5

PostGIS'te, bir puan tablonuz ve @Sminbamangu'nun ifade ettiği sayım sınırı bilgileri varsa, aşağıdaki yaklaşımı kullanarak bunu hesaplayabilirsiniz:

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 açıklamasını burada görebilirsiniz . Bu, noktaların bir tablosunu ve bulundukları yerdeki sayım yolunu döndürür.


10 puan ve California verileri ile Spatialite denedim ve yaklaşık 0.2 saniye içinde yapar ... +1.
Simbamangu

Güzel - Spatialite'yi keşfetmeliyim. PostGIS'i 6 ay önce kullanmaya başladım ve seviyorum, ama oldukça ağır bir görev. Ne zaman internet yok zamanlar için taşınabilir daha kendi kendine yeten veri kümeleri olması güzel olurdu.
djq

2

Çevrimiçi bir API yerine yerel olarak yapabilirsiniz. ABD için R: Sayım sınır verisine sahip bir çözüm , census.gov adresindeki TIGER aracılığıyla elde edilebilir ; ABD'yi düşünüyorsanız, ABD eyaletlerini indirebilir ve yolları almak için bir işlev kullanabilirsiniz. Örneğin, California ve rastgele (veya random-ish) bir nokta kullanarak:

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
}

Denemek:

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

0004 verir, bu doğrudur.

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

Bu işe yarıyor, ancak Mac'imde 5 saniye sürüyor, bu da çok şey yaparsanız muhtemelen çok fazla olurdu; Birisinin kısa sürede milyonlarca kat daha hızlı olacak bir PostGIS çözümü ile tartacağından şüpheleniyorum ...


1

@Simbamangu tarafından belirtildiği gibi, bu piyasadaki herhangi bir masaüstü CBS yazılımı ile kolayca yerel olarak yapılabilir.

Ücretsiz ve açık kaynak için QGIS'deki " özelliklere göre konuma katıl " konusuna bakın .

Bunu zaman içinde tekrar tekrar yapmayı planlıyorsanız, veri kümelerini PostGIS'e koymayı ve uzamsal bir birleştirme oluşturmayı düşünebilirsiniz ( çevrimiçi yardımda bu örneğe bakın ). Daha sonra sonuçları QGIS'de görselleştirebilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.