ArcGIS에서 필드 계산기를 사용하여 다각형에 구멍이 있는지 확인하는 방법


10

일부 타사 소프트웨어는 구멍이있는 다각형 (도넛 다각형)을 처리 할 수 ​​없습니다. 그들을 찾기 위해 항상 ArcView 3 필드 계산기를 사용합니다.

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

그러나 ArcGIS 에서이 작업을 수행하려고하면 다음과 같은 결과가 나타납니다.

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

질문은 ArcGIS에서 올바르게 만드는 방법입니다.


partcount가 예상대로 작동하지 않는다는 것에 놀랐습니다. 분명히 도넛은 내부 링이 있는 단일 부품 피처 일 수 있습니다 ( 이 페이지 의 마지막 코드 블록 앞의 문장 / 그래픽 참조) . 또한 파이썬에서 스크립트를 감지하지만 필드 계산기 에서는 감지 하지 못하는 스크립트에 대한 스레드 를 보았습니다 .
Chris W

코드 블록을 사용하여 수행 할 수는 있지만 추악합니다. 메인 라인 prt = shp.getPart (0) feat = arcpy.Polygon (prt). feat.area를 계산하고 shp.area와 비교하는 것으로 충분합니다
FelixIP

관련 리소스 : gis.stackexchange.com/questions/27255 면적 비교 솔루션이보기 흉하지만, 작동하고 필드 계산기 내에있는 것 같습니다. 답변으로 게시 할 가치가 있습니다.
Chris W

그의 대답은 복식으로 (나는 오래 전에 알고 있었다) 정수, 내 자신의 거래를 비교하기 때문에 차라리, @Hornbydd 학점을 줘야 할 것
FelixIP

답변:


19

부품 수 는 정답을 산출하지 않습니다 . 구멍이없는 다중 부분 다각형을 가질 수 있습니다. 시나리오는 아래 이미지를 참조하십시오.

여러 부분 다각형

ArcObjects를 호출하여 다각형에 구멍이 있었는지 물어볼 수 있었기 때문에 이것은 ArcGIS 10 이전의 간단한 쿼리 였지만 ESRI는 VBScripting 환경 에서이 지원을 상당 부분 제거하여 현재는 쓸모가 없습니다. ...

어쨌든 파이썬 으로이 질문을 해결할 수 있습니다.

def hasHole(geom):
  parts = geom.partCount
  boundaries = geom.boundary().partCount
  if boundaries > parts:
    return 1
  else:
    return 0

표현식 상자에 다음을 배치하십시오.

hasHole(!Shape!)

우아한 답변 감사합니다. 내가 ArcView에서 3의 부재에 사용되는 하나 @ChrisW에 내 의견을 참조, 신뢰성이 떨어지는이었다
FelixIP

1

두 표현의 차이점을 언급하고 있습니까? 그렇다면 맨 아래에 파이썬이 파서를 사용하고 맨 위에있는 것이 VB를 사용하는 것처럼 보입니다. ArcGIS의 필드 계산기 창에서이를 변경하려면 Python 대신 VB를 선택하면 최상위 표현식이 작동합니다.


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