API per invertire la latitudine del geocodice, la longitudine per il tratto del censimento?


11

Ho un sacco di coordinate di latitudine e longitudine (principalmente centroidi città / città) negli Stati Uniti per i quali mi piacerebbe trovare il tratto di censimento contenente.

Per esempio,

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

Esiste un'API gratuita oa basso costo che può aiutarti? (Essenzialmente Yahoo Placefinder, con la risposta aggiuntiva del censimento.)

(Capisco che molte città includono più trattati di censimento e mi aspetto che alcune piccole città contengano solo parti di uno o più trattati di censimento. Per ora mi sento a mio agio a ignorare questo problema.)


Stai pensando alla soluzione per una determinata area o soluzione agnostica Paese?
Radek,

Risposte:


10

L' API di conversione del blocco censimento FCC è esattamente ciò che stai cercando.


Sì. Imbarazzante, perché l'ho considerato per un'altra parte del progetto e l'avevo dimenticato. Grazie.
Citizentools

Nota, nel 2018 quel link mostra "Questa API è stata sostituita dalla nuova API Area e Census Block, aggiornata per ridurre i tempi di risposta e supportare ulteriori elementi di dati relativi all'Area. Come tale, questa API legacy è in fase di disattivazione." e collegamenti a geo.fcc.gov/api/census . Commentando per i posteri
arvi1000,

5

In PostGIS, se hai una tabella di punti e le informazioni sui confini del censimento a cui fa riferimento @Sminbamangu potresti calcolarlo usando il seguente approccio:

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

Puoi vedere la descrizione ST_Contains qui . Ciò restituirebbe una tabella dei punti e il tratto del censimento in cui si trovano.


Ho provato che in Spatialite con 10 punti e i dati della California e lo fa in circa 0,2 secondi ... +1.
Simbamangu

Bello - Devo esplorare Spatialite. Ho iniziato a usare PostGIS 6 mesi fa e lo adoro, ma è piuttosto pesante. Sarebbe bello avere più set di dati indipendenti che sono portatili per i periodi in cui non c'è internet.
djq

2

Potresti farlo localmente invece di un'API online. Una soluzione con R: dati di confine del censimento per gli Stati Uniti è disponibile tramite TIGER su census.gov ; se stai pensando agli Stati Uniti, puoi scaricare gli Stati Uniti e utilizzare una funzione per ottenere i volantini. Ad esempio, usando la California e un punto casuale (o casuale-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
}

Provalo:

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

Fornisce 0004, che è corretto.

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

Funziona, ma richiede 5 secondi sul mio Mac, che probabilmente sarebbe troppo se hai intenzione di fare molto di questo; Sospetto che qualcuno peserà a breve con una soluzione PostGIS che sarà un milione di volte più veloce ...


1

Come menzionato da @Simbamangu, ciò potrebbe essere facilmente eseguito localmente da qualsiasi software GIS desktop presente sul mercato.

Per libero e open source, dai un'occhiata a " unisci attributi per posizione " in QGIS .

Se hai intenzione di farlo ripetutamente nel tempo, potresti considerare di inserire i set di dati in PostGIS e creare un join spaziale (vedi questo esempio nella guida in linea). È quindi possibile visualizzare i risultati in QGIS.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.