Faire POINT à partir des coordonnées de longitude / latitude dans le tableau existant à l'aide de PostGIS?


10

Je voudrais créer un POINT en utilisant les colonnes de longitude et de latitude d'une table existante .
Voici un lien vers la documentation de ST_MakePoint .

Voici ma table:

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

Ajout d'une colonne de géométrie:

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

Voici ma requête:

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

Aucune erreur renvoyée bien que les POINTS soient mal tracés lorsqu'ils sont affichés dans QGIS.

Pour (-97.5959, 21.1922), je reçois(-109.4896, 0.0002)

Aucune suggestion?

Je suis disposé à le faire plus efficacement s'il existe un moyen plus simple.


Je ne vois pas le problème avec la requête. Vous pouvez peut-être essayer de diagnostiquer le problème en plusieurs parties - peut-être essayer d'éliminer la partie QGIS et utiliser simplement la ligne de commande pour les postgis?
BradHards

Peut-être que je ne comprends pas, mais vous semblez entrer des coordonnées de latitude et de longitude (-97, 21) en degrés, dans un CRS basé sur UTM et utilisant des mètres. Si vous le déclarez comme SRID 26918, les valeurs long / lat doivent être dans ce CRS. Si les valeurs Long / Lat sont en degrés, vous devrez créer la géométrie en tant que ST_SetSRID (MakePoint (...), 4326) puis transformer la couche en 26913
Micha

@Micha, vous devriez ajouter votre commentaire comme réponse. J'espère que le bon SRID résoudra le problème des PO. Il peut également être utile d'inclure un exemple d'ajout de ST_Transform .
katahdin

Réponses:


16

Peut-être que je ne comprends pas, mais vous semblez entrer des coordonnées de latitude et de longitude (-97, 21) en degrés, dans un CRS basé sur UTM et utilisant des mètres. Si vous le déclarez comme SRID 26918, les valeurs long / lat doivent être dans ce CRS. Si les valeurs Long / Lat sont en degrés, vous devrez créer la géométrie en tant que ST_SetSRID (MakePoint (...), 4326) puis transformer le calque en 26913. Donc, en mettant tout cela ensemble, si vous avez besoin d'avoir le calque en 26913, mais vos colonnes de longitude / latitude sont en degrés, avec CRS 4326, puis

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

Merci pour l'aide. J'aurais dû y penser avant ...
Zach
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.