Fare POINT dalle coordinate di longitudine / latitudine nella tabella esistente usando PostGIS?


10

Vorrei fare un PUNTO usando le colonne di longitudine e latitudine di una tabella esistente .
Ecco un link alla documentazione di ST_MakePoint .

Ecco il mio tavolo:

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

Aggiunta della colonna Geometria:

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

Ecco la mia domanda:

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

Nessun errore restituito anche se i PUNTI vengono stampati in modo errato quando visualizzati in QGIS.

Per (-97.5959, 21.1922), ricevo(-109.4896, 0.0002)

Eventuali suggerimenti?

Sono aperto a farlo in modo più efficiente se c'è un modo più semplice.


Non vedo il problema con la query. Forse puoi provare a diagnosticare il problema in alcune parti - forse provare ad eliminare la parte QGIS e usare semplicemente la riga di comando per Postgis?
BradHards,

Forse non capisco, ma sembra che tu stia inserendo le coordinate di Longitudine Latitudine (-97, 21) in gradi, in un CRS che è basato su UTM e usa i contatori. Se lo stai dichiarando come SRID 26918, i valori long / lat devono essere in quel CRS. Se i valori Long / Lat sono in gradi, dovrai creare la geometria come ST_SetSRID (MakePoint (...), 4326), quindi trasformare il layer in 26913
Micha

@Micha, dovresti aggiungere il tuo commento come risposta. Mi aspetto che l'SRID corretto risolva il problema dei PO. Potrebbe anche essere utile includere un esempio di come aggiungere una ST_Transform .
katahdin,

Risposte:


16

Forse non capisco, ma sembra che tu stia inserendo le coordinate di Longitudine Latitudine (-97, 21) in gradi, in un CRS che è basato su UTM e usa i contatori. Se lo stai dichiarando come SRID 26918, i valori long / lat devono essere in quel CRS. Se i valori Long / Lat sono in gradi, sarà necessario creare la geometria come ST_SetSRID (MakePoint (...), 4326), quindi trasformare il layer in 26913. Quindi, unendo tutto, se è necessario disporre del layer nel 26913, ma le colonne di longitudine / latitudine sono in gradi, con CRS 4326, quindi

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

Grazie per l'aiuto. Avrei dovuto pensarci prima ...
Zach,
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.