มีวิธีการซูมตามขอบเขตของคุณสมบัติที่เลือกโดยใช้โมดูล ArcPy ใน ArcGIS Desktop 10 หรือไม่
มีวิธีการซูมตามขอบเขตของคุณสมบัติที่เลือกโดยใช้โมดูล ArcPy ใน ArcGIS Desktop 10 หรือไม่
คำตอบ:
ฉันมีรหัสที่ใช้งานได้ ฉันพบได้ที่นี่ในเว็บไซต์ 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()
ดังนั้นเพื่อเพิ่มสิ่งนี้ฉันต้องการติดตามขอบเขตที่กว้างที่สุดในหลายเลเยอร์โดยไม่ได้เลือกคุณสมบัติ รหัสต่อไปนี้จะติดตามขอบเขตที่ไกลที่สุดในแต่ละทิศทาง 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