Tengo un código de Python que está diseñado para tomar shapefiles de puntos a través del siguiente flujo de trabajo:
- Fusión de puntos
- Integrar los puntos, de manera que cualquier punto que se encuentre a menos de 1 m de distancia se convierten en un solo punto
- Crear capa de características, donde se seleccionan los puntos con z < 10
- Puntos de amortiguación
- Resolución de polígono a trama de 1 m
- Reclasificar, donde 1 - 9 = 1; NoData = 0
Cada shapefile tiene aproximadamente entre 250.000 y 350.000 puntos que cubren ~ 5x7 km. Los datos de puntos utilizados como entradas representan las ubicaciones de los árboles. Cada punto (es decir, árbol) tiene un valor "z" asociado que representa el radio de la copa y se utiliza en el proceso de amortiguación. Mi intención es utilizar el resultado binario final en un proceso separado para producir un raster que describa la cobertura del dosel.
Hice una prueba con cuatro shapefiles y produjo una trama de 700MB y tardó 35 minutos (procesador i5 y 8GB RAM). Viendo que voy a necesitar para ejecutar este proceso en 3500 shapefiles, agradecería cualquier consejo para agilizar el proceso (ver código adjunto). En general, ¿cuál es la mejor manera de abordar el geoprocesamiento de big data? Más concretamente, ¿hay algún ajuste en el código o en el flujo de trabajo que pueda ayudar a aumentar la eficiencia?
Editar :
Tiempo (% del total) de las tareas de geoprocesamiento:
- Fusión = 7,6%.
- Integrar = 7,1%.
- Característica a Lyr = 0
- Tampón = 8,8%.
- Poly a Raster = 74.8%
- Reclasificación = 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")