Używasz ArcPy, aby powiększyć wybraną funkcję?

19

Czy istnieje sposób powiększenia zakresu wybranej funkcji za pomocą modułu ArcPy w ArcGIS Desktop 10.

Zachary
źródło

Odpowiedzi:

6

Powiedziałbym tak. Klasy warstwy posiada metodę getSelectedExtent i Dataframe ma właściwość stopniu. Jednak nie próbowałem tego.

Kirk Kuykendall
źródło
16

Mam kawałek kodu, który działa. Znalazłem to tutaj na stronie internetowej ESRI. Dodaj go jako skrypt do modelu, a następnie podłącz do niego dane wyjściowe narzędzia select by attribute. Robi dokładnie to, czego chcę.

import arcpy
mxd = arcpy.mapping.MapDocument('CURRENT')
df = arcpy.mapping.ListDataFrames(mxd, "Layers") [0]
df.zoomToSelectedFeatures()
arcpy.RefreshActiveView()
Zachary
źródło
Większość funkcji skryptowych, które obsługują zarządzanie dokumentami (mxd), wyświetlanie lub wyjście, korzysta z modułu mapowania ArcPy. help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#/…
mindless.panda
3
+1 df.zoomToSelectedFeatures()Jak to robię. Możesz także ustawić skalę df.scale = yourscalehere.
Nathanus
10

Jak już przypuszczałeś,

df.zoomToSelectedFeatures()

zmieni zakres ramki danych na wszystkie wybrane elementy w ramce mapy. Jeśli chcesz tylko powiększyć zestaw zaznaczeń dla określonej warstwy, użyj lyr.getSelectedExtent(). Dostosowuję również współczynnik skali mapy, aby mój kod wyglądał tak:

df.extent = lyr.getSelectedExtent()
df.scale *= 1.5
arcpy.RefreshActiveView()

albo to:

df.extent = lyr.getSelectedExtent()
df.scale = 12000 # 1:1,000
arcpy.RefreshActiveView()
Erik Anderson
źródło
1

Aby dodać do tego, musiałem śledzić najszerszy zakres na wielu warstwach bez wybranych funkcji. Poniższy kod będzie śledził najdalej w każdym kierunku. scope_object pozostaje stały dla wszystkich wywołań funkcji i powinien zostać zainicjowany na jednej z dołączanych warstw. Argument „warstwa” do track_extent jest obiektem arcpy.Mapping.Layer. Gdy będziesz gotowy do zapisania mapy, po prostu ustaw zasięg ramki danych za pomocą czegoś takiego jak 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
Nicksan
źródło