arcmap 影像坐标批处理 python_利用ArcGIS Python批量拼接裁剪遥感影像(arcpy batch processing)...
本文旨在介绍如何运用ArcGIS 10.1内置的Python IDLE进行遥感影像的批量拼接与裁剪操作;同时提供相关代码示例。
1.运行环境:ArcGIS10.1 (安装传送门)、Python IDLE服务器
2.数据来源:地理空间数据云 GDEMV2 30M分辨率数字高程数据微信
3.解决问题:制做山西省的DEM影像微信开发
如图所示,在采用30M空间分辨率的数字高程数据为例时,在其服务器上存储的是确定的空间范围内的经纬度坐标图片。手动拼接这些影像,则工作量较大且容易出现错误。app
咱们的目标:批处理,写一次代码,处理多幅影像函数

获取研究区域的经纬度信息,并以山西为例进行说明。具体而言,在N33至N41纬度和E109至E114经度范围内直接给出了具体的经纬度数值。因此需要先下载并解压该范围内的影像数据,并将其归集到特定文件夹中。

ArcGIS IDLE (Python GUI) 是用于启动 IDLE 的工具。在 ArcGIS IDLE (Python GUI) 中执行以下操作:新建窗口(File-New Window),并将文件命名为以 .py 结尾(如 MosaicToNewRasters.pycode)作为模板进行操作。
import arcpy
import os
#指定工做目录,即存放影像的目录
arcpy.env.workspace = r"E:\Huangkun\arcpyData\shanxi\N34_N35"
#指定该工做空间下的一副影像为基础影像,为后面的参数提取作准备
base = "ASTGTM2_N34E109_dem.tif"
#如下一段代码是为执行拼接作参数准备
out_coor_system = arcpy.Describe(base).spatialReference #获取坐标系统
dataType = arcpy.Describe(base).DataType
piexl_type = arcpy.Describe(base).pixelType
cellwidth = arcpy.Describe(base).meanCellWidth #获取栅格单元的的宽度
bandcount = arcpy.Describe(base).bandCount #获取bandCount
#打印一些信息
print out_coor_system.name
print dataType
print piexl_type
print cellwidth
print bandcount
arcpy.CheckOutExtension("Spatial")
#提取待拼接影像的文件名,且中间以;隔开,例如:a.tif;b.tif;c.tif
rasters = []
该代码段将遍历wrokspace中的所有以dem.tif为后缀的栅格文件,并进行相应的过滤处理。
rasters.append(ras)
ras_list = ";".join(rasters) #字符串拼接
#打印出来,看看什么结果吧
print ras_list
#指定输出文件夹
outFolder = r"E:\Huangkun\arcpyData\shanxi\N34_N35\n34_n35_out"
#执行拼接操做
MosaicToNewRaster管理模块(ras_list)将被用于将多个栅格图层(ras_list)合并至指定的目标文件夹(outFolder)中,并生成名为"shanxi_n34_n35_dem_data.tif"的输出地理信息系统数据集(output file)。该操作将使用指定的空间参考系统(output coordinate system)、无符号16位整数类型的栅格数据(data type)、单元格宽度(cell width)、以及波段数量(number of bands)。Mosaic顺序设置为从最后一个栅格开始并依次向前覆盖前面的栅格(Mosaic order),最终生成的第一张栅格将被选为输出结果的第一个栅格(First output raster)。
这里用到了arcpy包下面的 MosaicToNewRaster_management()函数blog
获得以下结果

3.以山西省shp边界裁剪影像

再新建一个Window,文件命为BatchExtractByMask.py
import arcpy
import glob
import os
arcpy.CheckOutExtension('Spatial')
#指定先前拼接后的遥感影像所在目录
将inws变量设置为r"E:\Huangkun\arcpyData\shanxi\shanxi_regular_dem\shanxi_province_dem"
#指定裁剪后的影响存放目录
outws = r"E:\Huangkun\arcpyData\shanxi\shanxi_regular_dem\shanxi"
#指定shp范围边界文件,即目标区域的边界
mask = r"E:\Huangkun\arcpyData\shanxi\shanxi_shp\shanxi.shp"
#利用glob包,将inws下的全部tif文件读存放到rasters中
rasters = glob.glob(os.path.join(inws, "*.tif"))
#循环rasters中的全部影像,进行按掩模提取操做
for ras in rasters:
outname = os.path.join(outws, os.path.basename(ras).split(".")[0] + "_clp.tif")#指定输出文件的命名方式(以被裁剪文件名+_clip.tif命名)
out_extract = arcpy.sa.ExtractByMask(ras, mask) #执行按掩模提取操做
out_extract.save(outname) #保存数据
执行脚本代码,裁剪后的影像被存放在outw所指定的文件夹

4.经过ArcMap加载影像,最终结果:

这就是完成了批量拼接与影像剪辑的工作流程,并且无论先执行拼接还是剪辑都不会影响最终结果
若是你以为本文对你有帮助,是支持赞扬的哦:)

如遇到问题,欢迎经过公众号留言给做者,以便共同探讨。
邮箱:thinkingingis@qq.com
微信公众号:

