Membuat TITIK dari koordinat bujur / lintang di tabel yang ada menggunakan PostGIS?


10

Saya ingin membuat POINT menggunakan kolom bujur dan lintang dari tabel yang ada .
Berikut tautan ke dokumentasi ST_MakePoint .

Ini meja saya:

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

Menambahkan Kolom Geometri:

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

Inilah pertanyaan saya:

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

Tidak ada kesalahan yang dikembalikan meskipun POIN salah diplot ketika dilihat di QGIS.

Karena (-97.5959, 21.1922), saya menerima(-109.4896, 0.0002)

Ada saran?

Saya terbuka untuk melakukan ini dengan lebih efisien jika ada cara yang lebih mudah.


Saya tidak melihat masalah dengan kueri. Mungkin Anda dapat mencoba mendiagnosis masalah di bagian - mungkin mencoba menghilangkan bagian QGIS, dan hanya menggunakan baris perintah untuk postgis?
BradHards

Mungkin saya tidak mengerti, tetapi Anda tampaknya memasukkan koordinat Longitude Latitude (-97, 21) dalam derajat, ke CRS yang berbasis UTM, dan menggunakan meter. Jika Anda mendeklarasikan ini sebagai SRID 26918, maka nilai long / lat harus dalam CRS itu. Jika nilai Long / Lat dalam derajat maka Anda perlu membuat geometri sebagai ST_SetSRID (MakePoint (...), 4326) kemudian mengubah layer menjadi 26913
Micha

@Micha, Anda harus menambahkan komentar sebagai jawaban. Saya berharap SRID yang tepat akan menyelesaikan masalah OP. Mungkin juga bermanfaat untuk menyertakan dan contoh cara menambahkan ST_Transformasi .
katahdin

Jawaban:


16

Mungkin saya tidak mengerti, tetapi Anda tampaknya memasukkan koordinat Longitude Latitude (-97, 21) dalam derajat, ke CRS yang berbasis UTM, dan menggunakan meter. Jika Anda mendeklarasikan ini sebagai SRID 26918, maka nilai long / lat harus dalam CRS itu. Jika nilai Long / Lat dalam derajat maka Anda harus membuat geometri sebagai ST_SetSRID (MakePoint (...), 4326) kemudian mengubah layer menjadi 26913. Jadi, kumpulkan semuanya, jika Anda perlu memiliki layer di 26913, tetapi kolom bujur / lintang Anda dalam derajat, dengan CRS 4326, lalu

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

Terima kasih untuk bantuannya. Aku seharusnya memikirkan itu sebelumnya ...
Zach
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.