Kueri ini harus melakukan trik:
WITH line AS
(SELECT
your_polylinestring_id,
(ST_Dump(geom)).geom AS geom
FROM your_polylinestring_table),
linemeasure AS
(SELECT
ST_AddMeasure(line.geom, 0, ST_Length(line.geom)) AS linem,
generate_series(0, ST_Length(line.geom)::int, 10) AS i
FROM line),
geometries AS (
SELECT
i,
(ST_Dump(ST_GeometryN(ST_LocateAlong(linem, i), 1))).geom AS geom
FROM linemeasure)
SELECT
i,
ST_SetSRID(ST_MakePoint(ST_X(geom), ST_Y(geom)), 31468) AS geom
FROM geometries
Pada awalnya Anda memilih linestrings yang berbeda dari kolom polylinestring Anda ST_Dump
Maka Anda harus mendefinisikan elemen ukur dengan ST_AddMeasure
, dimulai dengan 0 (mulai dari linestring) dan akhir linestring (sama dengan panjang linestring). Generate_series
membuat serangkaian pengukuran ini pada langkah 10. Di sini Anda dapat mendefinisikan "n metres"
(dalam contoh ini 10 meter). The i
nilai dimulai lagi untuk setiap LineString.
Dengan ST_LocateAlong
dan ST_GeometryN
Anda membuat titik geometri multidimensi.
Akhirnya Anda harus mengekstraksi nilai X dan Y dari geometri ini dan membuat titik darinya.
Hasilnya bisa seperti ini:
EDIT
Agar adil, saya ingin menambahkan informasi ini: Gagasan dan kueri dalam jawaban ini diekstraksi dari kueri yang saya gunakan untuk membuat garis drape dari DEM di PostGIS. Implementasi yang sangat baik dari ini dijelaskan dalam artikel ini dari Mathieu Leplatre.