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/en/arcgisdesktop/10.0/help/index.html#/...
mindless.panda

3
+1 df.zoomToSelectedFeatures()私のやり方です。df.scale = yourscalehere同様にスケールを設定することもできます。
ナサヌス

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は、関数のすべての呼び出しにわたって一定のままであり、含めるレイヤーの1つに初期化する必要があります。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.