분기 다각형 모양을 감지 하시겠습니까?


13

연속 적용 범위를 만드는 수백만 개의 다각형이있는 벡터 레이어가 있습니다. 모양에 따라 분류해야합니다. 이미 컴팩트 같은 풍경 생태에서 여러 모양 인덱스를 사용하고 ( 4piA / P ^ 2 ), 평균 폭 ( 2A / P ), 모양 번호 ( P / SQRT (A)가 ), 나 또한보고 이 답변의 진원도 / 컴팩트 계산 다각형?

내 문제는 이러한 모든 지표가 면적과 둘레의 일부 비율 만 사용한다는 것입니다. 프랙탈 차원 지수 조차도 면적과 둘레 ( 2ln (0.25P) / ln (A) ) 만 사용합니다. 그러나 면적과 둘레는 동일하지만 모양이 다른 두 다각형을 어떻게 구별 할 수 있습니까? 이 분기 다각형 A와 같이 :

분기 다각형 대 곡선 스트립

곡선 스트립 B와 같은 면적과 둘레로 그리려고했습니다. 알려진 모든 인덱스는 동일합니다. 그러나 나를 위해 간단한 스트립 (신월처럼 곡선을 포함하여)을 복잡한 가지 모양과 구별하는 것이 매우 중요합니다.

직선으로 길쭉한 모양을 감지하는 관련 원주 인덱스 를 알고 있지만 다각형도 동일한 원주를 가질 수 있기 때문에 다각형 B를 곡선 스트립으로 표시하고 직선 스트립이 아닌 곡선 스트립으로 표시합니다 . 볼록 껍질을 구성하고 Apolygon / Aconvex 영역의 비율을 계산하더라도 여기서 매우 유사 할 수 있습니다.

그렇다면 벡터 데이터에서 분기 다각형 A와 다각형 B를 어떻게 명확하게 구별 할 수 있습니까? (래스터로 변환하려면 매우 작은 셀 크기, 막대한 데이터 세트 및 메모리 부족이 필요하므로 불가능합니다). 다른 매개 변수를 포함하는 다른 모양 색인이 있습니까? 이상적으로이 방법은 명확하게 분기 된 다각형뿐만 아니라 C와 D까지도 구분합니다.

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

내 유일한 아이디어는 볼록 껍질을 구성한 다음 볼록 껍질에서 다각형을 지우고 떠난 (큰) 조각 수를 계산합니다 (전체 레이어가 아닌 다각형으로 다각형 지우기). 이것은 경계 복잡성을 보여줄 수 있습니다.

나는 나중에 수학적으로 구현할 수있는 수학 솔루션 / 알고리즘을 환영한다.


1
많은 파이썬이 필요하지 않습니다. 시도하십시오! 모양!. 볼록한 선체 (). symmetricDifference (! shape!) 필드 계산기에서. 작은 서브 세트 사본에서 먼저 시도하십시오. 올바른 구문은 arcpy geometry help를 참조하십시오.
FelixIP

이것은 좋은 질문이 될 수 있지만 현재 QGIS 또는 ArcGIS Desktop에 대해 묻는 지 여부를 묶지 않고 파이썬에도 던지면서 여러 가지 질문을하고 있습니다. 시도한 것을 정확하게 지정하면 잠재적 인 응답자가 붙어있는 위치를 쉽게 도울 수 있습니다. 첫 번째 답변을 방해하지 않기 위해 QGIS에 집중하는 것이 좋습니다.
PolyGeo

1
shapefile이 이미 2GB를 초과했기 때문에 Esri 지오 데이터베이스에 데이터가 있습니다. QGIS 또는 다른 곳에서 작동하는 솔루션이 있으면 이것에 대해 뭔가를 할 수 있습니다. 그러나 특정 소프트웨어 내부에 묻지 않습니다. 복잡한 테두리가있는 모양을 수학적으로 감지하는 방법 인 메트릭, 방법에 대해 묻습니다 (분기). 질문 1 개 수식이있는 과학 기사도 괜찮을 것입니다. 나는 그것을 직접 구현하는 방법을 생각할 것입니다.
nadya

1
저의 첫 생각은 당신의 생각과 같았으며, 볼록한 (또는 오목한) 선체에서 원본을 빼고 남은 다각형의 수와 크기의 차이를 보았습니다 (알파 모양 참조).
user2856

1
골격 만 계산하기에 충분히 빠르면 소형화를 위해 골격의 가장 먼 노드 사이의 4A / PL, 면적, 둘레, 길이를 계산하는 데 사용합니다. 가장 큰 내접원에도 동일하게 적용됩니다.
FelixIP

답변:


11

다음 방법을 살펴볼 수 있습니다. 다각형을 골격 화 하고 고유 한 소스 다각형 ID를 사용하여 원래 다각형과 관련된 선 유형 피쳐를 작업하십시오. 몇 가지 추측이있을 것입니다 (예 : 폴리 라인을 실제 중심선으로 고려할 때 : 폴리 라인이 중심선 상태에 적합하도록 최소 길이). 단일 소스 다각형의 중심선 수가 1보다 크면 분기됩니다.

중심선까지 정리할 때 분기 된 다각형에는 여러 개의 선이 있고 직선 다각형에는 가운데에 하나의 큰 선만있을 수 있습니다 (사실 사람의 해석과 동일).

예 :

  • Y 문자를 그릴 때는 최소 2 개의 연속 스트로크 (= 2 폴리 라인)를 사용하므로 최소 스트로크 수가> 1이므로 분기됩니다.
  • L 문자를 그릴 때는 연속 스트로크를 1 회 이상 사용하십시오. 가지가 없습니다.

이 논리의 더 많은 예 :

  • A를 그릴 때 : 2 스트로크 = 분기
  • 당신이 B를 daw 할 때 : 3 스트로크 = 그것은 분기
  • C를 그릴 때 : 1 스트로크 = 분기되지 않음
  • 기타

나는 아무것도 시도하지 않고 단지 논리를 시도했지만 그것이 효과가 있다고 생각합니다.

참조 : QGIS / Python 또는 http://postgis.net/docs/ST_StraightSkeleton.html 에서 벡터 스켈레톤 화

또는

예

출처 : PostGIS / Python에서 복합 폴리곤의 중심선 추출

편집 : C & D의 경우 이미 B 모양을 필터링해야합니다 (분지되지 않음).

  • 고유 ID가 중심선과 소스 다각형을 연결하는지 확인하십시오.
  • 다각형을 폴리 라인으로 변환
  • 중심점 폴리 라인과 경계선 폴리 라인을 규칙적인 점으로 밀도를 높입니다 (나중에 메모리 문제를 피하기 위해 너무 많지는 않지만 불규칙 비트를 "잡을"정도로 충분합니다.
  • 중심선의 점과 경계선의 점 사이의 거리 행렬을 만듭니다.
  • ID_centerline = ID_borderline 인 행렬 라인에만 유지하십시오.
  • 표준 편차 값을 갖도록 통계 생성
  • 높은 SD 값에 대해 비정형 윤곽임을 나타내는 경계 값을 설정하고 각 고유 ID에 대해 필요한 지표를 만듭니다
  • 고유 ID의 기초에있는 필드를 결합하여 표시기를 원래 다각형으로 되돌립니다.

아이디어 주셔서 감사합니다, 중심선을 만들려고합니다
nadya

내 다각형 C와 D를 구별하는 문제는 여전히 남아 있습니다
nadya

사례마다 다른 방법이 필요할 수 있으며 작업을 분할 할 수 있습니다. 비 분지 다각형 (B)이 있으면 B를 수정하여 C와 D를 찾으려고 시도 할 수 있습니다. 문제는 C와 D를 구별하기 위해 어떤 논리를 사용하는지 알 수 없다는 것입니다. 기준.
gisnside

1
C와 D의 차이는 C에서 다각형의 변이 중심선으로부터 대략 균일 한 거리이고, D에서 변이 중심선으로부터 불균일 한 거리 인 것으로 보인다.
csk

1
@csk 나는 그것을 본다. 코드로 변환하면 중심선과 경계선 사이의 거리에 대한 통계를 계산하는 것 같습니다. 더 많은 점으로 경계 폴리 라인을 조밀 한 다음이 경계를 점으로 변환 + 중심선에서 동등한 작업에서 거리를두면이 동작에 대한 통계가 표시됩니다. 표준 편차가 높으면 모양이 불규칙 할 수 있습니다. 하드 다각형의 tousands에서 해당 작업을 수행하는 방법을 볼 수 있지만 ...이 멋진 도전
gisnside
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.