6 votos

Utilizando recién creado características en la siguiente parte de un script en python

Buenas Tardes

Estoy tratando de escribir una secuencia de comandos de python que los búferes de un gran número de características de una geodatabase (pero no todos) y, a continuación, se disuelve la recién creada búfer de shapefiles juntos. Actualmente sólo he sido capaz de lograr esto haciendo una lista de las ubicaciones específicas de la recién creada búfer de shapefiles (que está bien para un par de características, pero una pesadilla con más). Soy nuevo en python y no está seguro de cómo referencias demasiado (o ideal sería hacer una lista) de la nueva producción de búfer de shapefiles sin individualmente listado de no lugares. Esta es también la más complicada por la producción de 3 de diferente tamaño de los búferes para cada clase de entidad. Aquí está el primer bit de mi script antes de llevar a cabo la disolución. Muchas gracias de antemano por cualquier punteros.

# imports arcpy and os
import arcpy, os
from arcpy import env

# sets the workspace to my gdb
arcpy.env.workspace = "C:/GIS Home/Mining Features (MATTHEW).gdb"

# Output workspace location is defined
output_workspace = "C:/GIS Home/project_1"

# list of features to buffer in gdb
fcList = ["Shaft_Metalliferous", "Quarry_Metalliferous"]

for featureClass in fcList:

arcpy.Buffer_analysis(featureClass, output_workspace + "/" + featureClass[:-4] + "_b250.shp", 250, "", "", "ALL")
arcpy.Buffer_analysis(featureClass, output_workspace + "/" + featureClass[:-4] + "_b500.shp", 500, "", "", "ALL")
arcpy.Buffer_analysis(featureClass, output_workspace + "/" + featureClass[:-4] + "_b750.shp", 750, "", "", "ALL")

5voto

Roy Puntos 2884

Necesita crear una lista vacía, luego añadir las características de la nueva lista vacía. En lugar de crear la ubicación de salida dentro del método, puede crearla de antemano y almacenarla como una variable. A continuación, puede utilizar esa misma variable para añadir a la lista.

 output_workspace = "C:/GIS Home/project_1"

dissolveList = [] #empty list
fcList = ["Shaft_Metalliferous", "Quarry_Metalliferous"]
buffer = [250, 500, 750]

for featureClass in fcList:'
    for buff in buffer:
        output = output_workspace + "/" + featureClass + "_b" + str(buff)

        arcpy.Buffer_analysis(featureClass, output, buff, "", "", "ALL")
        dissolveList.append(output) #append a variable (string) to the list
 

4voto

ESV Puntos 4591

En primer lugar, bienvenido al sitio de @MattWalsh!

Tienes la idea correcta con la iteración de un bucle y la creación de una lista de los buffers de salida para combinar y disolver juntos. Voy a suponer que usted desea una salida separada para cada nivel de búfer, pero esperemos que este sea fácil de cambiar más adelante si lo desea.

También estoy asumiendo los buffers son sólo temporales, así que no importa donde terminan, pero de nuevo, esperemos que este sea fácil de cambiar. Vamos a utilizar tempfile para manejar esto.

# imports arcpy and os.path (we're not using os)
import arcpy
import os.path
from arcpy import env
import tempfile

# sets the workspace to my gdb
arcpy.env.workspace = "C:/GIS Home/Mining Features (MATTHEW).gdb"

# Output workspace location is defined
output_workspace = "C:/GIS Home/project_1"
temp_workspace = tempfile.mkdtemp() #Make a temporary directory inside the system
                                    #temporary directory (so probably C:\Temp)


# list of features to buffer in gdb
fcList = ["Shaft_Metalliferous", "Quarry_Metalliferous"]

#create some empty lists for output
#note I'm only going to show for 250m, but you can do the same for 500 and 750
l_250 = []

for featureClass in fcList:
    #make some temporary output files
    b250 = os.path.join(temp_workspace, featureClass + "_b250.shp") #you don't need to use
                                                                    #[:-4] to get rid of
                                                                    #the last 4 characters,
                                                                    #as gdb files don't
                                                                    #have extensions

    arcpy.Buffer_analysis(featureClass, b250, 250, "", "", "ALL")

    #append the name of the output files to the lists
    l_250.append(b250)

#Merge features before dissolve
merge_250 = os.path.join(temp_workspace, "250_merge.shp")
arcpy.Merge_management(l_250, merge_250)

#Finally dissolve for output
dissolve_250 = os.path.join(output_workspace, "250_dissolve.shp")
arcpy.Dissolve_management(merge_250, dissolve_250)

Como último consejo, si eres nuevo en Python recomiendo echar un vistazo al Tutorial de Python y conseguir un buen IDE con el Código Completo. Además, ArcGIS arcpy documentación es bastante bueno también.

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