8 votos

Reducir el tiempo de procesamiento en función de Borrado mediante Arcpy en IDLE

Yo soy de procesamiento de 18.000 clases de entidad (que se guarda en un archivo GDB), cada una con ~500 registros (polígono características) en áreas del océano, y estoy ejecutando una secuencia de comandos para quitar el área de superposición con la costa, utilizando la función de Borrado. La secuencia de comandos se ejecuta con éxito, pero, literalmente, tomar días para completar. Algunos archivos de tomar segundos para procesar (estoy suponiendo que esto es debido al hecho de, que he comprobado, que no se superponen con los de la costa), mientras que algunas cuentan con clases de tomar más de una hora para el proceso.

Estoy trabajando localmente en mi máquina, se ejecuta la secuencia de comandos en modo INACTIVO, con ArcGIS 10.1 (todas las licencias) en una de 32 bits de Windows 7, 3.33 GHz Intel DuoCore, 4GB de RAM de la computadora.

Estoy aprendiendo las cuerdas con Python y realmente apreciaría consejos sobre mi script si hay pasos que puede tomar para acelerar el tiempo de procesamiento. Gracias!

# Import modules
import arcpy
import sys
import os
from arcpy import env

arcpy.env.overwriteOutput = True
print arcpy.env.overwriteOutput

#Erase coastline from selected buffers.
workspace = "C:\\DIR\\points_buff\\"
arcpy.env.workspace = workspace
erase_output = workspace+"erased.gdb\\"
erasedirectorypath = "C:\\DIR\\points_buff\\selectedbuff.gdb"
fileList = []

for dirpath, dirnames, erases in arcpy.da.Walk(erasedirectorypath,
                                              datatype="FeatureClass",
                                              type="Polygon"):
    for erase in erases:
        fileList.append(os.path.join(dirpath, erase))
        filenameparts = erase.split('_')
        if int(filenameparts[1]) > int(1967):

            try:
        #Set variables for Erase tool
                in_features = erasedirectorypath+"\\"+erase
                coastline_feat = "C:\\DIR\\Basic_NE.gdb\\Coastline_Eastern_US"
                out_erase_feat = erase_output+erase[:-4]+"_er"
                arcpy.Erase_analysis(in_features, coastline_feat, out_erase_feat, '')
                print arcpy.GetMessages()
                print "Coastline has been erased from " + erase + " and saved to " + erase_output

            except:
                print arcpy.GetMessages()

7voto

Aaron Puntos 25882

Aunque es difícil solucionar los problemas de su secuencia de comandos sin ver los datos espaciales, un par de trucos e ideas puede ayudar a su flujo de trabajo. Para empezar, subconjunto del conjunto de datos y experimentar con diferentes enfoques. Incorporar un reloj de tiempo en la secuencia de comandos para obtener un verdadero sentido de la rapidez o la lentitud de las operaciones. Tratar de envolver a sus órdenes con un time.clock. Por ejemplo:

import time
StartTime = time.clock()
arcpy.Erase_analysis(in_features, coastline_feat, out_erase_feat, '')
EndTime = time.clock()
print "Erase finished in %s hours" % ((EndTime - StartTime)/3600)
time.sleep(2.5)
  • Pruebe utilizando el poder de in_memory área de trabajo. En general, las operaciones realizadas in_memory son más rápidos que los que se escriben en el disco. Uso in_memory para los intermedios de las operaciones.

  • En lugar de utilizar el comando Borrar, utilice el siguiente conjunto de comandos para realizar un trabajo similar:

Hacer De La Capa De Entidad (Gestión De Datos)

Seleccionar Capa por Ubicación (Gestión de Datos)

Eliminar Funciones (Gestión De Datos)

Funciones De Copia (Gestión De Datos)

  • Son sus polígonos demasiado complicado? Disolver (Datos De gestión) puede ayudar.
  • Considere la posibilidad de una trama basada en el enfoque, tal vez usando una máscara (si es factible).

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