基于Arcpy的TIF栅格多年数据的批量镶嵌

首先通过Matlab将需要拼接的数据的目录及名称获取,注意,如果要用Matlab的话,保证拼接数据名称长度的一致性。

调整目录到该需要镶嵌的数据下
e=dir('*.tif');
datasum=[];
for i=1:length(e)
    data=e(i).name;
    data=strcat('G:/yellow original modis MOD13A2/h27v05/',data,';');
    datasum=[datasum;data];
end
%再次调整目录到该需要镶嵌的数据下
e=dir('*.tif');
datasum1=[];
for i=1:length(e)
    data=e(i).name;
    data=strcat('G:/yellow original modis MOD13A2/h26v05/',data,';');
    datasum1=[datasum1;data];
end
%再次调整目录到该需要镶嵌的数据下
e=dir('*.tif');
datasum2=[];
for i=1:length(e)
    data=e(i).name;
    data=strcat('G:/yellow original modis MOD13A2/h26v04/',data);
    datasum2=[datasum2;data];
end
%对来源数据进行合并
dd=[datasum,datasum1,datasum2];
%调整工作路径到目标数据下
e=dir('*.tif');
datasum3=[];
for i=1:length(e)
    data=e(i).name;
    data=strcat('G:/yellow original modis MOD13A2/h25v05/',data);
    datasum3=[datasum3;data];
end

需要注意的是,每次目录下的数据按照同样的顺序排列的,运行完毕后,将变量dd复制到excel中,并存为csv格式,本文存成h26v04.csv,该文件是镶嵌文件,目标文件存为h25v05n.csv.另外上述中调整好几次工作空间,为了方便起见,读者也能够将所有数据放在一起,然后使用e=dir(‘*.tif’),得到所有的文件,然后使用for=1:length(e),然后再里面用代码得到每个的名称,并进行组合,这里就不再赘述。

# -*- coding: utf-8 -*-
# Import arcpy module
import arcpy
import csv
import numpy as np

csv_reader = csv.reader(open('G:/yellow original modis MOD13A2/h25v05 .csv'))
h25v05=[]
for row in csv_reader:
    h25v05.append(row)

csv_reader = csv.reader(open('G:/yellow original modis MOD13A2/h26v04.csv'))
h26v04=[]
for row in csv_reader:
    h26v04.append(row)


# Local variables:
a=np.arange(0,345) #这里设置0,345是因为作者需要批量拼接344个数据集,如果要拼100个,则设置99就行
for i in a:
    result=h25v05[i]
    a5=''.join(result)
    a6=a5
    a1=h26v04[i]
    a1="".join(a1)
    arcpy.Mosaic_management(a1,a6,"LAST", "FIRST", "-3000", "-3000", "NONE", "0", "NONE")
    print (i)

上述代码的重点在于使用”.join函数使得列表变成字符串,镶嵌的核心代码写法是先通过Arcigs中的建模工具获取,然后按照里面的写法来进行编写,运行完毕后,镶嵌结果在目标数据中,而不会产生新的文件。

转载自:https://blog.csdn.net/weixin_33806509/article/details/88292760

You may also like...