¿Agregar shapefile o clase de entidad como capa en ArcGIS Desktop usando Python / ArcPy?

20

Estoy tratando de automatizar varias tareas en ArcGIS Desktop (usando ArcMap en general) con Python, y sigo necesitando una forma de agregar un archivo de forma al mapa actual. (Y luego hazle cosas, pero esa es otra historia).

Lo mejor que puedo hacer hasta ahora es agregar un archivo de capa al mapa actual, usando lo siguiente ("addLayer" es un objeto de archivo de capa):

def AddLayerFromLayerFile(addLayer):
 import arcpy
 mxd = arcpy.mapping.MapDocument("CURRENT")
 df = arcpy.mapping.ListDataFrames(mxd, "Layers")[0]
 arcpy.mapping.AddLayer(df, addLayer, "AUTO_ARRANGE")
 arcpy.RefreshActiveView()
 arcpy.RefreshTOC()
 del mxd, df, addLayer

Sin embargo, mis datos sin procesar siempre serán archivos de forma, por lo que necesito poder abrirlos. (Equivalente: convierta un archivo de forma en un archivo de capa sin abrirlo, pero preferiría no hacerlo).

Tom W
fuente

Respuestas:

30

Esto es lo que encontré funcionado:

import arcpy
from arcpy import env

# get the map document
mxd = arcpy.mapping.MapDocument("CURRENT")

# get the data frame
df = arcpy.mapping.ListDataFrames(mxd,"*")[0]

# create a new layer
newlayer = arcpy.mapping.Layer(path_to_shapefile_or_feature_class)

# add the layer to the map at the bottom of the TOC in data frame 0
arcpy.mapping.AddLayer(df, newlayer,"BOTTOM")

El marco de datos (variable df) en el que este código colocará la nueva capa es el primer marco de datos en el documento de mapa. También tenga en cuenta que este código agrega los datos como una nueva capa en la parte inferior de la tabla de contenido. También puede usar las otras opciones de disposición, que son "AUTO_ARRANGE" y "TOP".

Kenton W
fuente
2
Otra opción para especificar el marco de datos es utilizar el marco de datos activo: df = mxd.activeDataFrame en lugar de df = arcpy.mapping.ListDataFrames (mxd) [0] - además, no necesita el "*" en la llamada listdataframe .
jbalk
10

Crear capa de características (gestión de datos) http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//00170000006p000000.htm

Acabo de probarlo en la ventana de Python de ArcMap y se agrega directamente a mi mapa (no tuve que obtener mi marco de datos y llamar a AddLayer).

arcpy.MakeFeatureLayer_management('r:/temp/a.shp','test') texto alternativo

Jay Cummins
fuente
Eso funciona muy bien en la ventana inmediata ... pero cuando pruebo el mismo código en un archivo de script y lo ejecuto, ¡no pasa nada! (El código se ejecuta sin mensajes de error, pero no aparece nada en la tabla de contenido). Además, si elimino la capa de la tabla de contenido, intento volver a ejecutar el código en la ventana inmediata, aparece un error de tipo "el archivo ya existe". ¿Dónde se guarda el archivo de capa "prueba"?
Tom W
¿Instalaste SP1?
Jason Scheirer
1
@ Tom W: Soy prácticamente un novato con python y arcpy. Pero no creo que se cree físicamente un archivo de capa. Si quieres un archivo de capa, lo que tiene que hacer y pasar el nombre de la capa como un parámetro: arcpy.SaveToLayerFile_management('test', 'r:/temp/evilmonkey.lyr', 'ABSOLUTE') Si no desea guardar la capa y lo que desea es que se ha ido, arcpy.Delete_management('test').
Jay Cummins
@ Tom W: solo vuelve a leer tu comentario. ¿Está tratando de agregar una capa a ArcMap desde un shell de Python separado (no la ventana inmediata)? No pensé que pudieras hacer eso (pero no tengo autoridad en esto ... tal vez puedas).
Jay Cummins
1
@ Tom W: Sé acerca de ese error de capa, por eso me estaba asegurando de que SP1 estaba instalado. Para agregar la capa al TOC como lo está describiendo, necesita que su secuencia de comandos tenga una capa de entidad de salida derivada y establezca el valor en el nombre de la capa que creó. Las herramientas GP en ArcMap intentan proteger el TOC de las capas espurias (FC temporales, etc.) en las herramientas GP, por lo que debe definir en los parámetros de la herramienta de script que su nueva capa de entidades permanecerá en el TOC cuando termine. Es probable que el origen de datos de la FC donde reside la capa en el disco sea una Clase de entidad con el mismo nombre que la capa en su espacio de trabajo.
Jason Scheirer el