ArcGIS Desktop을 사용하여 다각형을 특정 크기로 나누시겠습니까?


26

shapefile에 불규칙 모양의 다각형이 수천 개 있습니다. 각 다각형을 세 영역으로 나누고 해당 영역의 크기를 지정하고 싶습니다 (이전의 총 영역에 대한 합계). 하위 다각형 모양은 시각화 목적으로 사용되므로 중요하지 않습니다.

이 작업을 어떻게 수행 할 수 있습니까? 사용할 수있는 표준 알고리즘이 있습니까?


내가 고려한 한 가지 접근법은 다각형을 구성하는 모든 점을 얻는 것입니다. 그런 다음 직선을 사용하여 무작위로 두 개를 결합하고 다각형을 분할 한 다음 영역이 만족스러운 허용 오차 내에 있는지 확인합니다. 너무 작 으면 점을 한 방향으로 바꿉니다. 너무 큰 경우 반대 방향으로 포인트를 변경합니다.

답변:


34

이 문제에는 많은 유효한 해결책이 있습니다. 그중 하나는 설명과 약간 비슷하지만 "무작위"위치에서 다각형을 자르는 대신 계산량을 최소화하도록 의도적으로 의도적으로 수행 할 수 있습니다.

기본 알고리즘은 다음과 같습니다. 입력 어떤 스위프 평면 방향으로 구성 다각형 P 제로 영역의 타겟 영역 제로 다각형의 영역 및 음이 아닌 임계치 사이 t (단위 영역). 그 목적은 스위프 방향에 직교하는 선이있는 P 를 선의 오른쪽과 선의 왼쪽에있는 두 부분으로 분할하여 오른쪽 영역과 대상 영역 a의 차이t 보다 큽니다 .

L을 스윕 방향에 수직 인 방향 선으로 하자 . f (L)을 L의 오른쪽에있는 P의 면적에서 a를 뺀 값으로 정의 합니다 . 이러한 측면에서 작업을하는 것입니다 의 제로 찾을 수 F를 . 때문에 F는 미분 될 가능성이지만, 하나의 연속, 사용하는 것입니다 이분법, 시컨트 방법 , 또는 - 내 favorite- -Brent의 방법 . 모두 간단하고 수렴 할 수 있습니다. 인수의 수렴 공차에 t 를 사용하십시오 .

그게 다야. 이것을 코딩하는 데 무엇이 고려되는지 봅시다. 근본적인 발견은 일상적인 것입니다. 일반적인 코드 청크를 사용할 수 있으므로 GIS 작업은 코딩 f로 귀착됩니다 . 그렇게하려면

1.  Splitting the polygon by a line.
2.  Computing the area of the piece(s) to the right of the line.

두 작업 모두 거의 모든 벡터 기반 GIS에서 구현됩니다. 그렇지 않은 경우 선을 오른쪽의 반 평면을 나타내는 매우 큰 사각형으로 바꿀 수 있습니다. 1 단계는

1'. Clip the polygon to the rectangle.

그것은 정말 기본적인 작업입니다.

루트 찾기를 시작하려면 f 의 0이 놓여 지는 간격을 찾아야합니다 . 이 작업은 쉽습니다. 다각형의 봉투 ( "경계 상자")를 선 스윕 방향으로 투영합니다. 투영은 원하는 간격입니다.

이 질문은 오랜 역사를 가지고 있습니다. 오래 전에 ArcView 3.x에 대해이 알고리즘을 구현했으며 이전 ESRI 사용자 포럼에서 여러 번 설명했습니다. 구글

후버 분할 다각형 사이트 : forums.esri.com

토론, 코드에 대한 링크, 개선 및 변형 (예 : 다각형을 가능한 작은 크기로 원하는 크기로 분할) 및 래스터 데이터 알고리즘.

다음은 미국 대륙의 각 주에서 가장 낮은 3 분의 1이 음영 처리 된 모습입니다 (동일한 지역 투영에서). 분명히 스윕 방향은 수직이었습니다.

대체 텍스트


6

ET Spatial의 "GeoTools"라는 기성품 도구가 있습니다. "ET Miscellaneous"라는 도구가있는 경우 이 도구에는 다각형을 분리하는 두 가지 방법이 있습니다. 백분율 및 영역 별 (예 : 평방 미터, 헥타르 등 여러 단위). 이 도구는 그림과 같이 네면 중 하나 즉 NESW에서 다각형을 분할합니다. 나는 "위에서 아래로"즉 북쪽에서 남쪽으로 방법을 사용했습니다.

스플릿


0

ArcGIS Pro 2.3에는 Subdivide Polygon 이라는 새로운 도구가 있습니다.

이를 통해 부품 수 또는 원하는 부품 영역이 지정된 다각형을 분할 / 분할 할 수 있습니다.

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