16 votos

A granel de búsqueda de la dirección de censos y bloque

Hay una gratis o barato de código de un gran número de direcciones y de retorno o anexar el censo y los datos de bloque?

Hay un número de maneras para geocodificar una dirección y obtener la lat, long, pero yo realmente necesita para conseguir el censo y los datos de bloque.

16voto

warsze Puntos 178

Ok Ben, aquí están mis supuestos:

1) ya tiene sus datos (he tenido algunos puntos de dirección en un shapefile, y he descargado el censo y censo bloque de shapefiles de Missouri).

2) ya ha geocodificada sus puntos de dirección y está cómodo proyectar los datos.

3) Usted se siente cómodo con un OGR/PostGIS solución (ambos gratuitos).

Aquí están algunos de instalar notas si usted no tiene estos software: Cómo instalar Postgresql con PostGIS apoyo. (Por BostonGIS. Por favor, no tome la ofensa a su título, creo que es la mejor de cómo fuera a salir de allí.) Además, aquí hay uno, dos, y tres sitios que se describe cómo instalar GDAL/OGR con enlaces Python.

Advertencia: Antes de realizar el análisis real (es decir, el ST_Contains cosas, más adelante), usted debe asegurarse de que todas las capas están en la misma proyección! Si usted tiene archivos de forma, es fácil traducir de una proyección a otra utilizando cualquiera de Quantum GIS (QGIS) o OGR (o ArcGIS si la tiene). Alternativamente, usted puede realizar la transformación de proyección en la base de datos mediante funciones de PostGIS. Básicamente escoja su veneno, o háganos saber si esto es una piedra de tropiezo.

Con los dados, esta es la forma en que yo anexa y del tracto bloque attriutes a algunos puntos de dirección de datos utilizando PostGIS:

Primero usé ogr2ogr a la importación de los tres shapefiles en PostGIS:

Importar direcciones utilizando ogr2ogr:

ogr2ogr -f "PostGreSQL" PG:"host=127.0.0.1 user=youruser dbname=yourdb password=yourpass" "E:\path_to\addresses.shp" -nln mcdon_addresses -nlt geometry

La importación de las secciones censales (Missouri) el uso de ogr2ogr: El spMoWest sufijo implica ya he traducido mis datos para el Estado de Missouri Avión West Pies.

ogr2ogr -f "PostGreSQL" PG:"host=127.0.0.1 user=youruser dbname=yourdb password=yourpass" "E:\path_to\st_tract10_spMoWest.shp" -nln mo_tracts_2010 -nlt geometry

Importación de bloques de datos (Missouri): Este tuvo un rato. De hecho, mi equipo mantuvo la estrella y la tuve que poner un ventilador en él! Oh, también, ogr2ogr no dar ninguna respuesta, de forma que no consigue garra; asegúrese de esperar en él y que finalmente va a terminar.

ogr2ogr -f "PostGreSQL" PG:"host=127.0.0.1 user=youruser dbname=yourdb password=yourpass" "E:\path_to\st_block10_spMoWest.shp" -nln mo_blocks_2010 -nlt geometry

Una vez que los datos de las importaciones se llevan a cabo, lanzamiento de PgAdmin III (el PostGREs GUI), busque en su base de datos y lanzar rápida de los comandos de mantenimiento para que PostGREsql se ejecutará más rápido el uso de estos nuevos datos:

vacuum mcdon_addresses;
vacuum mo_tracts_2010;
vacuum mo_blocks_2010;

A continuación, me fue curioso cómo muchos de los raw de la dirección de los puntos que me importan, así que hice una rápida COUNT(*). Yo suelo hacer un recuento al inicio de una tarea como esta, para darme un punto de apoyo para la "cordura cheques", más adelante..

SELECT COUNT(*) FROM mcdon_addresses;
-- 11979

En la fase siguiente, he creado dos nuevas tablas, añadiendo poco a poco los tractos de atributos y, a continuación, los bloques de atributos, a mi dirección original de los puntos de la tabla. Como verás, el PostGIS ST_Contains función hizo el trabajo pesado, en cada caso, la creación de una nueva tabla de puntos, cada uno ganando los atributos de las vías y bloques de polígonos que cayó en el interior de.

Nota! Por razones de brevedad, sólo estoy tomando un puñado de campos de cada tabla. Usted probablemente querrá casi todo. Digo casi porque, debido a la necesidad de omitir ogr_fid de campo (tal vez incluso de otros?) a partir de los cuadros de combinar, de lo contrario PostGREs se quejan de ambos campos con el mismo nombre..

(P. S. me hizo algunas husmeando por aquí mientras calcular esto: http://postgis.net/docs/manual-1.4/ch04.html)

Crear una nueva tabla de puntos de dirección con tratados atributos: Nota soy el prefijo de cada columna de salida con un toque de divulgar la tabla que se inició en (voy a explicar por qué más adelante).

CREATE TABLE mcdon_addresses_wtract AS
SELECT 
  a.wkb_geometry,
  a.route AS addr_route, 
  a.box AS addr_box, 
  a.new_add AS addr_new_add, 
  a.prefix AS addr_prefix, 
  a.rdname AS addr_rdname, 
  a.road_name AS addr_road_name, 
  a.city AS addr_city, 
  a.state AS addr_state, 
  a.zip AS addr_zip,
  t.statefp10 AS tr_statefp10, 
  t.countyfp10 AS tr_countyfp10, 
  t.tractce10 AS tr_tractce10,  
  t.name10 AS tr_name10, 
  t.pop90 AS tr_pop90, 
  t.white90 AS tr_white90, 
  t.black90 AS tr_black90, 
  t.asian90 AS tr_asian90, 
  t.amind90 AS tr_amind90, 
  t.other90 AS tr_other90, 
  t.hisp90 AS tr_hisp90
FROM
  mcdon_addresses AS a,
  mo_tracts_2010 AS t
WHERE 
  ST_Contains(t.wkb_geometry, a.wkb_geometry);

Mantener la mesa para que PostGREs sigue funcionando sin problemas:

vacuum mcdon_addresses_wtract;

Ahora tengo dos preguntas..

Hizo el ST_Contains en realidad? ..y.. ¿el número de direcciones devueltas sentido dado a las entradas de datos he utilizado?

Yo era capaz de responder a ambos con la misma consulta:

select count(*) from mcdon_addresses_wtract;
-- returns 11848

Una reflexión rápida sobre las pérdidas: en Primer lugar, he comprobado en ArcGIS (también se puede hacer esto en QGIS) y se devuelve el mismo cargo. Así que, ¿por qué la diferencia? En primer lugar, algunas direcciones cayó fuera de Missouri, y yo sólo se la compara con una de Missouri de los tractos de polígono. En segundo lugar, en un análisis más detallado, parece que hubo algunos ejemplos de mala digitalización en las direcciones de datos. Específicamente, muchos de los puntos no se detecta ST_Contains había vacío campos de atributo, que es una buena señal de que algo se fue de foul durante la digitalización; también significa que no utilizable datos de todos modos. En este punto, me siento cómodo con las diferencias como yo que razonablemente podría volver atrás y mejorar los datos, lo que permite un limpiador de análisis.

En movimiento, el siguiente paso fue anexando la dirección/extensiones tabla con los atributos de los bloques de datos. Del mismo modo, hice esto mediante la creación de una nueva tabla, una vez más el prefijo de cada salida de campo para indicar la tabla de vino (el prefijo es muy importante que usted verá):

CREATE TABLE mcdon_addr_trct_and_blk AS
SELECT 
  a.*,
  b.pop90 AS blk_pop90, 
  b.white90 AS blk_white90, 
  b.black90 AS blk_black90, 
  b.asian90 AS blk_asian90, 
  b.amind90 AS blk_amind90, 
  b.other90 AS blk_other90, 
  b.hisp90 AS blk_hisp90
FROM 
  mcdon_addresses_wtract AS a,
  mo_blocks_2010 AS b
WHERE
  ST_Contains(b.wkb_geometry, a.wkb_geometry);

Por supuesto, mantener la tabla:

vacuum mcdon_addr_trct_and_blk;

La razón por la que el prefijo de cada salida de campo fue porque si no, algunos campos tienen el mismo nombre, y sería imposible distinguir el uno del otro en el producto final (también.. PostGREs mayo se han quejado a mitad de camino en esto, pero desde que yo era el cambio de nombre, que no me dan la oportunidad). Consideremos, por ejemplo, los siguientes dos campos de ambas pasos de arriba. Usted puede ver por qué he cambiado el nombre de ellos..

t.pop90 AS tr_pop90   -- would have been simply pop90
b.pop90 AS blk_pop90  -- also would have been pop90 ! 

Ahora que tenemos una de las direcciones con extensiones y bloques de conjunto de datos, dwe todavía tienen el mismo número de puntos?

select count(*) from mcdon_addr_trct_and_blk;
-- 11848 (thumbs up!)

Sí, sí! Si usted desea, usted puede seguir adelante y eliminar la primera tabla que hemos creado, mcdon_addresses_wtract. Ya no se necesita para el análisis.

Como última acción, usted puede querer exportar los datos de PostGREs en un shapefile de ESRI, de modo que usted puede ver con otros programas como ArcGIS (de la nota, QGIS puede leer el PostGIS datos sin problema). Si usted está interesado, aquí está cómo usted puede realizar la conversión de uso de ogr2ogr:

ogr2ogr -f "ESRI Shapefile" "E:\path_to\addr_trct_blk.shp" PG:"host=127.0.0.1 user=youruser dbname=yourdb password=yourpass" "mcdon_addr_trct_and_blk"

Finalmente, cuando se ejecuta este comando, lo más probable es obtener algunas advertencias como esta:

Advertencia 6: Normalizado/lavado nombre del campo: 'tr_statefp10' a 'tr_statefp'

Esto solo significa OGR tuvo que acortar el nombre de ese campo, porque el nombre del campo en un shapefile sólo puede ser tan largo.

Por supuesto, esta es sólo una de las muchas maneras de realizar este trabajo. Espero que sea de utilidad para usted. Estoy disculpas si he perdido la trama en algún lugar!

La mejor de las suertes. Elías

9voto

Bob Knows Puntos 91

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X