Estou processando 18.000 classes de recursos (salvas em um arquivo GDB), cada uma com ~ 500 registros (recursos de polígonos) em áreas oceânicas e estou executando um script para remover a área sobreposta à costa, usando a função Apagar. O script está sendo executado com êxito, mas literalmente leva dias para ser concluído. Alguns arquivos levam alguns segundos para serem processados (suponho que isso se deva ao fato de que eu verifiquei que eles não se sobrepõem ao litoral) enquanto algumas classes de recursos demoram mais de uma hora para serem processadas.
Estou trabalhando localmente na minha máquina, executando o script em IDLE, com o ArcGIS 10.1 (todas as licenças) em um computador com Windows 7 de 32 bits, Intel DuoCore de 3,33 GHz e RAM de 4 GB.
Estou aprendendo as cordas com o Python e gostaria muito de receber dicas sobre o meu script, se houver etapas a serem seguidas para acelerar o tempo de processamento. Obrigado!
# 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()
fonte
Minimum Bounding Geometry
na classe de recurso de destino usando a Opção de GrupoALL
e o tipo de geometriaENVELOPE
. Faça uma exclusão na classe de recursos de envelope resultante usando seu litoral enorme. Use essa saída dessa exclusão para fazer umaClip
na sua classe de recurso de destino original. Isso simplifica a etapa complexa, a exclusão e a substitui por um clipe mais barato por um recurso menor.