ใช้ ArcPy เพื่อซูมไปยังคุณสมบัติที่เลือกหรือไม่


19

มีวิธีการซูมตามขอบเขตของคุณสมบัติที่เลือกโดยใช้โมดูล ArcPy ใน ArcGIS Desktop 10 หรือไม่

คำตอบ:



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/th/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

ดังนั้นเพื่อเพิ่มสิ่งนี้ฉันต้องการติดตามขอบเขตที่กว้างที่สุดในหลายเลเยอร์โดยไม่ได้เลือกคุณสมบัติ รหัสต่อไปนี้จะติดตามขอบเขตที่ไกลที่สุดในแต่ละทิศทาง scope_object คงที่ตลอดการเรียกใช้ฟังก์ชันและควรกำหนดค่าเริ่มต้นให้กับหนึ่งในเลเยอร์ที่คุณรวมไว้ อาร์กิวเมนต์ "เลเยอร์" ถึง track_extent เป็นวัตถุ arcpy.Mapping.Layer เมื่อคุณพร้อมที่จะบันทึกแผนที่ของคุณเพียงกำหนดขอบเขตดาต้าเฟรมของคุณผ่านทาง data_frame.extent = scope_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.