Python与ArcGIS的协同工作

协同工作的基础:通过ArcGIS提供的专用Python库arcpy,实现对地理数据的分析、处理和可视化等功能的自动化操作。

课前准备

python执行地理处理工具

arcmap 内置了python2.x 的环境

在ArcMap中通过python脚本来运行地理处理工具

例1:单位换算

  • 利用乘工具,对下载到的NDVI乘以缩放因子0.0001
import arcpy

in_raster = r"NDVIint.tif"
scale_factor = 0.0001
out_raster = r"NDVIfloat.tif"
arcpy.gp.Times_sa(in_raster, scale_factor, out_raster)

例2:裁剪栅格

import arcpy

in_raster = r"NDVIfloat.tif" # 输入:待裁剪栅格路径
mask = r"YRB.shp" # 输入:裁剪用矢量边界
out_raster = r"S:\tut\0203\year NDVI\clip_2010.tif" 
arcpy.Clip_management(in_raster, "#", out_raster, mask, "#", "ClippingGeometry")

例3:批处理栅格数据的通用模板

python基本语法+arcpy调用地理处理工具 = 批处理

# params
import os
in_path = r"xxx" # str
out_path = r"xxx" # str
prefix = "xx" # str

rasters = [os.path.join(in_path,i) for i in os.listdir(in_path) if i.endswith(".tif")]
nums = len(rasters)
num = 1
for raster in rasters:
    raster_name = os.path.split(raster)[1]
    out_raster = os.path.join(out_path, prefix + raster_name)
    if not os.path.exists(out_raster):
        try:
            # 这里插入要批量执行的地理处理相关的代码
            arcpy.AddMessage("%d/%d | %s completed" % (num, nums, out_raster))
        except Exception as err:
            arcpy.AddMessage("%d/%d | %s errored, %s" % (num, nums, out_raster, err))
    else:
        arcpy.AddMessage("%d/%d | %s already exists" % (num, nums, out_raster))
    num = num + 1

在这个模板的基础上,可以实现批量裁剪的代码

###
mask = 

for raster in rasters:
    ###
    arcpy.Clip_management(raster, "#", out_raster, mask, "#", "ClippingGeometry")

在这里插入图片描述

批处理工具箱的使用

工具箱的安装

添加MODIS数据处理工具箱

在这里插入图片描述
在这里插入图片描述

批量裁剪栅格工具

在这里插入图片描述

  • 单矢量文件+多栅格

    • 例:基于2000-2005全球NDVI栅格,裁剪得到黄河流域的NDVI栅格

    在这里插入图片描述

  • 多矢量文件+多栅格

    • 例:基于2000-2010年鄂尔多斯高原NDVI栅格,裁剪出无定河流域、内流区、窟野河流域的NDVI

    在这里插入图片描述

批量投影栅格工具

  • 批量将无定河流域NDVI栅格投影至目标坐标系(高斯-克吕格投影3度带的第37投影带)

    Xian_1980_3_Degree_GK_Zone_37

在这里插入图片描述

批量栅格计算器

功能
将多个栅格文件按照某以代数表达式执行栅格计算器(Raster Calculator) 工具,并将输出栅格文件保存至指定的文件夹中。该工具接受代数表达式的动态输入。通过修改代数表达式可以实现批量对栅格执行四则运算(加、减、乘、除)、计算掩膜、填充空值(固定值、插值)、设为空等操作。

关于代数表达式
提供的代数表达式需要满足栅格计算器工具代数表达式的基本语法,并且包含字符串"{A}“,字符串”{A}"代表输入栅格在代数表达式中的位置。
在这里插入图片描述

  • 例:批量单位换算,以开氏温度转摄氏度为例

扩展阅读

在这里插入图片描述

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐