Cách trích xuất ĐIỂM từ [LINE | MULTILINE] CHUINGI


9

Tôi muốn tạo một vectorLayer QGISđể hiển thị tất cả các điểm tạo thành một LINESTRINGhoặc một MULTILINESTRINGđược lưu trữ trong PostGISDB.

Tôi nghĩ rằng tôi cần phải chuyển đổi tất cả các điểm của LINESTRING(hoặc MULTILINESTRING) thành POINT.

Câu hỏi đầu tiên :

PostGISchức năng nào để làm điều đó?

Câu hỏi thứ hai :

Nếu tôi muốn loại trừ các điểm trùng lặp khỏi POINTbảng kết quả , làm thế nào tôi có thể làm điều đó?


cảm ơn tất cả. Tất cả các câu trả lời của bạn đã giúp tôi rất nhiều. Tôi phải suy nghĩ một chút để quyết định cái nào sẽ được đánh dấu là chính xác :)
Heisenorms

Câu trả lời:


7

Để có được điểm theo thứ tự và liên kết đến hình học ban đầu, hãy sử dụng

SELECT (ST_DumpPoints(the_geom)).path as path, id, (ST_DumpPoints(the_geom)).geom FROM linestrings)

và xóa các công khai khỏi http://wiki.postgresql.org/wiki/Deleting_d repeatates

hãy nhớ rằng bạn cần phải có một id duy nhất để xóa công khai, nếu bạn không có id, bạn cần tạo nó


Xin chào, có một lỗi đánh máy, bạn nên xóa dấu ngoặc cuối cùng. Cú pháp đúng phải làSELECT (ST_DumpPoints(the_geom)).path as path, id, (ST_DumpPoints(the_geom)).geom FROM linestrings
aborruso

5

Theo như câu hỏi đầu tiên, có một chức năng PostGIS chỉ dành cho điều đó, ST_DumpPoints .

Ví dụ đầu tiên trong trang tài liệu chính xác là những gì bạn cần. Đây là một hàm trả về tập hợp, do đó, nó không chỉ đổ các điểm, mà còn một số thông tin (mảng đường dẫn) liên quan đến hình dạng ban đầu. Vì bạn chỉ quan tâm đến các điểm, bạn có thể thử một cái gì đó như thế này:

SELECT (dp).geom FROM (
  SELECT ST_DumpPoints(geom) AS dp
    FROM linestrings
)

2

quảng cáo 1.

CREATE TABLE points AS
SELECT ST_PointFromWKB(ST_AsEWKB(linestring_geom)) AS point_geom FROM linestring_table;

quảng cáo 2. Chọn trùng lặp điểm PostGIS

CREATE TEMPORARY TABLE temp AS 
SELECT *
FROM points AS a, points AS b
WHERE ST_Equals(a.geom, b.geom) AND a.id <> b.id;

DROP FROM points USING temp WHERE points.id=temp.id;

Điều này không hoạt động, nó tạo ra các hình học trống và các vấn đề PostgreSQL cảnh báo cho mỗi hàng được xử lý : OGC WKB expected, EWKB provided - use GeometryFromEWKB() for this. Bạn chỉ có thể bỏ qua ST_AsEWKB()hoàn toàn, nhưng nó vẫn không có ý nghĩa gì, hãy xem ví dụ cuối cùng trong ST_PointFromWKB
kprist

NULL được trả về nếu bytea đầu vào không đại diện cho hình dạng POINT.
Vladimir

2

Để kết xuất chỉ các điểm duy nhất, bạn có thể sử dụng một vài truy vấn con với SELECT DISTINCT ONbiểu thức :

SELECT geom, gid, path
FROM (
  SELECT DISTINCT ON (geom) geom, path, gid
  FROM (
    SELECT (ST_DumpPoints(the_geom)).geom, (ST_DumpPoints(the_geom)).path, gid
    FROM my_linestrings_table
  ) f
  ORDER BY geom, path, gid
) f
ORDER BY gid, path;
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.