El objetivo de esta pregunta es encontrar una forma de cambiar programáticamente la extensión del mapa basándose en la entrada del usuario. ¡Mi método implica la creación de una capa de características y selección, pero si usted tiene otra solución (diferente) que da el resultado deseado, me encantaría oírlo!
Ahora que me siento cómodo con arcpy y me he familiarizado con el módulo de mapeo he visto un nicho. Puedo escribir aplicaciones de mapeo de escritorio de principio a fin para realizar una tarea específica. Esto permite a cualquier persona en nuestra oficina para ejecutar la "aplicación" sin necesidad de varios años de uso de ArcMap para llevar a cabo una tarea repetible para un área diferente de interés (es decir, código postal, impuestos parcela, condado, etc.)
He escrito algunos de estos scripts y asociado cada uno de ellos con su propio MXD para dar al usuario una GUI. Cuando se introduce algún tipo de valor de atributo (número de cuenca hidrográfica, número de parcela, condado, etc.) el script crea una capa de características de ese polígono y utiliza la función zoom al elemento seleccionado para cambiar la extensión.
El problema que estoy teniendo una vez que he terminado de depurar la 'app' a través de la Ventana Python de ArcMap creo un herramienta de script que ofrece al usuario un cuadro de entrada para introducir los argumentos necesarios para que se ejecute el programa.
Por alguna razón, ArcMap utiliza por defecto NO añadiendo la capa de características al mapa cuando llega a la línea de código donde se crea. Por lo tanto, mi script no puede utilizar el método de zoom a la característica seleccionada para cambiar la extensión. El resto de la secuencia de comandos se ejecuta sin problemas, pero la extensión del zoom sigue siendo a nivel estatal en lugar de a nivel de subcuenca.
Extracto del código:
try: # Clip wetlands layer to extent of user dictated parcel, calculate staticstics
newWetland = outWetlands + "HUC_" + userHucID # variable that stores clipped wetland output location & name
arcpy.MakeFeatureLayer_management(sheds, "currentShed", clipClause) # Create feature layer of HUC (from user input)
arcpy.SelectLayerByAttribute_management("currentShed", "NEW_SELECTION", clipClause) # Select current HUC
df.zoomToSelectedFeatures() # Zoom to extent of selected HUC
arcpy.RefreshActiveView() # Refresh view of mxd before exporting to PNG
arcpy.Clip_analysis(wetlands, "currentShed", newWetland) # Clip dissolved wetlands layer to current HUC
arcpy.ApplySymbologyFromLayer_management(newWetland, layers + "WetlandSymbology.lyr") # Apply wetlands symbology
print "Finished creating wetland file for HUC #: " + userHucID + "."
except:
print arcpy.GetMessages()
finally: # delete the feature layer if it exists if an error is present or not
if arcpy.Exists("currentShed"):
arcpy.Delete_management("currentShed")
Script ejecutado en la ventana Python de ArcMap: El MISMO script se ejecuta como Script-tool en la caja de herramientas personalizada: Ventana Propiedades de la herramienta Script: Esto me lo sugirió un representante de ESRI: añadir una capa de características como parámetro de salida derivado y, a continuación, utilizar SetParameter(index, featureLayer) para añadir la capa deseada a la pantalla.
El parámetro es derivado (no es dado por el usuario, sino que es derivado por una de las entradas del usuario), y puesto a la salida en un intento de añadirlo al mapa.
Arreglos intentados:
- Barra de herramientas de ArcMap -> Geoprocesamiento -> Opciones de geoprocesamiento -> 'Añadir resultados de operaciones de geoprocesamiento a la pantalla'
- Añadir Feature Layer parámetro de salida en las propiedades de la herramienta de script emparejado con arcpy.SetParameterAsText método
arcpy.mapping.AddLayer(df, layerPath)
df.extent = layer.getExtent()