ModelBuilder에서 피처 레이어를 사용해야하는 이유는 무엇입니까?


9

ModelBuilder를 사용하여 지오 프로세스 작성을 이해하려고 노력하고 있지만 ModelBuilder로 지오 프로세스를 작성할 때 기능 클래스 대신에 피쳐 계층을 사용하는 것이 왜 중요한지 모르겠습니다. 누군가 이유를 설명해 주시겠습니까?


답변:


4

모델은 크기와 복잡성에 따라 많은 하위 프로세스 출력 레이어를 가질 수 있습니다. 하드 디스크에 기록되는 파일을 제거하기 위해 일부 도구를 사용하면 기능 레이어 (예 : 기능 선택 반복 또는 속성 별 선택 )를 사용할 수 있습니다. 피처 레이어는 일시적이며 모델이 끝난 후에도 지속되지 않습니다.

피처 레이어 만들기를 참조하십시오


9

피처 클래스가 아닌 ModelBuilder에서 피처 레이어를 참조하려는 데는 몇 가지 이유가 있습니다. 먼저 차이점을 이해하는 것이 도움이됩니다.

  • "기능 클래스"는 단순히 원시 데이터를 전체적으로 참조합니다. FC가 디스크상의 shapefile 인 간단한 예입니다.
  • "피처 레이어"는 데이터 추상화에 대한 참조로, 전체 데이터 세트와 달리 원시 데이터 세트의 하나 이상의 기능과 상호 작용할 수 있습니다. 레이어는 데이터를 ArcMap에로드 한 후에 효과적으로 상호 작용하는 것입니다.

이러한 배경을 고려할 때 "Make Feature Layer"도구를 원시 데이터 및 기타 지오 프로세싱 도구와의 사이에서 사용하려는 이유는 다음과 같습니다.

  1. ModelBuilder의 많은 GP 도구는 레이어를 사용해야하며 FC를 입력으로 허용하지 않습니다. GP 도구가 데이터를 선택해야하는 경우 특히 그렇습니다. 이 시나리오에서는 원시 데이터가 아닌 LAYER와 상호 작용해야합니다. 예 : ArcMap (또는 다른 GIS 프로그램)을 열지 않은 경우 원시 모양 파일에서 피처를 어떻게 선택할 수 있습니까? 이를 선택하려면 ArcMap에서 레이어와 상호 작용해야합니다.
  2. ArcCatalog에서 모델을 실행하거나 ArcGIS 외부에서 실행할 수있는 Python 스크립트로 모델을 내보내려면 원시 소스 데이터를 "레이어"로 변환하려면 "피처 레이어"를 사용해야합니다. 이것은 ArcMap 세션에 "데이터 추가"와 유사합니다.

  3. 레이어를 사용하면 ModelBuilder 프로세스에서 데이터를 쉽게 서브셋 할 수 있습니다. 속성이 "A"인 모든 데이터를 한 방법으로 처리하고 속성이 "B"인 모든 데이터를 다른 방법으로 처리하려고한다고 가정합니다. 원시 데이터를 한 번 참조한 다음 피처 레이어를 사용하여 데이터를 두 개의 "분기"로 분할하고 각 세트를 독립적으로 처리하지만 단일 소스 데이터 세트에 영향을 주거나 업데이트 할 수 있습니다.

  4. 실제로 임시 데이터 처리 "바인"인 "in_memory"기능 레이어를 만들 수 있으며 모든 작업 후 디스크에 쓰는 것보다 훨씬 빠르게 데이터를 처리 할 수 ​​있습니다. 또한 처리가 완료된 후 정리해야하는 정크의 양을 제한합니다.

라이언 감사합니다. 당신의 대답은 매우 완전하고 명확합니다.
Diego Pardo

7

임시 레이어를 모델에 통합하면 처리 시간이 줄어 듭니다. 처리 관점에서 볼 때 디스크에 쓰는 것보다 메모리에 쓰는 것이 훨씬 효율적입니다. 마찬가지로 임시 데이터를 in_memory workspace에 쓸 수 있으며 계산 효율성도 향상됩니다.

ArcGIS의 많은 작업에는 입력으로 임시 레이어가 필요합니다 . 예를 들어, 위치 별 레이어 선택 (데이터 관리) 은 다른 선택 기능과 공간 관계를 공유하는 레이어의 기능을 선택할 수있는 매우 강력하고 편리한 도구입니다. "HAVE_THEIR_CENTER_IN"또는 "BOUNDARY_TOUCHES"등과 같은 복잡한 관계를 지정할 수 있습니다.

편집하다:

호기심을 피하고 기능 레이어와 in_memory 작업 공간을 사용하여 차이점을 처리하는 방법을 자세히 설명하려면 39,000 포인트가 100m 버퍼링되는 다음 속도 테스트를 고려하십시오.

import arcpy, time
from arcpy import env

# Set overwrite
arcpy.env.overwriteOutput = 1

# Parameters
input_features = r'C:\temp\39000points.shp'
output_features = r'C:\temp\temp.shp'

###########################
# Method 1 Buffer a feature class and write to disk
StartTime = time.clock()
arcpy.Buffer_analysis(input_features,output_features, "100 Feet")
EndTime = time.clock()
print "Method 1 finished in %s seconds" % (EndTime - StartTime)
time.sleep(5)

############################
# Method 2 Buffer a feature class and write in_memory
StartTime = time.clock()
arcpy.Buffer_analysis(input_features, "in_memory/temp", "100 Feet")
EndTime = time.clock()
print "Method 2 finished in %s seconds" % (EndTime - StartTime)
time.sleep(5)

############################
# Method 3 Make a feature layer, buffer then write to in_memory
StartTime = time.clock()
arcpy.MakeFeatureLayer_management(input_features, "out_layer")
arcpy.Buffer_analysis("out_layer", "in_memory/temp", "100 Feet")
EndTime = time.clock()
print "Method 3 finished in %s seconds" % (EndTime - StartTime)
time.sleep(5)

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


우리는 방법 2와 3이 방법 1보다 약 3 배 빠르다는 것을 알 수 있습니다. 이는 더 큰 워크 플로우에서 피처 레이어를 중간 단계로 사용하는 힘을 보여줍니다.


이것은 두 가지 (메모리 내 데이터 및 기능 계층)를 혼란스럽게하는 것으로 보입니다. 그들은 동일하지 않습니다. in_memory작업 공간에 기록 된 데이터 는 여전히 데이터 (예 : 피처 클래스 및 테이블)는 여전히 많은 공간을 차지합니다. 반면 피처 레이어 는 데이터에 대한 이므로 데이터의 하위 세트를 얻기 위해 데이터를 복제하는 대신 데이터의 하위 세트를 선택하고 후속 프로세스에서 사용할 수 있습니다. 피처 레이어는 공간을 거의 차지하지 않습니다. 나는 그것들을 "메타 데이터를 가진 포인터"로 생각하고 싶다. 예를 들어 그들은 어떤 데이터를 가리키고 그것을 쿼리 / 렌더링하는 방법을 설명한다.
blah238

이전 의견에 추가하기 위해이 사이트의 어딘가에서 in-memory작업 공간이 기본적으로 메모리에 저장된 파일 지오 데이터베이스라는 것을 읽었습니다 .
blah238

파일 지오 데이터베이스와 비슷하지만 in_memory 일 때 모양 영역이 계산되지 않습니다. 나중에이 링크를 제공합니다.
PolyGeo

업데이트 된 두 번째 예에서는 피처 레이어가 아닌 피처 클래스 인 메모리를 작성하고 있습니다.
blah238

2
그것은오고 있었지만 여기에 6 개월 이상 약속 한 링크 가 있습니다.
PolyGeo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.