У меня есть код Python, который предназначен для принятия точечных шейп-файлов через следующий рабочий процесс:
- Точки слияния
- Объедините точки так, чтобы любые точки в пределах 1 м друг от друга становились одной точкой
- Создать векторный слой, где выбраны точки с z <10
- Буферные очки
- Разрешение полигона на растр 1м
- Реклассифицировать, где 1 - 9 = 1; NoData = 0
Каждый шейп-файл имеет от 250 000 до 350 000 точек, покрывающих ~ 5x7 км. Точечные данные, используемые в качестве входных данных, представляют собой местоположения деревьев. Каждая точка (т. Е. Дерево) имеет соответствующее значение "z", которое представляет радиус короны и используется в процессе буферизации. Мое намерение состоит в том, чтобы использовать окончательный двоичный вывод в отдельном процессе, чтобы создать растр, описывающий покрытие купола.
Я провел тест с четырьмя шейп-файлами, и он создал растр 700 МБ и занял 35 минут (процессор i5 и 8 ГБ ОЗУ). Видя, что мне нужно будет запустить этот процесс на 3500 шейп-файлах, я был бы признателен за любые советы по оптимизации этого процесса (см. Прилагаемый код). Вообще говоря, как лучше всего справиться с геообработкой больших данных? В частности, есть ли какие-либо изменения в коде или рабочем процессе, которые могут помочь повысить эффективность?
Редактировать :
Время (% от общего) для задач геообработки:
- Слияние = 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")