[LINE | MULTILINE] STRING에서 POINT를 추출하는 방법


10

DB에 저장된 또는 QGIS모든 점을 표시 하기 위해 vectorLayer를 만들고 싶습니다 .LINESTRINGMULTILINESTRINGPostGIS

나는 모든 점을 LINESTRING(또는 MULTILINESTRING)으로 변환해야한다고 생각합니다 POINT.

첫 번째 질문 :

어떤 거기에 PostGIS그 작업을 수행하는 기능은?

두 번째 질문 :

결과 POINT테이블 에서 중복 포인트를 제외하려면 어떻게해야합니까?


모두에게 감사합니다. 당신의 모든 대답은 저에게 많은 도움이되었습니다. 올바른 것으로 표시 할 것을 결정하기 위해 조금 생각해야합니다. :)
Heisenbug

답변:


7

점을 순서대로 가져와 원래 형상에 연결하려면

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

http://wiki.postgresql.org/wiki/Deleting_duplicates 에서 복제본을 제거 하십시오.

중복 제거를 위해서는 하나의 고유 ID가 필요하다는 점을 명심하십시오.


안녕하세요 오타가 있습니다. 마지막 대괄호를 제거해야합니다. 올바른 구문은SELECT (ST_DumpPoints(the_geom)).path as path, id, (ST_DumpPoints(the_geom)).geom FROM linestrings
aborruso

5

첫 번째 질문에 관해서는 ST_DumpPoints에 대한 PostGIS 함수가 있습니다 .

문서 페이지의 첫 번째 예는 정확히 필요한 것입니다. 이 함수는 집합 반환 기능이므로 점을 덤프하지 않고 원래 형상과 관련된 일부 정보 (경로 배열)도 덤프합니다. 요점 만 신경 쓰기 때문에 다음과 같이 시도 할 수 있습니다.

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

2

광고 1.

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

ad 2. 중복 포인트 선택 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;

이것은 작동하지 않으며 처리되는 각 행에 대해 빈 형상 및 PostgreSQL 문제 경고를 생성합니다 OGC WKB expected, EWKB provided - use GeometryFromEWKB() for this. 당신은 건너 뛸 수 ST_AsEWKB()모두,하지만 여전히 말이 안 것, 마지막 예를 참조 ST_PointFromWKB
kprist

입력 bytea가 POINT 도형을 나타내지 않으면 NULL이 반환됩니다.
블라디미르

2

고유 한 포인트 만 덤프하려면 SELECT DISTINCT ON표현식에 하위 쿼리를 몇 개 사용할 수 있습니다 .

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;
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.