PostGIS에서 폴리 라인을 n 미터마다 점으로 변환하는 방법은 무엇입니까?


14

거의 동일의 질문 ,하지만 난 PostGIS와를 사용해야합니다.

나는 많은 폴리 ​​라인을 가지고 있으며, 이들 라인을 따라 n 미터마다 점으로 변환하고 싶습니다.

편집 : Stefan에게 감사드립니다. 최종 쿼리는 이전 버전의 PostGIS (1.5)로 인해 약간 달랐지만 결국 필요한 것을 얻었습니다. 포인트는 도로 밀도의 히트 맵으로 결합되었습니다. 여기에 이미지 설명을 입력하십시오


답변:


17

이 쿼리는 트릭을 수행해야합니다.

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. 처음에는 폴리 라인 스트링 열에서 다른 라인 스트링을 선택합니다. ST_Dump

  2. 그런 다음 ST_AddMeasure0 (선 스트링 시작)으로 시작하고 선 스트링 끝 (선 스트링 길이와 동일)으로 측정 단위를 정의해야합니다 . Generate_series이 측정에 대해 10 단계 씩 시리즈를 생성합니다. 여기 "n metres"에서이 미터 (10m)를 정의 할 수 있습니다 . i값은 모든 선 스트링을 위해 새롭게 시작합니다.

  3. ST_LocateAlongST_GeometryN당신은 다차원 점 형상을 만들 수 있습니다.

  4. 마지막으로이 지오메트리의 X 및 Y 값을 추출하고 그로부터 점을 만들어야합니다.

결과는 다음과 같습니다. 여기에 이미지 설명을 입력하십시오

편집하다

공정하게 말해서이 정보를 추가하고 싶습니다.이 답변의 아이디어와 쿼리는 PostGIS의 DEM에서 드레이프 라인을 만드는 데 사용하는 쿼리에서 추출됩니다. 이에 대한 훌륭한 구현은 Mathieu Leplatre 의이 기사 에서 설명 합니다.


나는이 SQL 구문에 익숙하지 않다는 것을 분명히 할 수 있습니까 WITH line AS? 어디에서 사용됩니까? 다른 곳에서는 '줄'이 보이지 않습니다.
culebrón

2
@ culebrón WITH Query더 큰 쿼리에 임시 테이블을 사용합니다. 다음은 몇 가지 정보입니다. postgresql.org/docs/8.4/static/queries-with.html . line다음 하위 쿼리에서 사용됩니다 linemeasure. 이 하위 쿼리에서 선택한 데이터는 하위 쿼리에서 선택한 내용을 기반으로합니다 line. 그들은 서로 위에 세워져 있습니다. 도움이 되었기를 바랍니다.
Stefan

PostGIS 2.0 이전의 함수는 st_locate_along_measure입니다.
culebrón
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.