답변:
모델은 크기와 복잡성에 따라 많은 하위 프로세스 출력 레이어를 가질 수 있습니다. 하드 디스크에 기록되는 파일을 제거하기 위해 일부 도구를 사용하면 기능 레이어 (예 : 기능 선택 반복 또는 속성 별 선택 )를 사용할 수 있습니다. 피처 레이어는 일시적이며 모델이 끝난 후에도 지속되지 않습니다.
피처 레이어 만들기를 참조하십시오
피처 클래스가 아닌 ModelBuilder에서 피처 레이어를 참조하려는 데는 몇 가지 이유가 있습니다. 먼저 차이점을 이해하는 것이 도움이됩니다.
이러한 배경을 고려할 때 "Make Feature Layer"도구를 원시 데이터 및 기타 지오 프로세싱 도구와의 사이에서 사용하려는 이유는 다음과 같습니다.
ArcCatalog에서 모델을 실행하거나 ArcGIS 외부에서 실행할 수있는 Python 스크립트로 모델을 내보내려면 원시 소스 데이터를 "레이어"로 변환하려면 "피처 레이어"를 사용해야합니다. 이것은 ArcMap 세션에 "데이터 추가"와 유사합니다.
레이어를 사용하면 ModelBuilder 프로세스에서 데이터를 쉽게 서브셋 할 수 있습니다. 속성이 "A"인 모든 데이터를 한 방법으로 처리하고 속성이 "B"인 모든 데이터를 다른 방법으로 처리하려고한다고 가정합니다. 원시 데이터를 한 번 참조한 다음 피처 레이어를 사용하여 데이터를 두 개의 "분기"로 분할하고 각 세트를 독립적으로 처리하지만 단일 소스 데이터 세트에 영향을 주거나 업데이트 할 수 있습니다.
임시 레이어를 모델에 통합하면 처리 시간이 줄어 듭니다. 처리 관점에서 볼 때 디스크에 쓰는 것보다 메모리에 쓰는 것이 훨씬 효율적입니다. 마찬가지로 임시 데이터를 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
작업 공간에 기록 된 데이터 는 여전히 데이터 (예 : 피처 클래스 및 테이블)는 여전히 많은 공간을 차지합니다. 반면 피처 레이어 는 데이터에 대한 뷰 이므로 데이터의 하위 세트를 얻기 위해 데이터를 복제하는 대신 데이터의 하위 세트를 선택하고 후속 프로세스에서 사용할 수 있습니다. 피처 레이어는 공간을 거의 차지하지 않습니다. 나는 그것들을 "메타 데이터를 가진 포인터"로 생각하고 싶다. 예를 들어 그들은 어떤 데이터를 가리키고 그것을 쿼리 / 렌더링하는 방법을 설명한다.
in-memory
작업 공간이 기본적으로 메모리에 저장된 파일 지오 데이터베이스라는 것을 읽었습니다 .