编程_栅格影像去除投影

image-20231201135533280

地理坐标系一般是指由经度、纬度和相对高度组成的坐标系,能够标示地球上的任何一个位置。经度和纬度常合称为经纬度,把球面上的经纬度显示在平面地图上需要采用某种地图投影

地理坐标系

由于地面高低的不同和地球形状的不正规,天体测量所得的信息不足用于明确地计算地理位置。一般采用某个标准的大地测量系统所规定的地理坐标系统,目前最常用的标准是WGS84,它被卫星导航系统如美国GPS、中国的北斗导航系统使用。

image-1

投影坐标系

image-1

投影坐标系最出名的墨卡托投影,这里不过多讨论。

需求

现在有一份栅格影像tif文件,需要把这份栅格文件去除投影坐标,变为地理坐标。准确地说是,让这景tif的坐标系从GCS2000 变为WGS84 。

代码

#!/usr/bin/env python
# -*- coding: utf-8 -*- 
# @Time : 2023/12/5 14:40 
# @File : reprojection.py


# 栅格数据可以重投影,但比矢量数据投影更复杂。
# 栅格数据需要处理栅格数据中像元会弯曲和移动的事实,一对一的映射并不存在
# 通常用最近邻域插值法、双线性插值和三次卷积插值法进行插值
# 方法:1.gdalwarp 2.AutoCreateWarpedVRT

from osgeo import gdal, osr
import os

def reproject(infile, outfile):
    if os.path.exists(os.path.dirname(outfile)):
        pass
    else:
        os.makedirs(os.path.dirname(outfile))

    srs = osr.SpatialReference()
    srs.SetWellKnownGeogCS('WGS84')  # UTM转无投影,即地理坐标系
    old_ds = gdal.Open(infile)
    vrt_ds = gdal.AutoCreateWarpedVRT(old_ds, None, srs.ExportToWkt(),
                                      gdal.GRA_Bilinear)  # 第一个默认值None,使用源栅格数据的srs;第二个如果None,表示不发生重投影
    gdal.GetDriverByName('gtiff').CreateCopy(outfile, vrt_ds)  # 该函数返回一个数据集对象,用CreateCopy函数保存为gtiff

if __name__ == '__main__':

    file = r'D:\img1.tif'
    outfile = r'D:\img1_wgs84.tif'
    reproject(file, outfile)

代码解析

分析reproject函数
1.创建输出文件夹
2.设置投影坐标系
3.打开待重投影影像
4.创建虚拟数据集
5.保存重投影后的影像
6.输出重投影后的影像