4 votos

¿Crear un script de Python que exporte a varios archivos de salida utilizando ArcGIS Desktop?

Estoy tratando de construir un script de Python que recibirá una capa de características que será recortada por varios cuadrados de cuadrícula adyacentes (cada uno en un shapefile diferente) y la salida de varios shapefiles.

Ahora, he construido en el pasado un script de bucle que recibe una lista de archivos y hace una sola acción en cada archivo, así:

for file in os.listdir(ws):
    if file.endswith(".shp") or file.endswith(".dxf") or file.startswith("str"):
    print file

Pero no consigo hacer un bucle que reciba el shapefile de entrada y recorte características (shapefiles) y EXPORTE a diferentes shapefiles (me refiero a cómo cambiar el nombre del shapefile de salida para cada cuadrado de la cuadrícula). ¿Puede alguien mostrar cómo se hace?

Estoy usando python 2.6 y Arcgis 9.3.1

5voto

ESV Puntos 4591

Supongo que esto depende de la frecuencia con la que se quiera ejecutar el script, de si se quiere o no codificar las cuadrículas de los clips y de los shapefiles de salida.

Muy simple, tendría un diccionario, de clip_grid : output_shapefile, bucle a través de eso y escupir la salida.

import arcgisscripting
#Create the geoprocessor
gp = arcgisscripting.create(9.3)

input_shape = "yourshapefile.shp" #<-- this single file will be clipped repeatedly

#grids and corresponding outputs go here
clip_dictionary = {"clipgrid1.shp":"output1.shp", "clipgrid2.shp":"output2.shp"}

for iter in clip_dictionary:
    #Clip_analysis (in_features, clip_features, out_feature_class, cluster_tolerance)
    gp.Clip_analysis(input_shape, iter, clip_dictionary[iter])

Espero que eso ayude.

sys.argv es una posibilidad si desea leer los argumentos desde la línea de comandos (o si desea añadir el script a la caja de herramientas ). También puede utilizar getopt ou optparse también.

Supongamos que tenemos un script llamado clip_export.py, al que queremos pasar una lista de entradas. Podríamos ejecutar el script como

clip_export.py input_shape clipshape_1;clipshape_2;clipshape_3 output_folder

Tenga en cuenta que esto es similar a la entrada que se envía a un script de python por Toolbox.

En cualquier caso, puedes leer esto en tu guión así:

import sys

input_shape = sys.argv[1] #<-- Note that the 0th argument in sys.argv is the script name

clip_shape_list = sys.argv[2].split(';') #<-- splits the second argument on the semicolon into a python list

output_folder = sys.argv[3]

A partir de aquí ejecuta el resto de tu script. Como @Simon Norris muestra a continuación.

De nuevo, ¡espero que esto ayude!

2voto

Chris Tybur Puntos 1269

Puede crear el nombre del archivo de salida a partir del nombre del archivo de entrada utilizando la indexación y concatenación de cadenas, o el método de sustitución.

http://docs.python.org/library/stdtypes.html

clip_dictionary = {}
for file in os.listdir(r"c:/myclippingshapes"): 
    if file.endswith(".shp"):
        clip_dictionary[file] = file[:file.find(".shp")]+"_out.shp"
        clip_dictionary[file] = file.replace(".shp", "_out.shp")

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