【gis学习】GDAL获取栅格数据各个像素对应的经纬度

参考: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*adfGeoTransform[1]+j*adfGeoTransform[2]
        py = adfGeoTransform[3]+i*adfGeoTransform[4]+j*adfGeoTransform[5]
        col = [px,py]
        row.append(col)
    arrSlope.append(row)
print(len(arrSlope))
    

接下来的目的就是降维了…

只输出X的值,并把其作为一列


dataset = gdal.Open("C:\\Users\\Nihil\\Desktop\\Arcgisdata\\HPDEM.tif")

adfGeoTransform = dataset.GetGeoTransform()

nXsize = dataset.RasterXSize+1#列数
nYsize = dataset.RasterYSize+1#行数



arrSlope = []#存储每个像素的X,Y值
row = []
for i in range(nYsize):
    Px = []
    Py = []
    for j in range(nXsize):
        px = adfGeoTransform[0]+j*adfGeoTransform[1]+i*adfGeoTransform[2]
        py = adfGeoTransform[3]+j*adfGeoTransform[4]+i*adfGeoTransform[5]
        #col = [px,py]
        #row.append(col)
        Px.append(px)
    row.append(Px)
data = pd.DataFrame(row)
colums = []
for x in range(nYsize):
    colums.append(x)
colums = pd.DataFrame(colums)
data['index'] = colums
data.set_index(['index']).stack()
index      
0      0       756935.465277
       1       756947.965277
       2       756960.465277
       3       756972.965277
       4       756985.465277
       5       756997.965277
       6       757010.465277
       7       757022.965277
       8       757035.465277
       9       757047.965277
       10      757060.465277
       11      757072.965277
       12      757085.465277
       13      757097.965277
       14      757110.465277
       15      757122.965277
       16      757135.465277
       17      757147.965277
       18      757160.465277
       19      757172.965277
       20      757185.465277
       21      757197.965277
       22      757210.465277
       23      757222.965277
       24      757235.465277
       25      757247.965277
       26      757260.465277
       27      757272.965277
       28      757285.465277
       29      757297.965277
                   ...      
4622   4849    817547.965277
       4850    817560.465277
       4851    817572.965277
       4852    817585.465277
       4853    817597.965277
       4854    817610.465277
       4855    817622.965277
       4856    817635.465277
       4857    817647.965277
       4858    817660.465277
       4859    817672.965277
       4860    817685.465277
       4861    817697.965277
       4862    817710.465277
       4863    817722.965277
       4864    817735.465277
       4865    817747.965277
       4866    817760.465277
       4867    817772.965277
       4868    817785.465277
       4869    817797.965277
       4870    817810.465277
       4871    817822.965277
       4872    817835.465277
       4873    817847.965277
       4874    817860.465277
       4875    817872.965277
       4876    817885.465277
       4877    817897.965277
       4878    817910.465277
Length: 22555617, dtype: float64

你可能感兴趣的:(gis,资料,基础)