Saya ingin membuat vectorLayer QGIS
untuk menampilkan semua titik yang membentuk LINESTRING
atau MULTILINESTRING
disimpan dalam PostGIS
DB.
Saya pikir saya perlu mengubah semua poin LINESTRING
(atau MULTILINESTRING
) menjadi POINT
.
Pertanyaan pertama :
Apakah ada PostGIS
fungsi untuk melakukan itu?
Pertanyaan kedua :
Jika saya ingin mengecualikan poin duplikat dari POINT
tabel hasil , bagaimana saya bisa melakukannya?
qgis
postgis
point
polyline-creation
linestring
Heisenbug
sumber
sumber
Jawaban:
Untuk mendapatkan poin dalam urutan dan tautan ke penggunaan geometri asli
dan hapus dublicate dari http://wiki.postgresql.org/wiki/Deleting_duplicates
ingat bahwa Anda perlu memiliki satu id unik untuk menghapus dublicate, jika Anda tidak memilikinya, Anda harus membuatnya
sumber
SELECT (ST_DumpPoints(the_geom)).path as path, id, (ST_DumpPoints(the_geom)).geom FROM linestrings
Sejauh pertanyaan pertama yang bersangkutan, ada fungsi PostGIS hanya untuk itu, ST_DumpPoints .
Contoh pertama di halaman dokumen adalah persis apa yang Anda butuhkan. Ini adalah fungsi set-return, jadi tidak hanya membuang titik, tetapi juga beberapa info (larik jalur) yang menghubungkannya dengan geometri asli. Karena Anda hanya peduli pada poin, Anda dapat mencoba sesuatu seperti ini:
sumber
iklan 1.
iklan 2. Pilih Duplikat Poin PostGIS
sumber
OGC WKB expected, EWKB provided - use GeometryFromEWKB() for this
. Anda bisa saja melewatkanST_AsEWKB()
semuanya, tetapi masih tidak masuk akal, lihat contoh terakhir di ST_PointFromWKBUntuk hanya membuang poin unik, Anda bisa menggunakan beberapa subqueries dengan
SELECT DISTINCT ON
ekspresi :sumber