답변:
예라고 대답하겠습니다. 층 클래스 getSelectedExtent 수단을 갖고, Dataframe는 어느 정도의 특성을 갖는다. 그래도 시도하지 않았습니다.
작동하는 코드가 있습니다. 나는 그것을 발견 여기 ESRI의 웹 사이트. 모델에 스크립트로 추가 한 후 속성 별 선택 도구의 출력을 모델에 연결하십시오. 내가 원하는 것을 정확하게 수행합니다.
import arcpy
mxd = arcpy.mapping.MapDocument('CURRENT')
df = arcpy.mapping.ListDataFrames(mxd, "Layers") [0]
df.zoomToSelectedFeatures()
arcpy.RefreshActiveView()
df.zoomToSelectedFeatures()
내가하는 방법입니다. 스케일을 설정할 수도 df.scale = yourscalehere
있습니다.
이미 추측했듯이
df.zoomToSelectedFeatures()
데이터 프레임의 범위를 지도 프레임에서 선택한 모든 지형지 물로 변경합니다 . 특정 레이어에 대한 선택 세트로 확대 / 축소하려면을 사용하십시오 lyr.getSelectedExtent()
. 또한 코드가 다음과 같이 보이도록 맵 배율을 조정합니다.
df.extent = lyr.getSelectedExtent()
df.scale *= 1.5
arcpy.RefreshActiveView()
아니면 이거:
df.extent = lyr.getSelectedExtent()
df.scale = 12000 # 1:1,000
arcpy.RefreshActiveView()
따라서이 기능을 추가하려면 기능을 선택하지 않은 상태에서 여러 레이어에서 가장 광범위한 범위를 추적해야했습니다. 다음 코드는 각 방향에서 가장 먼 범위를 추적합니다. extent_object는 함수에 대한 모든 호출에서 일정하게 유지되며 포함하는 레이어 중 하나로 초기화되어야합니다. track_extent에 대한 "layer"인수는 arcpy.Mapping.Layer 객체입니다. 맵을 저장할 준비가되면 data_frame.extent = extent_object와 같은 것을 통해 데이터 프레임의 범위를 설정하십시오.
extent_object = initial_layer.getExtent()
def track_extent(extent_object,layer):
l_properties = layer.getExtent()
# each of these essentially says that if this layer is further out to one direction than the current setting, change the setting
if l_properties.XMin < extent_object.XMin:
extent_object.XMin = l_properties.XMin
if l_properties.YMin < extent_object.YMin:
extent_object.YMin = l_properties.YMin
if l_properties.XMax > extent_object.XMax:
extent_object.XMax = l_properties.XMax
if l_properties.YMax > extent_object.YMax:
extent_object.YMax = l_properties.YMax