Я только начал использовать ArcPy для анализа геоданных с помощью ArcGIS. Анализ имеет разные этапы, которые должны выполняться один за другим.Как организовать GIS-проект Python с несколькими этапами анализа?
Вот некоторые псевдо-код:
import arcpy
# create a masking variable
mask1 = "mask.shp"
# create a list of raster files
files_to_process = ["raster1.tif", "raster2.tif", "raster3.tif"]
# step 1 (e.g. clipping of each raster to study extent)
for index, item in enumerate(files_to_process):
raster_i = "temp/ras_tem_" + str(index) + ".tif"
arcpy.Clip_management(item, '#', raster_i, mask1)
# step 2 (e.g. change projection of raster files)
...
# step 3 (e.g. calculate some statistics for each raster)
...
etc.
Этот код работает удивительно хорошо до сих пор. Однако растровые файлы большие, а некоторые шаги занимают довольно много времени (5-60 минут). Поэтому я хотел бы выполнить эти шаги только при изменении входных растровых данных. С точки зрения рабочего процесса GIS это не должно быть проблемой, потому что каждый шаг сохраняет физический результат на жестком диске, который затем используется в качестве ввода на следующем шаге.
Я думаю, если я хочу временно отключить, например. шаг 1, я мог бы просто поставить #
перед каждой строкой этого шага. Однако в реальном анализе на каждом шаге может быть много строк кода, поэтому я бы предпочел передать код каждого шага в отдельный файл (например, «step1.py», «step2.py», .. .), а затем выполнить каждый файл.
Я экспериментировал с execfile(step1.py)
, но получил ошибку NameError: global name 'files_to_process' is not defined
. Кажется, что переменные, определенные в основном скрипте, не передаются автоматически в сценарии, называемые execfile
.
Я также пробовал this, но я получил ту же ошибку, что и выше.
Я полный новичок Python (как вы могли понять из-за неправильного использования любых выражений, связанных с Python), и я был бы очень благодарен за любые советы о том, как организовать такой проект ГИС.
Это было именно то, что я хотел сделать, и он работает очень хорошо. Благодаря! –