¿Hacer POINT a partir de coordenadas de longitud / latitud en una tabla existente usando PostGIS?

10

Me gustaría hacer un PUNTO utilizando las columnas de longitud y latitud de una tabla existente .
Aquí hay un enlace a la documentación de ST_MakePoint .

Aquí está mi mesa:

CREATE TABLE sysinst.bio (  
    oid INTEGER PRIMARY KEY,  
    longitude FLOAT,  
    latitude FLOAT,  
        geom GEOMETRY(POINT, 26913)
);

Agregar columna de geometría:

SELECT AddGeometryColumn ('sysinst', 'bio', 'geom', 26913, 'POINT', 2);

Aquí está mi consulta:

UPDATE sysinst.bio SET geom = ST_SetSRID(ST_MakePoint(longitude, latitude), 26913);

No se devuelve ningún error, aunque los PUNTOS se trazan incorrectamente cuando se visualizan en QGIS.

Para (-97.5959, 21.1922), yo recibo(-109.4896, 0.0002)

¿Alguna sugerencia?

Estoy abierto a hacer esto de manera más eficiente si hay una manera más fácil.

Zach
fuente
No veo el problema con la consulta. Tal vez pueda intentar diagnosticar el problema en partes, ¿tal vez intentar eliminar la parte QGIS y simplemente usar la línea de comando para postgis?
BradHards
Tal vez no lo entiendo, pero parece que está ingresando coordenadas de longitud y latitud (-97, 21) en grados, en un CRS que está basado en UTM y usa medidores. Si declara esto como SRID 26918, entonces los valores largos / lat deben estar en ese CRS. Si los valores Long / Lat están en grados, deberá crear la geometría como ST_SetSRID (MakePoint (...), 4326) y luego transformar la capa a 26913
Micha
@Micha, deberías agregar tu comentario como respuesta. Espero que el SRID adecuado resuelva el problema de los OP. También podría ser útil incluir un ejemplo de cómo agregar un ST_Transform .
katahdin

Respuestas:

16

Tal vez no lo entiendo, pero parece que está ingresando las coordenadas de Longitud Latitud (-97, 21) en grados, en un CRS que está basado en UTM y usa medidores. Si declara esto como SRID 26918, entonces los valores largos / lat deben estar en ese CRS. Si los valores Long / Lat están en grados, deberá crear la geometría como ST_SetSRID (MakePoint (...), 4326) y luego transformar la capa a 26913. Por lo tanto, poner todo junto, si necesita tener la capa en 26913, pero sus columnas de longitud / latitud están en grados, con CRS 4326, luego

UPDATE sysinst.bio SET geom = ST_Transform(ST_SetSRID(ST_MakePoint(longitude, latitude), 4326),26913);
Micha
fuente
Gracias por la ayuda. Debería haber pensado en eso antes ...
Zach