前段时间学习了批量下载、批量提取多栅格影像、这几天粗略地写了一个批量拼接的代码
主要环境:arcgis pro 3、python3、arcpy
效果图:
主要函数:
arcpy.management.Mosaic(inputs, target, {mosaic_type}, {colormap}, {background_value}, {nodata_value}, {onebit_to_eightbit}, {mosaicking_tolerance}, {MatchingMethod})
参数介绍:来源于arcgis pro 帮助文档
inputs [input,...] | 要合并的栅格数据集。 | Mosaic Dataset; Raster Dataset; Raster Layer |
target | 输入栅格将被添加到的栅格。 此栅格必须是一个现有的栅格数据集。 默认情况下,目标栅格被视为输入栅格数据集列表中的第一个栅格。 使用创建栅格数据集工具可创建空栅格。 | Raster Dataset |
mosaic_type (可选) | 指定将用于镶嵌重叠区域的方法。
| String |
colormap (可选) | 指定对输入栅格中应用于镶嵌输出的色彩映射表进行选择的方法。
| String |
background_value (可选) | 移除在栅格数据周围创建的不需要的值。 指定的值与栅格数据集中的其他有用数据不同。 例如,栅格边界上为零的值不同于栅格数据集内的零值。 指定的像素值在输出栅格数据集中将被设置为 NoData。 对于基于文件的栅格和地理数据库栅格,要忽略背景值,必须将忽略背景值设置为与 NoData 相同的值。 企业级地理数据库栅格无需经过此额外步骤即可忽略背景值。 | Double |
nodata_value (可选) | 具有指定值的所有像素将在输出栅格数据集中被设置为 NoData。 | Double |
onebit_to_eightbit (可选) | 指定是否将输入 1 位栅格数据集转换为 8 位栅格数据集。 使用这种转换方法时,输入栅格数据集中的值 1 将在输出栅格数据集中更改为 255。 这在将 1 位栅格数据集导入地理数据库时十分有用。 1 位栅格数据集存储在文件系统中时包含 8 位金字塔图层,但在地理数据库中,1 位栅格数据集只能包含 1 位金字塔图层,这会降低显示质量。 通过在地理数据库中将数据转换为 8 位,可将金字塔图层构建为 8 位而非 1 位,从而在显示画面中生成适合的栅格数据集。
| Boolean |
mosaicking_tolerance (可选) | 发生镶嵌时,目标及源像素并不总是准确地排成直线。 如果像素未对齐,则需要确定是重新采样还是平移数据。 镶嵌容差可控制是否对像素执行重采样,或者是否平移像素。 如果(传入的数据集与目标数据集之间的)像素偏差大于该容差,则执行重采样。 如果(传入的数据集与目标数据集之间的)像素偏差小于该容差,则不执行重采样,而是执行平移。 容差的单位为像素,有效值范围为 0 到 0.5。 容差为 0.5 会保证发生平移。 存在像素偏差时,容差为零会保证执行重采样。 例如,源像素和目标像素的偏差值为 0.25。 如果将镶嵌容差设置为 0.2,由于像素偏差大于该容差,因此将执行重采样。 如果将镶嵌容差设置为 0.3,则会平移像素。 | Double |
MatchingMethod (可选) | 指定应用于栅格的颜色匹配方法。
| String |
在python中写一个按照每天获取文件地址的代码,传入输入和输出,再加一个循环,即可实现应用。
import os
import arcpy
arcpy.env.workspace = r"F:\MOD06_L2\output2"
tif_file_path="F:/MOD06_L2/output3/"
tif_file_path1="F:/MOD06_L2/output2/"
out_file_path="F:/MOD06_L2/pinjie/"
arcpy.env.workspace=tif_file_path
tif_file_name=os.listdir(tif_file_path)
length=len(tif_file_name)
j=int(length)
i=0
lis=[]
lis1=[]
lis2=[]
while (i<j):
tif_file_date=tif_file_name[i][0:7]+str(i)
tif_file_date2=tif_file_name[i][0:7]
tif_file=tif_file_name[i]
l=(tif_file_date,tif_file)
lis1.append(tif_file_date2)
lis2.append(tif_file_path1+tif_file)
lis.append(l)
i=i+1
dic=dict(lis)
set0=list(set(lis1))
set1=sorted(set0)
print(set1)
print(len(set1))
from collections import Counter
result=dict(Counter(lis1))
print(result)
countle=0
w=0
setlen=int(len(set1))
while (w<setlen):
date=set1[w]
print(date)
my_dict=result
count=my_dict.get(str(date))
print(count)
w=w+1
print(w)
input=''
k=0
while (k<count):
kk=countle+k
print(kk)
if (k==count-1):
input=input+lis2[kk]
output=lis2[kk]
else:
input=input+lis2[kk]+';'
k=k+1
print(input)
print(output)
countle=countle+int(count)
arcpy.Mosaic_management(input,output,"LAST","FIRST","nan", "nan", "", "", "")
##Mosaic two TIFF images to a single TIFF image
##Background value: 0
##Nodata value: 9
##==================================
##Mosaic
##Usage: Mosaic_management inputs;inputs... target {LAST | FIRST | BLEND | MEAN | MINIMUM | MAXIMUM} {FIRST | REJECT | LAST | MATCH}
## {background_value} {nodata_value} {NONE | OneBitTo8Bit} {mosaicking_tolerance}
## {NONE | STATISTIC_MATCHING | HISTOGRAM_MATCHING
## | LINEARCORRELATION_MATCHING}