gpt4 book ai didi

python - 如何组织具有多个分析步骤的 Python GIS 项目?

转载 作者:太空宇宙 更新时间:2023-11-03 18:50:33 25 4
gpt4 key购买 nike

我刚刚开始使用 ArcPy 来通过 ArcGIS 分析地理数据。分析有不同的步骤,需要依次执行。

这是一些伪代码:

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:未定义全局名称“files_to_process”。看来主脚本中定义的变量不会自动传递给execfile调用的脚本。

我也尝试过this ,但我收到了与上面相同的错误。

我是一个彻头彻尾的 Python 新手(正如您可能通过滥用任何与 Python 相关的表达式而发现的那样),如果您提供有关如何组织此类 GIS 项目的任何建议,我将非常感激。

最佳答案

我认为你想要做的是将每个步骤构建到一个函数中。这些函数可以存储在同一个脚本文件中,也可以存储在使用 import 语句加载的自己的模块中(就像 arcpy 一样)。伪代码如下所示:

#file 1: steps.py
def step1(input_files):
# step 1 code goes here
print 'step 1 complete'
return

def step2(input_files):
# step 2 code goes here
print 'step 2 complete'
return output # optionally return a derivative here

#...and so on

然后,在同一目录中的第二个文件中,您可以导入并调用将栅格作为输入传递的函数。

#file 2: analyze.py
import steps
files_to_process = ["raster1.tif", "raster2.tif", "raster3.tif"]

steps.step1(files_to_process)

#steps.step2(files_to_process) # uncomment this when you're ready for step 2

现在您可以有选择地调用代码的不同步骤,并且只需要注释/排除一行而不是一整 block 代码。希望我正确理解你的问题。

关于python - 如何组织具有多个分析步骤的 Python GIS 项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18448495/

25 4 0
文章推荐: python - 在 django 模型中加载树结构时出现问题
文章推荐: python - 删除
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com