2011-01-09 15 views
6

que tienen un archivo de datos en formato CSV que tiene los algunos datos como este: campo id | datos de mosaico | descripción de datos | longitud | latitudPostGIS con una tabla de datos existente que tiene las coordenadas decimales

Tengo PostgreSQL y PostGIS ya instalados y me gustaría utilizar PostGIS para crear una consulta que muestre todos los registros (de la tabla anterior) que están dentro de la distancia especificada de una ubicación lat/long.

El problema es que no sé cómo comenzar. ¿Acabo de importar mi archivo CSV en la base de datos PostgreSQL y empiezo a usar las funciones PostgreSQL y PostGIS una vez que he convertido el archivo CSV en una tabla PostgreSQL?

¿Hay pasos adicionales para realizar el trabajo de mesa con las funciones PostGIS?

¿Cuáles serían los pasos correctos para hacer esto? ¡Realmente aprecio su ayuda!

Respuesta

8

Con el fin de trabajar con PostGIS, debe importar estos scripts en su base de datos de trabajo.

Una vez que haya hecho este paso, configurar su mesa y añadir la columna de PostGIS a ella

SELECT AddGeometryColumn('yourtable', 'columnname', 4269, 'POINT', 2); 

Los 3 últimos valores son SRID, el tipo y la dimensión. Solo asumo que esto es lo que quieres. Probablemente necesites ajustar el SRID pero esto debería estar bien.

que puede establecer en su importación/actualización/lo que usted eligió para agregar la geometría como

ST_Transform(ST_PointFromText('POINT(-85.45899 32.1337)', 4326)); 

Esta consulta se puede escribir en su actualización o inserción guión de los datos.

+0

¡Gracias! Esto es realmente lo que estaba buscando. Probablemente podría hacer una pequeña secuencia de comandos python que pasará por la tabla y convertir esas coordenadas decimales en puntos. – avatar

+0

¿Algo así podría funcionar? ACTUALIZAR mytable SET geometrycolumn = ST_Transform (ST_PointFromText ('POINT (-85.45899 32.1337)', 4326)) donde column1 = 'data1' y column2 = 'data2'; – avatar

+0

@itgorilla No sé la referencia de PostGIS de memoria, pero ¿por qué no? Inténtalo;) – DrColossos

2

Ésta es una pregunta divertida :-)

¿Sabe usted qué sistema de las Lons lat son coordenadas en?

Formulo esta pregunta porque es relevante para la forma de almacenar los datos.

Lo que necesitan hacer es crear una columna, además de los que están en el archivo CSV que contienen un objeto de geometría PostGIS del tipo de punto.

A continuación, importaba los datos CSV en las columnas estándar de la tabla, luego ejecutaba una actualización SQL para construir los datos POINT de cada registro y almacenarlos en la columna de geometría creada.

En ese momento usted debería ser capaz de utilizar las funciones de PostGIS para acceder y consultas subyacentes en los datos.

Esto es todo tipo de meta que lo que digo más arriba, porque hay complejidades con respecto a los datos que están siendo utilizados. Necesitará conocer el sistema de referencias espaciales utilizado con los datos inicialmente.

+0

El lat larga son en decimal. – avatar

+0

No estoy seguro de si esta es la pregunta correcta, pero ¿cómo convierto las tablas decimales lat/largas en un PUNTO? No estoy seguro de si solo ejecutando la actualización de SQL, PostgreSQL sabrá que tengo dos campos para lat y long y los convertiré en un POINT. – avatar

+1

Las latitudes largas son decimales pero están relacionadas con un esferoide particular (es decir, el sistema de referencia de coordenadas WGS84 o NAD83, por ejemplo). Al realizar la actualización, debe hacer una actualización con una selección secundaria para convertir los datos puros de lat/lon al objeto POSGIS POINT apropiado. Tendrá que consultar la documentación sobre cómo hacer esto. –

7

Solo tuve que resolver la misma tarea e hice algo similar a la solución de DrColossos ... Probablemente ya termines con esto, pero solo quería agregar esto en caso de que alguien busque este problema (como yo) : no hay necesidad de escribir una secuencia de comandos para generar una geometría de los campos lat/lon, se puede utilizar una sencilla cadena concatenada:

UPDATE mytable 
SET the_geom = ST_PointFromText('POINT(' || x ||' '|| y ||')', 4326) 
+0

¡Eres un salvavidas! – icefex

Cuestiones relacionadas