Tengo un código Python que está diseñado para tomar archivos de forma de puntos a través del siguiente flujo de trabajo:
- Fusionar puntos
- Integre puntos, de modo que cualquier punto dentro de 1 m entre sí se convierta en un punto
- Crear capa de entidades, donde se seleccionan puntos con z <10
- Puntos de amortiguamiento
- Resolución de polígono a ráster de 1 m
- Reclasifique, donde 1 - 9 = 1; NoData = 0
Cada archivo de forma tiene aproximadamente 250,000 a 350,000 puntos que cubren ~ 5x7 km. Los datos de puntos utilizados como entradas representan ubicaciones de árboles. Cada punto (es decir, un árbol) tiene un valor "z" asociado que representa el radio de la corona y se utiliza en el proceso de almacenamiento intermedio. Mi intención es utilizar la salida binaria final en un proceso separado para producir un ráster que describa la cubierta del dosel.
Ejecuté una prueba con cuatro archivos de forma y produjo un ráster de 700 MB y tardó 35 minutos (procesador i5 y 8 GB de RAM). Al ver que necesitaré ejecutar este proceso en 3500 shapefiles, agradecería cualquier consejo para simplificar el proceso (ver código adjunto). En términos generales, ¿cuál es la mejor manera de lidiar con el geoprocesamiento de big data? Más específicamente, ¿hay algún ajuste en el código o flujo de trabajo que pueda ayudar a aumentar la eficiencia?
Editar :
Tiempo (% del total) para tareas de geoprocesamiento:
- Fusionar = 7.6%
- Integrar = 7.1%
- Característica para Lyr = 0
- Tampón = 8.8%
- Poliéster a ráster = 74.8%
- Reclasificar = 1.6%
# Import arcpy module
import arcpy
# Check out any necessary licenses
arcpy.CheckOutExtension("spatial")
# Script arguments
temp4 = arcpy.GetParameterAsText(0)
if temp4 == '#' or not temp4:
temp4 = "C:\\gdrive\\temp\\temp4" # provide a default value if unspecified
Reclassification = arcpy.GetParameterAsText(1)
if Reclassification == '#' or not Reclassification:
Reclassification = "1 9 1;NODATA 0" # provide a default value if unspecified
Multiple_Value = arcpy.GetParameterAsText(2)
if Multiple_Value == '#' or not Multiple_Value:
Multiple_Value = "C:\\t1.shp;C:\\t2.shp;C:\\t3.shp;C:\\t4.shp" # provide a default value if unspecified
# Local variables:
temp_shp = Multiple_Value
Output_Features = temp_shp
temp2_Layer = Output_Features
temp_Buffer = temp2_Layer
temp3 = temp_Buffer
# Process: Merge
arcpy.Merge_management(Multiple_Value, temp_shp, "x \"x\" true true false 19 Double 0 0 ,First,#,C:\\#########omitted to save space
# Process: Integrate
arcpy.Integrate_management("C:\\gdrive\\temp\\temp.shp #", "1 Meters")
# Process: Make Feature Layer
arcpy.MakeFeatureLayer_management(temp_shp, temp2_Layer, "z <10", "", "x x VISIBLE NONE;y y VISIBLE NONE;z z VISIBLE NONE;Buffer Buffer VISIBLE NONE")
# Process: Buffer
arcpy.Buffer_analysis(temp2_Layer, temp_Buffer, "z", "FULL", "ROUND", "NONE", "")
# Process: Polygon to Raster
arcpy.PolygonToRaster_conversion(temp_Buffer, "BUFF_DIST", temp3, "CELL_CENTER", "NONE", "1")
# Process: Reclassify
arcpy.gp.Reclassify_sa(temp3, "Value", Reclassification, temp4, "DATA")