Sử dụng ArcPy để phóng to tính năng được chọn?


19

Có cách nào để phóng to đến mức độ của một tính năng được chọn bằng mô-đun ArcPy trong ArcGIS Desktop 10.

Câu trả lời:



16

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

Hầu hết các chức năng kịch bản xử lý việc quản lý, hiển thị hoặc đầu ra tài liệu (mxd) sẽ sử dụng mô-đun ánh xạ ArcPy. help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#/ Kẻ
mindless.panda

3
+1 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 = yourscaleherelà tốt.
Nathanus

10

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

1

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.