PostGIS의 선으로 다각형 만들기


13

작은 다각형의 다각형을 선에서 나누려고하지만 st_split 함수를 사용할 수 없다고 생각합니다. 필요한 것은 선 스트링 그리드를 사용하여 큰 다각형 안에 작은 다각형을 만드는 것입니다.

몇 가지 방법을 시도했지만 결과를 얻을 수 없습니다. 내가 시도한 것 :

st_split ()을 사용하여 LineString에서 하나의 다각형을 나눕니다.

경계 다각형에서.

여기에 이미지 설명을 입력하십시오

그리고 선 스트링 테이블 :

여기에 이미지 설명을 입력하십시오

다음 다각형이 필요합니다.

여기에 이미지 설명을 입력하십시오

문제 : 여러 줄에서 다각형을 나눌 수 없으며 여러 줄 문자열에서 다각형을 나눌 수 없습니다.

내가 시도하고있는 다른 방법은 st_polygonize () 를 사용하여 선에서 다각형만드는 것 입니다.

SELECT 
   g.path[1] as gid, 
   g.geom::geometry(polygon, 22033) as geom 
FROM
   (SELECT 
     (ST_Dump(ST_Polygonize(geom))).* 
   FROM linestable
) as g;

PostgreSQL 및 PostGIS를 사용하여 선 세그먼트에서 다각형 생성 에서 추출

문제점 : 다각형 (경계)을 하나만 얻을 수 있습니다.

누군가 줄 문자열에서 다각형을 얻는 가장 좋은 방법이 무엇인지 말해 줄 수 있습니까, 아니면 뭔가 빠졌습니까?

참고 : 테이블은 동일한 SRID에 있으며 형상이 그리드에 스냅됩니다. QGIS에서는 선에서 다각형으로 완벽하게 다각형 화 프로세스를 실행할 수 있습니다.

John의 요구에 따라 다음은 선 스트링 테이블입니다. https://drive.google.com/file/d/0B603y_m735jfS014S0EyVnpMUEU/view?usp=sharing


1
선 스트링 형상을 어딘가에 게시 할 수 있습니까? ST_Dump와 함께 ST_Polygonize가 작동해야합니다.
John Powell

확실한. 표에 대한 링크로 게시물을 편집했습니다.
Pablo Pardo

@ JohnPowellakaBarça 이것을 볼 수 있습니다. 이 질문은 훌륭합니다. 샘플 세트의 ST_Polygonize는 단일 다각형을 반환합니다. 우리는 본질적으로 열린 LINESTRINGS의 엉망을 분해하고 직사각형을 만들 수있는 모든 것을 찾아야합니까?
Evan Carroll

1
@EvanCarroll. 확실한. 나는 미친 듯이 바쁘다. 아마 며칠 동안은 아닐 것이다.
존 파월

1
@ppardoz. Espero que esto te ayude. 나는 당신의 테이블 defs가 모두 스페인어로 있음을 알았습니다 :-)
John Powell

답변:


4

내가 사용하여이 작업을 얻었다 ST_Node을 과 함께, 처음 ST_Collect 내 noded 선 스트링의 집합으로 라인을 변환, 다중 선 스트링 .

ST_Node 에 대한 문서에서 말했듯이 :

모든 입력 노드를 유지하면서 가능한 한 적은 수의 노드를 사용하여 라인 스트링 세트를 완전히 노드 화하십시오.

이것이 의미하는 것은 모든 선 스트링이 가능한 모든 조합으로 결합되어 다각형의 외부 링과 동등한 것을 구성한다는 것입니다. 반면, ST_Polygonize LineStrings 집합 을 시도 할 때 그 자체로는 다각형을 설명하지 않는 경우 LineStrings를 다시 가져옵니다. 그래서 이것은 작동합니다 :

WITH multi(geom) AS (
  SELECT ST_Node(ST_Collect(geom))
  FROM leyenda_digitalizar00
)
SELECT ST_AsText( (ST_Dump(ST_Polygonize(geom))).geom )
FROM multi;

이 중 첫 번째 부분, 즉 CTE multi를 실행하면 출력은 다음과 같습니다.

멀티 라인 스트링 ((204.5 69.9000000000004,204.5 69.9000000000004), (204.5 68.9,205.4 68.9), (204.5 68.9,204.5 69,204.5 69.1,204.5 69.2,204.5 69.3,204.5 69.4,204.5 69.5,204.5 69.6,204.5 69.7,204.5 69.8,204.5 69.7,204.5 69.8,204.5 69.9,204.5 69.8,204.5 69.9,20 204.5 69.9000000000004), (209.5 68.9,209.5 68.8,209.5 68.7,209.5 68.6,209.5 68.5,209.5 68.4,209.5 68.3,209.5 68.2,209.5 68.1,209.5 68,209.5 67.9,209.5 67.8,209.5 67.7,209.5 67.6,209.5 47.5,209.5 67.5 , 209.5 .......

이제이 MultiLinestring을 ST_Polygonize에 공급하면 예상대로 작동합니다.

폴리곤 ((205.4 68.9,204.5 68.9,204.5 69,204.5 69.1,204.5 69.2,204.5 69.3,204.5 69.4,204.5 69.5,204.5 69.6,204.5 69.7,204.5 69.8,204.5 69.9,204.5 69.9000000000004,205.4 69.9,205.4 69.3,205.4 68.9))

폴리곤 ((204.5 69.9000000000004,204.5 70,204.5 70.1,204.5 70.2,204.5 70.3,204.5 70.4,206.8 70.4,209.5 70.4,209.5 70.3,209.5 70.2,209.5 70.1,209.5 70,209.5 69.9,205.4 69.9,204.5 69.9000000000004))

폴리곤 ((206.8 70.4,204.5 70.4,204.5 70.5,204.5 70.6,204.5 70.7,204.5 70.8,204.5 70.9,204.5 71,204.5 71.1,204.5 71.2,204.5 71.3,204.5 71.4,206.8 71.4,206.8 70.4))

분명히 ST_AsText는 단지 설명을위한 것이며 경로 ID를 원한다면 조정해야합니다.

핵심 테이크 아웃은 ST_Polygonize가 이미 폴리곤의 윤곽선을 설명하는 선 스트링을 예상한다는 것인데, 이는 위에서 ST_Node (ST_Collect (....)가하는 것입니다.


정말 멋지다.이 솔루션이 효과가 있다는 것을 확인할 수있다! 반대로, 나는 왜 ST_Polygonize()문자열이 필요한지, 또는 ST_Node()먼저 전화하지 않고 유스 케이스가 무엇인지에 대해 궁금합니다
Evan Carroll

1
@EvanCarroll. 답은 ST_Polygonize가 이미 다각형을 나타내는 세트에있는 선 스트링을 취하는 반면이 질문의 선 스트링은 여러 가능한 다각형을 구성하는 것입니다. 내 이해는 이것이 ST_Node 가하는 것입니다. 더 조사하고 답변을 업데이트하려고합니다.
존 파월
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.