Saya mengerjakan tugas yang mengharuskan saya untuk mendapatkan titik sampel setiap 1000 km di sepanjang garis pantai, dan telah mengalami masalah dengan Antartika. Dari apa yang bisa saya katakan, tampaknya ada masalah dengan penggunaan geometri dalam fungsi, ketika saya benar-benar berpikir geografi harus digunakan untuk operasi ini.
Menggunakan fungsi dari pertanyaan yang sangat mirip ini , saya mampu menghasilkan hasil yang terlihat seperti ini: .
Seperti yang dapat Anda lihat, ST_AddMeasure()
dan ST_LocateAlong()
sepertinya tidak memperlakukan geometri secara bulat, yang menghasilkan banyak titik yang berada di Kutub Selatan. Titik bahkan ditambahkan pada klip di sepanjang garis tanggal (sisi kiri). Per dokumentasi dari kedua fungsi ini, hanya geometri yang dapat digunakan.
Kode yang digunakan untuk menghasilkan poligon dan titik dapat ditemukan di sini , tetapi ini adalah SQL yang digunakan untuk menghasilkan titik:
CREATE TABLE atest AS WITH line AS
(SELECT
id,
ST_ExteriorRing((ST_Dump(geom)).geom) AS geom
FROM line_sample_test),
linemeasure AS
(SELECT
ST_AddMeasure(line.geom, 0, (ST_Length(line.geom))::int) AS linem,
generate_series(0, (ST_Length(line.geom))::int, 10) AS i
FROM line),
geometries AS (
SELECT
i,
ST_LocateAlong(linem, i) AS geom
FROM linemeasure)
SELECT
* from geometries;
Bagaimana saya bisa menghasilkan poin di setiap 1000 Km di sepanjang garis pantai ini?
sumber
Jawaban:
Seperti yang disarankan dalam salah satu komentar, pertama-tama saya akan mengubah geometri input ke proyeksi stereografi kutub.
Selain itu, Anda ingin menggunakannya
ST_Buffer
(dengan jumlah0
) untuk menghilangkan garis potong yang dihasilkan.Jadi ini akan mendapatkan hasil yang Anda inginkan:
Perhatikan bahwa kueri ini mengasumsikan bahwa hanya ada satu baris dalam
line_sample_test
tabel, jadi atur seperlunya untuk data input nyata Anda.sumber
ST_Buffer(geom, 0)
trik untuk menghilangkan cut-line - itu berguna!