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.