Câu trả lời:
Tôi đã có một đoạn mã hoạt động. Tôi tìm thấy nó ở đây trên trang web ESRI. Thêm nó dưới dạng tập lệnh vào mô hình, sau đó kết nối đầu ra của công cụ chọn theo thuộc tính với nó. Nó làm chính xác những gì tôi muốn.
import arcpy
mxd = arcpy.mapping.MapDocument('CURRENT')
df = arcpy.mapping.ListDataFrames(mxd, "Layers") [0]
df.zoomToSelectedFeatures()
arcpy.RefreshActiveView()
df.zoomToSelectedFeatures()
là cách tôi làm điều đó. Bạn có thể muốn thiết lập quy mô df.scale = yourscalehere
là tốt.
Như bạn đã phỏng đoán,
df.zoomToSelectedFeatures()
sẽ thay đổi phạm vi của khung dữ liệu thành tất cả các tính năng được chọn trong khung bản đồ. Nếu bạn quan tâm đến việc chỉ phóng to một bộ lựa chọn cho một lớp cụ thể thì hãy sử dụng lyr.getSelectedExtent()
. Tôi cũng điều chỉnh hệ số tỷ lệ bản đồ để mã của tôi trông như thế này:
df.extent = lyr.getSelectedExtent()
df.scale *= 1.5
arcpy.RefreshActiveView()
hoặc này:
df.extent = lyr.getSelectedExtent()
df.scale = 12000 # 1:1,000
arcpy.RefreshActiveView()
Vì vậy, để thêm vào điều này, tôi đã cần theo dõi phạm vi rộng nhất trên nhiều lớp mà không có tính năng nào được chọn. Các mã sau đây sẽ theo dõi phạm vi xa nhất theo từng hướng. scope_object không đổi trong tất cả các lệnh gọi đến hàm và nên được khởi tạo cho một trong các lớp bạn đang đưa vào. Đối số "lớp" đối với track_extent là một đối tượng arcpy.Micking.Layer. Khi bạn đã sẵn sàng để lưu bản đồ của mình, chỉ cần đặt phạm vi của khung dữ liệu của bạn thông qua một cái gì đó như 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