ArcPy를 사용하여 선택한 기능을 확대 하시겠습니까?


19

ArcGIS Desktop 10에서 ArcPy 모듈을 사용하여 선택한 기능의 범위까지 확대 / 축소하는 방법이 있습니까?

답변:



16

작동하는 코드가 있습니다. 나는 그것을 발견 여기 ESRI의 웹 사이트. 모델에 스크립트로 추가 한 후 속성 별 선택 도구의 출력을 모델에 연결하십시오. 내가 원하는 것을 정확하게 수행합니다.

import arcpy
mxd = arcpy.mapping.MapDocument('CURRENT')
df = arcpy.mapping.ListDataFrames(mxd, "Layers") [0]
df.zoomToSelectedFeatures()
arcpy.RefreshActiveView()

문서 (mxd) 관리, 표시 또는 출력을 처리하는 대부분의 스크립팅 기능은 ArcPy 매핑 모듈을 사용합니다. help.arcgis.com/ko/arcgisdesktop/10.0/help/index.html#/…
mindless.panda

3
+1 df.zoomToSelectedFeatures()내가하는 방법입니다. 스케일을 설정할 수도 df.scale = yourscalehere있습니다.
Nathanus

10

이미 추측했듯이

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()

1

따라서이 기능을 추가하려면 기능을 선택하지 않은 상태에서 여러 레이어에서 가장 광범위한 범위를 추적해야했습니다. 다음 코드는 각 방향에서 가장 먼 범위를 추적합니다. 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.