PostGIS kullanarak mevcut tablodaki boylam / enlem koordinatlarından POINT mi yapıyorsunuz?


10

Varolan bir tablonun boylam ve enlem sütunlarını kullanarak bir NOKTA yapmak istiyorum .
İşte ST_MakePoint belgelerine bir bağlantı .

İşte masam:

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

Geometri Sütunu Ekleme:

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

İşte benim sorgu:

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

QGIS'de bakıldığında POINTS yanlış çizilmiş olsa da döndürülen hata yok.

Çünkü (-97.5959, 21.1922)alıyorum(-109.4896, 0.0002)

Herhangi bir öneri?

Daha kolay bir yol varsa bunu daha verimli yapmaya açıkım.


Sorgu ile ilgili sorunu görmüyorum. Belki problemi parçalar halinde teşhis etmeye çalışabilirsiniz - belki QGIS kısmını ortadan kaldırmaya çalışın ve sadece postgis için komut satırını kullanın?
BradHards

Belki anlamıyorum, ama Boylam Enlem koordinatlarını (-97, 21) derece olarak UTM tabanlı ve ölçüm cihazları kullanan bir CRS'ye giriyorsunuz. Bunu SRID 26918 olarak bildiriyorsanız, uzun / lat değerleri o CRS'de olmalıdır. Uzun / Lat değerleri derece cinsindeyse, geometriyi ST_SetSRID (MakePoint (...), 4326) olarak oluşturmanız gerekir, daha sonra katmanı 26913
Micha

@Micha, yorumunuzu cevap olarak eklemelisiniz. Uygun SRID'nin OP sorununu çözeceğini umuyorum. Ayrıca bir ST_Transform eklemek ve buna örnek eklemek de yararlı olabilir .
katahdin

Yanıtlar:


16

Belki anlamıyorum, ama Boylam Enlem koordinatlarını (-97, 21) derece, UTM tabanlı ve ölçüm cihazları kullanan bir CRS'ye giriyorsunuz. Bunu SRID 26918 olarak bildiriyorsanız, uzun / lat değerleri o CRS'de olmalıdır. Uzun / Enlem değerleri derece cinsindeyse, geometriyi ST_SetSRID (MakePoint (...), 4326) olarak oluşturmanız ve ardından katmanı 26913'e dönüştürmeniz gerekir. ancak boylam / enlem sütunlarınız CRS 4326 ile derece cinsindendir,

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

Yardım için teşekkürler. Bunu daha önce düşünmeliydim ...
Zach
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.