POINT aus Längen- / Breitengradkoordinaten in einer vorhandenen Tabelle mit PostGIS erstellen?

10

Ich möchte einen PUNKT mit den Längen- und Breitengradspalten einer vorhandenen Tabelle erstellen .
Hier ist ein Link zur Dokumentation von ST_MakePoint .

Hier ist mein Tisch:

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

Hinzufügen einer Geometriespalte:

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

Hier ist meine Frage:

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

Kein zurückgegebener Fehler, obwohl die PUNKTE bei der Anzeige in QGIS falsch dargestellt werden.

Denn (-97.5959, 21.1922)ich erhalte(-109.4896, 0.0002)

Irgendwelche Vorschläge?

Ich bin offen dafür, dies effizienter zu tun, wenn es einen einfacheren Weg gibt.

Zach
quelle
Ich sehe das Problem mit der Abfrage nicht. Vielleicht können Sie versuchen, das Problem in Teilen zu diagnostizieren - vielleicht versuchen Sie, den QGIS-Teil zu beseitigen, und verwenden Sie einfach die Befehlszeile für Postgis?
BradHards
Vielleicht verstehe ich das nicht, aber Sie scheinen Längengrad-Breitengrad-Koordinaten (-97, 21) in Grad in ein UTM-basiertes CRS einzugeben, das Meter verwendet. Wenn Sie dies als SRID 26918 deklarieren, müssen sich die Long / Lat-Werte in diesem CRS befinden. Wenn die Long / Lat-Werte in Grad angegeben sind, müssen Sie die Geometrie als ST_SetSRID (MakePoint (...), 4326) erstellen und dann die Ebene um
Micha
@Micha, du solltest deinen Kommentar als Antwort hinzufügen. Ich gehe davon aus, dass die richtige SRID das OP-Problem lösen wird. Es kann auch hilfreich sein, ein Beispiel für das Hinzufügen einer ST_Transform aufzunehmen .
Katahdin

Antworten:

16

Vielleicht verstehe ich das nicht, aber Sie scheinen Längengrad-Breitengrad-Koordinaten (-97, 21) in Grad in ein UTM-basiertes CRS einzugeben, das Meter verwendet. Wenn Sie dies als SRID 26918 deklarieren, müssen sich die Long / Lat-Werte in diesem CRS befinden. Wenn die Long / Lat-Werte in Grad angegeben sind, müssen Sie die Geometrie als ST_SetSRID (MakePoint (...), 4326) erstellen und dann die Ebene in 26913 transformieren. Fügen Sie also alles zusammen, wenn Sie die Ebene benötigen in 26913, aber Ihre Längen- / Breitengradspalten sind in Grad angegeben, mit CRS 4326 dann

UPDATE sysinst.bio SET geom = ST_Transform(ST_SetSRID(ST_MakePoint(longitude, latitude), 4326),26913);
Micha
quelle
Danke für die Hilfe. Ich hätte vorher darüber nachdenken sollen ...
Zach