转载自http://blog.csdn.net/gisboygogogo/article/details/75195760
本篇文章将说明如何利用ArcGIS 10.1自带的Python IDLE进行遥感影像的批量拼接与裁剪。
1.运行环境:ArcGIS10.1 (安装传送门)、Python IDLE
2.数据来源:地理空间数据云 GDEMV2 30M分辨率数字高程数据
3.解决问题:制作山西省的DEM影像
如下图所示,以30M分辨率数字高程数据为例,影像皆是固定范围的经纬度保存在其服务器上,外在表现以小幅正方形影像。如果手动进行拼接,工作量会非常大且容易出错。
我们的目标:批处理,写一次代码,处理多幅影像
1.查找目标范围的经纬度信息,本文以山西为例,经纬度范围在N33-N41, E109-E114直接,所以先将这个范围内的影像下载后,解压后放在一个文件夹下。
2.拼接影像
开始菜单-ArcGIS-IDLE(Python GUI) 打开IDLE。File-New Window, 文件以 .py结尾,如MosaicToNewRasters.py
-
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
-
-
-
print out_coor_system.name
-
print dataType
-
print piexl_type
-
print cellwidth
-
print bandcount
-
-
arcpy.CheckOutExtension(“Spatial”)
-
-
-
rasters = []
-
for ras in arcpy.ListRasters(“*dem.tif”):
-
rasters.append(ras)
-
-
ras_list = “;”.join(rasters)
-
-
-
print ras_list
-
-
-
-
outFolder = r“E:\Huangkun\arcpyData\shanxi\N34_N35\n34_n35_out”
-
-
-
arcpy.MosaicToNewRaster_management(ras_list, outFolder, “shanxi_n34_n35_dem_data.tif”, out_coor_system, “16_BIT_SIGNED”, cellwidth, bandcount, “LAST”, “FIRST”)
RUN–>Run Module F5 执行代码
这里用到了arcpy包下面的 MosaicToNewRaster_management()函数
得到如下结果
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”
-
-
-
mask = r“E:\Huangkun\arcpyData\shanxi\shanxi_shp\shanxi.shp”
-
-
-
rasters = glob.glob(os.path.join(inws, “*.tif”))
-
-
-
for ras in rasters:
-
outname = os.path.join(outws, os.path.basename(ras).split(“.”)[0] + “_clp.tif”)
-
out_extract = arcpy.sa.ExtractByMask(ras, mask)
-
out_extract.save(outname)
执行脚本代码,裁剪后的影像被存放在outw所指定的文件夹
4.通过ArcMap加载影像,最终结果:
这就实现了批量拼接与裁剪影像的工作,其实拼接与裁剪无所谓先后顺序。
转载自:https://blog.csdn.net/hailiannanhai/article/details/78682867