我有Python代码,旨在通过以下工作流程获取点shapefile:
- 合并点
- 积分点,使彼此之间1 m之内的任何点成为一个点
- 创建要素图层,在其中选择z <10的点
- 缓冲点
- 多边形到栅格的1m分辨率
- 重新分类,其中1-9 = 1;NoData = 0
每个shapefile大约有250,000至350,000个点,覆盖〜5x7 km。用作输入的点数据表示树的位置。每个点(即树)都有一个关联的“ z”值,该值代表冠半径,并在缓冲过程中使用。我的目的是在单独的过程中使用最终的二进制输出来生成描述遮篷的栅格。
我对四个shapefile进行了测试,生成了700MB的栅格,耗时35分钟(i5处理器和8GB RAM)。鉴于我将需要在3500个shapefile上运行此过程,因此,我希望获得有关简化该过程的任何建议(请参阅随附的代码)。一般来说,处理地理数据的最佳方法是什么?更具体地说,对代码或工作流程是否有任何有助于提高效率的调整?
编辑:
地理处理任务的时间(占总数的百分比):
- 合并= 7.6%
- 积分= 7.1%
- Lyr = 0的特征
- 缓冲= 8.8%
- 多边形转栅格= 74.8%
- 重新分类= 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")