参考:GDAL获取栅格数据各个像素对应的经纬度(Python版)
gdal GetGeoTransform解释 GetProjectionRef
//如果图像不含地理坐标信息,默认返回值是:(0,1,0,0,0,1)
//In a north up image,
//左上角点坐标(padfGeoTransform[0],padfGeoTransform[3]);
//padfGeoTransform[1]是像元宽度(影像在宽度上的分辨率);
/p/adfGeoTransform[5]是像元高度(影像在高度上的分辨率);
//如果影像是指北的,padfGeoTransform[2]和padfGeoTransform[4]这两个参数的值为0。
后面继续补充有关于这个坐标系统的定义
GDAL数据集有两种模式描述栅格位置(用点/线坐标系)以及地理参考坐标系之间的关系:首要的也是最普遍的是使用仿射转换,另一种则是GCPs(多控制点定位方式)
仿射变换由6个参数构成,它们由GDALDataset::!GetGeoTransform()返回它们把点/线坐标系(我想这里的(点/线)意思是栅格的(行/列)位置)用下面的关系转换到地理参考空间。
1 Xgeo = GT(0) + XpixelGT(1) + YlineGT(2)
2 Ygeo = GT(3) + XpixelGT(4) + YlineGT(5)
假设指北针向上的影像,GT2和GT4参数是0,而GT1是象元宽,GT5是象元高,(GT0,GT3)点位置是影像的左上角。
注意,上面所说的点/线坐标系是从左上角(0,0)点到右下角,也就是坐标轴从左到右增长,从上到下增长的坐标系。点/线位置中心是(0.5,0.5)扩充:
Demo
import gdal
import numpy as np
dataset = gdal.Open("C:\\Users\\Nihil\\Desktop\\Arcgisdata\\HPDEM.tif")
adfGeoTransform = dataset.GetGeoTransform()
nXsize = dataset.RasterXSize#列数
nYsize = dataset.RasterYSize#行数
arrSlope = []#存储每个像素的X,Y值
for i in range(nXsize):
row = []
for j in range(nYsize):
px = adfGeoTransform[0]+i*a