使用ARGSI中的工具输入经度:116.1921394和纬度:33.88007015 得到像元值为1
通过arcgis中的操作可以获取得到像元值,显然相当麻烦,这里介绍使用GDAL获取像元值,完整代码如下:
import os
from osgeo import gdal
def del_files(dir_path):
for root, dirs, files in os.walk(dir_path, topdown=False):
# 第一步:删除文件
for name in files:
os.remove(os.path.join(root, name)) # 删除文件
# 第二步:删除空文件夹
for name in dirs:
os.rmdir(os.path.join(root, name)) # 删除一个空目录
def get_value_from_xy(file, minx, maxx, miny, maxy, temp):
dataset = gdal.Open(file)
outputSrtm = "./temp/temp"+temp #输出的临时缓存文件
data = gdal.Translate(outputSrtm, srcDS = dataset, projWin=[minx, maxy, maxx, miny])
data = data.ReadAsArray()
data_list = data.flatten()#把数据一维展开
return data_list
if __name__ == '__main__':
x = 116.1921394 #经度
y = 33.88007015 #纬度
step = 0.001
minx = x - step
maxx = x + step
miny = y - step
maxy = y + step
data_list = get_value_from_xy("HENAN_CLCD_v01_2021.tif", minx, maxx, miny, maxy, "clcd")
print(data_list)
del_files("./temp")
其中代码中的step=0.001的时候,获取的直为[1],如果我们想以 经度:116.1921394和纬度:33.88007015 为中心获取周围几个的像元就要更改相应的step值,由于遥感影像的分辨率是250米,step=0.002时,获取四个像元值,更改后的完整代码如下:
import os
from osgeo import gdal
def del_files(dir_path):
for root, dirs, files in os.walk(dir_path, topdown=False):
# 第一步:删除文件
for name in files:
os.remove(os.path.join(root, name)) # 删除文件
# 第二步:删除空文件夹
for name in dirs:
os.rmdir(os.path.join(root, name)) # 删除一个空目录
def get_value_from_xy(file, minx, maxx, miny, maxy, temp):
dataset = gdal.Open(file)
outputSrtm = "./temp/temp"+temp #输出的临时缓存文件
data = gdal.Translate(outputSrtm, srcDS = dataset, projWin=[minx, maxy, maxx, miny])
data = data.ReadAsArray()
data_list = data.flatten()#把数据一维展开
return data_list
if __name__ == '__main__':
x = 116.1921394 #经度
y = 33.88007015 #纬度
# step = 0.001
step = 0.002
minx = x - step
maxx = x + step
miny = y - step
maxy = y + step
data_list = get_value_from_xy("HENAN_CLCD_v01_2021.tif", minx, maxx, miny, maxy, "clcd")
print(data_list)
del_files("./temp")