ArcGIS Desktop을 사용하여 하나의 Shapefile에서 겹치는 다각형을 계산합니까?


10

16,400 개의 다각형이있는 shapefile이 있습니다. 각 다각형은 전 세계의 조류 종의 확장을 보여줍니다.

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

이제 겹치는 다각형을 세어야합니다. 유니온으로 시도하고 디졸브 (연합 계산)하지만 유니온은 많은 다각형에서 작동하지 않습니다.

그런 다음 대륙을 자르려고했지만 많은 수의 다각형으로 인해 작동하지 않습니다. 또한 나는이 방법을 시도했지만 성공하지 못했습니다.

따라서 16400 다각형이 하나의 shapefile에 있으면 겹치는 다각형을 계산하는 방법이 있습니까?

10.0으로 작업 중이며 10.2로 작업 할 수 있습니다. ArcPy 솔루션도 훌륭합니다.

현재 나는 fishnet을 만들고 16400 다각형으로 shp의 행을 반복하고 다각형 이이 셀에 있고 다음 행 (다각형)을 취하는 경우 fishnet 셀의 값 필드에 1을 씁니다. 이 또한 fishnet 셀 수에 있으면 +1입니다.

그러나 이것이 좋은 해결책인지 어떻게 알 수 있는지 모르겠습니다. 또는이 접근법 을 사용하려면 R을 배워야 합니다.

결과 : 겹치는 다각형 중 새 다각형이 있고 겹침이 계산되는 필드 여야합니다.

결국 같은 장소에 몇 마리의 새가 있는지 볼 수있는 형태 파일이 있어야합니다.


데이터 세트 크기 때문에 문제가 발생했습니다. 답변과 제안하는 링크는 정확하지만 메모리 문제가 있습니다. 어쩌면 먼저 수십억 개의 은색 다각형이 생성되는 것을 피하기 위해 수백 미터 (예상 정밀도를 기반으로)로 데이터 통합을 시도 할 수 있습니다. 사본은 데이터를 수정하므로 작업해야합니다.
radouxju

1
모양 파일을 지역 모양 파일로 나눈 다음 지역 모양 파일에 대한 분석을 실행 한 다음 해체하여 전체 파일을 다시 얻습니다.
til_b

한 국가에서만이 모양을 자르려고했지만 999999 오류가 발생했습니다.
Nora

1
다각형의 복잡성을 줄이기 위해 주사위 도구 를 살펴 보셨습니까 ? 또한 999999 오류가 발생하여 데이터를 자르려고하면 형상 검사 도구를 사용해 통찰력을 얻었습니까?
Hornbydd

2
데이터에서 부분 형상 검사를 수행했으며 많은 자체 교차가 있습니다. 제안합니다. 1. 최대 RAM 사용 및 큰 페이지 파일 확인 2. 지오메트리 복구 3. 필요한 경우 다각형을 단순화합니다. 3. 하위 집합 데이터를 1/3 또는 1/4로 (또는 필요한 것) 4. Union-Dissolve-Rasterize 워크 플로 실행 이 답변 에서와 같이 5. 래스터를 합산하십시오.
Cotton.Rockwood

답변:


9

중복 기능 계산 (분석) 도구를 사용하는 것이 좋습니다 .

입력 지형지 물에서 평면형 중복 지형지 물을 생성합니다. 겹치는 피처 수는 출력 피처에 기록됩니다.

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


나는 또한 이것을 시도했지만 내 shp (너무 큰)에서는 작동하지 않습니다. 답변 주셔서 감사합니다
Nora

1
@Aaron 링크가 죽었습니다. Pro에는 다음과 같은 구현이 있습니다 : pro.arcgis.com/en/pro-app/tool-reference/analysis/…
Albert Albert

1
감사합니다 @Albert, 게시물은 귀하의 권장 사항에 따라 업데이트되었습니다.
Aaron

5

arcpy geometry token을 사용하면 다음과 같이 시도 할 수 있습니다.

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

import os
import arcpy

arcpy.env.workspace = r"" #path to workspace
arcpy.env.overwriteOutput = 1

polygon_fc = r"" #path to polygon fc

base = [row for row in arcpy.da.SearchCursor(polygon_fc,["OID@","SHAPE@"])]
compare = base

overlaps_stats = {}

for b in base:
    for c in compare:
        if b[1].overlaps(c[1]):
            #print "{0} overlaps {1}".format(b[0],c[0])
            if overlap_stats.has_key(b[0]):
                overlap_stats[b[0]].append(c[0])
            else:
                overlap_stats[b[0]] = [c[0]]

for key,value in overlap_stats.iteritems():
    print "Polygon {0}:  Overlaps: {1}.".format(key,len(value))

위의 샘플 데이터의 경우 코드는 다음과 같은 오버랩 카운트를 반환합니다. 여기에 이미지 설명을 입력하십시오

있는 그대로의 코드는 하나 이상의 겹치는 다각형의 개수 만 반환합니다.


@ Nxau : 좋아, 결과가 어떻게 생겼는지 설명하는 실수를 한 것 같아. 겹치는 다각형 중 새 다각형이있는 모양이어야합니다. 예를 들어 사진에서 원 4와 5가 겹칩니다. 새로운 모양에는 3 개의 다각형이 있어야합니다. (이 큰 모양에는 유니언이 작동하지 않습니다). 겹치는 영역은 필드에서 값 2를 가져야하고 나머지 원 4 및 5는이 필드에서 값 1을 가져야합니다. 결국 같은 장소에 몇 마리의 새가 있는지 볼 수있는 형태 파일이 있어야합니다. 스크립트 주셔서 감사합니다!
Nora

5

매우 간단한 방법은 다음과 같습니다.

  1. 연합 자체 Shape 파일;
  2. 멀티 파트 출력을 단일 파트로 변환 ;
  3. 사용 에 가입 공간적 중복을합니다 (ARE_IDENTICAL_TO 일치 옵션을 사용) 계산 도구;
  4. join_count필드를 사용하여 상징화하십시오 .

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


1

ArcGIS Desktop에서 다각형 겹침 계산 및 래스터 화 방법을 시도한 것 같습니다 .

16,400 개의 다각형은 그리 많지 않습니다. 그러나 잠재적 인 해결책 중 하나는 단순히 정기적 인 공간 결합을 수행하는 것입니다. 에서 ArcMap toolbox, > Analysis Tools -> Overlap -> Spatial Join.

targetjoin기능을 모두 동일한 데이터 세트로 설정하고 출력을 지정하십시오. 나머지 설정은 그대로 두십시오.

잠시 후 "join count"열이 포함 된 shapefile을 다시 가져와야합니다. 이것에서 1을 빼면 (분명히 각 지형지 물이 서로 교차해야 함) 각 다각형에 대한 "겹침"(실제로 교차)의 수 여야합니다.

방금 수행했습니다


예, 이미 링크에서 접근을 시도했습니다. 그러나이 shp에는 노조를 사용하는 것이 불가능합니다. 공간 조인 시도 중이 오류가 발생했습니다 : ERROR 000426 : 메모리 부족.
Nora

RAM이 4GB 인 컴퓨터에서 실행 중이며 약 5 배 많은 기능이 있었으므로 훨씬 적은 수로 작동하지 않는다는 것에 놀랐습니다. 데이터에 꼭지점이 너무 많을 수 있습니다 (광산은 약 60MB, .shp 파일의 크기는 얼마입니까?). 일반화 해보십시오.
GIS-Jonathan

shp 만 fgdb에 있으면 fgdb의 용량은 1,73GB입니다. 폴더의 모양은 2,00GB입니다.
Nora

이 데이터 세트도 사용했으며 다각형의 일부가 많기 때문에 많은 문제가 발생한다고 생각합니다. 해상도와 함께이 작업은 메모리를 많이 사용하는 작업입니다.
Cotton.Rockwood

@ Cotton.Rockwood : R에서 해결책을 찾으세요. "조인 카운트"값으로 래스터하고 래스터 계산 (ModelBuilder) 계산하기 위해 폴리곤보다 500 개 폴리곤 (33 개 선택)의 입력으로 도구 상자 'Count Overlapping Polygons'를 사용한다고 생각합니다. 오랜 시간이 걸립니다 ...
Nora

1

"Count Overlapping Polygons"도구를 다운로드하여 사용해 보았습니다. 작동 할 수도 있지만 시간이 너무 오래 걸립니다 (파일 크기 때문에 입력 FC에 5,000 레코드 미만).

해당 도구가 실행되기를 기다리는 동안 다른 ArcMap 창을 열었고 몇 가지 빠른 단계만으로 원하는 것을 얻었습니다. 1) 공간 조인-대상 및 조인 피처와 동일한 피처 클래스를 사용하고 "일대 다 조인"옵션을 선택합니다. 2) Dissolve-마지막 단계의 출력을 사용합니다. "TARGET_FID"를 디졸브 필드로 사용하고 통계의 경우 "Join_Count"필드를 합산하거나 "JOIN_FID"필드를 COUNT 할 수 있습니다. 3) 2 단계의 출력 파일에서 통계 필드 ( "SUM_Join_Count"또는 "COUNT_JOIN_FID")에서 필드 계산기 빼기 1을 사용하십시오. 각 기능은 자체적으로 교차하기 때문입니다.

"Count Overlapping Polygon"도구에이 방법을 사용하는 것이 좋습니다. 이 Join-> Dissolve 메서드를 시작하기 전에 ~ 5 분 정도 COP 도구를 실행하기 시작했으며 "Count Overlapping Polygon"도구가 완료되기 전에이를 쓸 수있는 충분한 시간이있었습니다.

도움이 되었기를 바랍니다!

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