Truy vấn này nên thực hiện thủ thuật:
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
Đầu tiên, bạn chọn các dòng riêng biệt từ cột polylinestring của bạn với ST_Dump
Sau đó, bạn phải xác định các phần tử đo bằng ST_AddMeasure
, bắt đầu bằng 0 (bắt đầu linestring) và kết thúc linestring (giống như độ dài của linestring). Generate_series
tạo một chuỗi trên phép đo này theo bước 10. Ở đây bạn có thể xác định "n metres"
(trong ví dụ này là 10 mét). Các i
giá trị bắt đầu một lần nữa cho mỗi chuỗi đường.
Với ST_LocateAlong
và ST_GeometryN
bạn tạo ra một hình học điểm đa chiều.
Cuối cùng, bạn phải trích xuất các giá trị X và Y của hình học này và tạo một điểm từ nó.
Kết quả có thể như thế này:
BIÊN TẬP
Để công bằng, tôi muốn thêm thông tin này: Ý tưởng và truy vấn trong câu trả lời này được trích xuất từ một truy vấn mà tôi đang sử dụng để tạo các dòng treo lên từ các DEM trong PostGIS. Việc thực hiện xuất sắc điều này được giải thích trong bài viết này từ Mathieu Leplatre.