5 votos

Utilización de varios entornos de espacio de trabajo ArcGIS Python

¿Cómo combino los tres espacios de trabajo?

Sólo se lee 1 espacio de trabajo al exportar datos.

import os
import arcpy

# Set environment settings
arcpy.env.workspace = "C:/eis/eis shape/UPDM.gdb/P_PipeSystem"
arcpy.env.workspace = "C:/eis/eis shape/UPDM.gdb/OtherCompanies"
arcpy.env.workspace = "C:/eis/eis shape/UPDM.gdb/NEO"

arcpy.env.overwriteOutput = True

# Set local variables
outWorkspace = "C:/data"

try:
    # Use ListFeatureClasses to generate a list of inputs
    for infc in arcpy.ListFeatureClasses():

    # Determine if the input has a defined coordinate system, can't project              it if it does not
    dsc = arcpy.Describe(infc)

    if dsc.spatialReference.Name == "Unknown":
        print ('skipped this fc due to undefined coordinate system: ' + infc)
    else:
        # Determine the new output feature class path and name
        outfc = os.path.join(outWorkspace, infc)

        # Set output coordinate system
        outCS = arcpy.SpatialReference('WGS 1984')

        # run project tool
        arcpy.Project_management(infc, outfc, outCS)

        # check messages
        print(arcpy.GetMessages())

except arcpy.ExecuteError:
print(arcpy.GetMessages(2))

except Exception as ex:
print(ex.args[0])

2 votos

No puedes, arcpy sólo puede tener un espacio de trabajo actual, convierta su código en una función que tome un espacio de trabajo y luego la llame tres veces, una por cada espacio de trabajo de entrada.

0 votos

@Hornbydd Cuando se diseña software, generalmente es una mala idea que una función modifique el estado global.

9voto

Steven John Puntos 33

Sólo puede tener un espacio de trabajo "actual" o "activo". La función ListFeatureClasses() es similar al comando 'dir' en la línea de comandos de Windows - sólo puede listar un directorio 'actual' a la vez y si necesita más, necesita cambiar.

Utilice el ciclo for para iterar sobre los espacios de trabajo:

import os
import arcpy

# Set environment settings
workspaces = [
    "C:/eis/eis shape/UPDM.gdb/P_PipeSystem",
    "C:/eis/eis shape/UPDM.gdb/OtherCompanies",
    "C:/eis/eis shape/UPDM.gdb/NEO"
]

arcpy.env.overwriteOutput = True

# Set local variables
outWorkspace = "C:/data"

try:
    for ws in workspaces:
        arcpy.env.workspace = ws
        # Use ListFeatureClasses to generate a list of inputs
        for infc in arcpy.ListFeatureClasses():

            # Determine if the input has a defined coordinate system, can't project              it if it does not
            dsc = arcpy.Describe(infc)

            if dsc.spatialReference.Name == "Unknown":
                print ('skipped this fc due to undefined coordinate system: ' + infc)
            else:
                # Determine the new output feature class path and name
                outfc = os.path.join(outWorkspace, infc)

                # Set output coordinate system
                outCS = arcpy.SpatialReference('WGS 1984')

                # run project tool
                arcpy.Project_management(infc, outfc, outCS)

                # check messages
                print(arcpy.GetMessages())

except arcpy.ExecuteError:
print(arcpy.GetMessages(2))

except Exception as ex:
print(ex.args[0])

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X