现有两个栅格数据:1991-1999.tif、2000-2008.tif,需要通过RasterToNumPyArray (arcpy)、numpy将这两个栅格数据拼接,使其成为1991-2008.tif
没有用栅格计算器操作是因为相位越界了,需要将栅格数据转为数组进行拼接。
这是两个数据的属性表。
结果例子:有1991-1994.tif 和1995-1998.tif,通过栅格转数组拼接为1991-1998.tif
以下内容引用CHATGPT、有用望采纳:
可以使用RasterToNumPyArray将栅格数据转换为numpy数组,然后使用numpy.concatenate将两个数组拼接起来,最后使用numpy.save将结果保存为tif格式的栅格数据。
具体代码如下:
import arcpy
import numpy as np
# 读取栅格数据并转换为numpy数组
arr_1991_1999 = arcpy.RasterToNumPyArray("1991-1999.tif")
arr_2000_2008 = arcpy.RasterToNumPyArray("2000-2008.tif")
# 拼接两个数组
arr_1991_2008 = np.concatenate((arr_1991_1999, arr_2000_2008), axis=2)
# 保存结果为tif格式的栅格数据
np.save("1991-2008.npy", arr_1991_2008)
arcpy.NumPyArrayToRaster(arr_1991_2008, arcpy.Point(0, 0), 1, 1).save("1991-2008.tif")
需要注意的是,拼接时需要指定axis参数为2,表示在第三个维度(即时间维度)上进行拼接。保存结果时,需要使用NumPyArrayToRaster将数组转换为栅格数据,并指定左上角坐标和像素大小。
该回答引用ChatGPTpython
import arcpy
import numpy as np
python
data1 = arcpy.RasterToNumPyArray("data1.tif")
data2 = arcpy.RasterToNumPyArray("data2.tif")
python
print(data1.shape) # (行数,列数)
print(data2.shape)
python
data = np.concatenate((data1, data2), axis=0) # 按行拼接
# 或者
# data = np.concatenate((data1, data2), axis=1) # 按列拼接
python
newRaster = arcpy.NumPyArrayToRaster(data)
newRaster.save("1991-2008.tif") # 保存为一个新的栅格数据
python
import arcpy
import numpy as np
data1 = arcpy.RasterToNumPyArray("1991-1999.tif")
data2 = arcpy.RasterToNumPyArray("2000-2008.tif")
print(data1.shape) # (行数,列数)
print(data2.shape)
data = np.concatenate((data1, data2), axis=0) # 按行拼接
# 或者
# data = np.concatenate((data1, data2), axis=1) # 按列拼接
newRaster = arcpy.NumPyArrayToRaster(data)
newRaster.save("1991-2008.tif") # 保存为一个新的栅格数据
以下答案由GPT-3.5大模型与博主波罗歌共同编写:
首先需要导入相应的库:
import arcpy
import numpy as np
然后利用arcpy
中的RasterToNumPyArray
将两个栅格数据转为numpy
数组:
arr_1991_1999 = arcpy.RasterToNumPyArray("1991-1999.tif")
arr_2000_2008 = arcpy.RasterToNumPyArray("2000-2008.tif")
其中,"1991-1999.tif"
和"2000-2008.tif"
为两个栅格数据的路径。接着,利用numpy
中的concatenate
函数将这两个数组进行拼接:
arr_1991_2008 = np.concatenate((arr_1991_1999, arr_2000_2008), axis=2)
其中,axis=2
表示沿着第三个维度进行拼接,即将两个数组的第三个维度进行拼接。最终得到的arr_1991_2008
即为拼接后的数组。
完整代码如下:
import arcpy
import numpy as np
arr_1991_1999 = arcpy.RasterToNumPyArray("1991-1999.tif")
arr_2000_2008 = arcpy.RasterToNumPyArray("2000-2008.tif")
arr_1991_2008 = np.concatenate((arr_1991_1999, arr_2000_2008), axis=2)
如果我的回答解决了您的问题,请采纳!