Làm cách nào tôi có thể chuyển đổi polylines thành điểm mỗi n mét trong PostGIS?


14

Câu hỏi tương tự như thế này , nhưng tôi cần sử dụng PostGIS.

Tôi có một số polylines, và muốn biến chúng thành các điểm mỗi n mét dọc theo các đường này.

chỉnh sửa: Cảm ơn rất nhiều đến Stefan. Truy vấn cuối cùng của tôi hơi khác một chút, có lẽ là do phiên bản cũ hơn của PostGIS (1.5), nhưng cuối cùng tôi đã nhận được những gì cần thiết. Điểm được kết hợp thành một bản đồ nhiệt của mật độ đường. nhập mô tả hình ảnh ở đây


Câu trả lời:


17

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
  1. Đầ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

  2. 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_seriestạ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 igiá trị bắt đầu một lần nữa cho mỗi chuỗi đường.

  3. Với ST_LocateAlongST_GeometryNbạn tạo ra một hình học điểm đa chiều.

  4. 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: nhập mô tả hình ảnh ở đâ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.


Bạn có thể làm rõ, b / c Tôi không quen thuộc với các cấu trúc SQL này: WITH line ASđược sử dụng ở đâu? Tôi không thấy "dòng" ở nơi khác.
culebrón

2
@ culebrón Việc WITH Querycung cấp việc sử dụng các bảng tạm thời cho các truy vấn lớn hơn. Dưới đây là một số thông tin: postgresql.org/docs/8.4/static/queries-with.html . lineđược sử dụng trong truy vấn con tiếp theo linemeasure. Dữ liệu được chọn trong truy vấn con này dựa trên các lựa chọn được thực hiện trong linetruy vấn con. Họ đang xây dựng lẫn nhau. Hy vọng rằng đã giúp!
Stefan

Trong PostGIS cũ hơn 2.0 chức năng là st_locate_along_measure.
culebrón
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.