PostGIS를 사용하여 토폴로지 관계 식별


16

PostGIS를 사용하여 기본 유형학 분석을 수행하려고합니다. 내 목표는 다른 다각형에 닿는 다각형을 찾는 것입니다. 이렇게하기 위해 나는 효과가 있다고 생각했습니다 ST_GetFaceEdges( reference ). 데이터베이스의 모든 다각형을 확인하고 해당 다각형에 닿는 다른 다각형을 모두 나열하고 싶습니다. 아래 이미지에서 두 개의 다각형 (건물)이 한 건물에 닿고 다른 4 개의 결과가 0 다각형에 닿았다고 말할 수 있습니다.

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

그러나 어떻게해야하는지 이해하는 데 어려움이 있습니다. 예제를 복사하려고 할 때 이해하지 못하는 부분이 몇 가지있었습니다.

-- Returns the sequence, edge id
-- , and geometry of the edges that bound face 1
-- If you just need geom and seq, can use ST_GetFaceGeometry
SELECT t.seq, t.edge, geom
FROM topology.ST_GetFaceEdges('tt',1) As t(seq,edge)
    INNER JOIN tt.edge AS e ON abs(t.edge) = e.edge_id;

topology테이블 이름, 열 또는 함수의 일부 인지 확실하지 않습니다 . 나는 그것이 테이블이라고 가정했지만 확실하지 않습니다.

-- try out on sample of data
-- Table is called 'TestArea', column used is 'fid_1'
SELECT t.seq, t.edge, geom
FROM  TestArea.ST_GetFaceEdges('fid_1', 1) As t(seq,edge)
    INNER JOIN tt.edge AS e ON abs(t.edge) = e.edge_id;

또한 내부 조인의 기능이 무엇인지 확실하지 않습니다. 결과가 원래 개체에 결합됩니까?


4
나는 underdark가 그녀의 특징적으로 명확한 다이어그램으로 이것에 대답했다고 알고 있지만, 확실하지 않은 것은 다각형이 처음에 위상 적으로 관련되어 있는지 여부입니다. 이 경우 토폴로지는 시각적 표현과 별개로 엔티티 간의 논리적 관계를 암시하며 (PostGIS에서) 등을 사용하여 스키마를 설정해야합니다 CreateTopology( bit.ly/oLk8QY )하지만 건물이 디지털화되는 방식은 나에게 보입니다. 가장자리의 시각적 근접성에도 불구하고 위상 적으로 구별되는 것처럼. 미래의 질문자들이 알아야 할 내용입니다.
MerseyViking

이것은 AddTopoGeometryColumn쿼리를 실행하기 전에 테이블 에 a 를 추가해야한다는 것을 의미 합니까? ST_Touches내가 확인한 값 의 결과를 바탕으로 모든 것이 의미가 있었지만 우연히 그럴 수도 있습니다.
djq

1
에 전화해야 할 AddTopoGeometryColumn뿐만 아니라 데이터는 위상 적으로 일관된 방식으로 디지털화해야합니다. 예를 들어, 전통적으로 두 개의 분리 된 주택을 두 개의 다각형으로 디지털화하고 GIS에서 "정점에 스냅"을 사용하여 공유 벽면 접촉을 보장하지만 각 끝에 일치점이있는 두 개의 일치 선으로 저장됩니다. 그러나 그것들을 위상 적으로 디지털화한다는 것은 공유 벽이 실제로 하나의 선과 각 다각형이 공유하는 두 개의 노드라는 것을 의미합니다. ST_Touches위상 적 측면이 아니라 근접성에 대한 공간적 점검 만 수행합니다.
MerseyViking

답변:


19

대신 ST_Touches 를 사용할 수 있습니다 .

ST_Touches — 도형에 공통점이 하나 이상 있지만 내부가 교차하지 않는 경우 TRUE를 반환합니다.

ST_Touches는 다음과 같은 경우 TRUE를 리턴합니다.

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

카운트를 얻는 것은 다음과 같이 작동해야합니다.

SELECT a.id, count(*)
FROM polygon_table as a
JOIN polygon_table as b
  ON ST_Touches(a.the_geom,b.the_geom)
GROUP BY a.id

그래도 각 다각형이 얼마나 많은 다각형을 만지는 지 알고 싶습니다. 그렇지 않으면 그것은 완벽하다. 그리고 나는 그것을 달렸다!
djq

1
방금 모든 경우에 true / false 값을 반환한다는 것을 깨달았으므로 필요한 값이 몇 개인 지 계산하면됩니다. 감사!
djq

5
가능한 계산 쿼리를 추가했습니다.
underdark
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.