Al crear una capa en arcpy, la sintaxis utiliza una cadena para denotar el nombre de la capa, como se muestra en el Hacer capa de características muestra script:
import arcpy
arcpy.env.workspace = "C:\Program Files (x86)\ArcGIS\Desktop10.2\TemplateData\TemplateData.gdb"
arcpy.MakeFeatureLayer_management("city", "citiesLyr")
print(type("citiesLyr")) # => string
En lo que respecta a Python, "citiesLyr" es sólo una cadena (¿verdad?). ¿Puedo, en cambio, definir la capa de características como una variable?
Esto es un intento de simplificar un escenario más complicado. Estoy tratando de utilizar la capa de características en un script que implica multiprocesamiento, bucles y funciones, y me encuentro con que la referencia a la capa se está perdiendo, y todo lo que me queda es una cadena llamada "citiesLyr". ¿Cómo puedo mantener la referencia a la capa de características a lo largo de mi script?
El ejemplo de abajo no hace nada - el punto es probar cómo obtener acceso a la capa de características desde dentro de la función, que ha sido llamada dentro del entorno de multiprocesamiento:
import multiprocessing, arcpy
def doCity(lyr):
#How to get access to the cities layer from this function?
print(lyr)
desc = arcpy.Describe(lyr) # <= this fails because the layer is just a string
print(desc.SpatialReference)
if __name__ == '__main__':
#Create a feature layer from the cities
arcpy.MakeFeatureLayer_management("C:\Program Files (x86)\ArcGIS\Desktop10.2\TemplateData\TemplateData.gdb\city", "citiesLyr")
#Create a list, so we can use the multiprocessing function
citiesList = []
for i in range(0,5):
citiesList.append("citiesLyr")
# Create a pool class and run the jobs
pool = multiprocessing.Pool()
pool.map(doCity, citiesList)
# Synchronize the main process with the job processes to ensure proper cleanup.
pool.close()
pool.join()
(La lista de ciudades tampoco tiene sentido, sólo está ahí para utilizar el multiprocesamiento)