J'ai du code Python conçu pour traiter les fichiers de formes ponctuels via le flux de travail suivant:
- Fusionner des points
- Intégrez des points, de sorte que tous les points situés à moins de 1 m l'un de l'autre deviennent un point
- Créer une couche d'entités, où les points avec z <10 sont sélectionnés
- Points tampons
- Résolution de polygone à raster de 1 m
- Reclassifier, où 1 - 9 = 1; NoData = 0
Chaque fichier de formes contient environ 250 000 à 350 000 points couvrant environ 5 x 7 km. Les données de points utilisées comme entrées représentent les emplacements des arbres. Chaque point (c'est-à-dire un arbre) est associé à une valeur "z" qui représente le rayon de la couronne et est utilisée dans le processus de mise en mémoire tampon. Mon intention est d'utiliser la sortie binaire finale dans un processus séparé pour produire un raster décrivant la couverture de la canopée.
J'ai fait un test avec quatre fichiers de formes et cela a produit une trame de 700 Mo et a pris 35 minutes (processeur i5 et 8 Go de RAM). Étant donné que je devrai exécuter ce processus sur 3500 shapefiles, je vous serais reconnaissant de tout conseil pour rationaliser le processus (voir le code ci-joint). De manière générale, quel est le meilleur moyen de gérer le Big Data avec le géotraitement? Plus précisément, y a-t-il des modifications à apporter au code ou au flux de travail qui pourraient aider à accroître l'efficacité?
modifier :
Temps (% du total) pour les tâches de géotraitement:
- Fusion = 7,6%
- Intégrer = 7.1%
- Fonction à Lyr = 0
- Tampon = 8,8%
- Poly à raster = 74,8%
- Reclassifier = 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")