GDAL(Geospatial Data Abstraction Library)是一个在X/MIT许可协议下的开源栅格空间数据转换库。它利用抽象数据模型来表达所支持的各种文件格式。它还有一系列命令行工具来进行数据转换和处理。

        Python的GDAL库作为栅格数据的处理转换库,其支持几百种栅格数据格式,如常见的TIFF、ENVI、HFA、HDF4等。因为遥感影像大部分都是栅格数据,所以GDAL库非常适合处理遥感影像、如光谱指数计算、波段合成、批量下载、栅格转面等。

        本次介绍如何通过遥感影像的仿射地理变换参数将像素坐标转为地理/投影坐标,在ENVI或者ArcGIS中都是自动转换,所以你在点击影像的某一像元时,它就会显示对应的地理/投影坐标。但如果你想用Python去实现,就需要使用影像的放射地理参数。

一、获取仿射地理变换参数

之前发布【Python&RS】GDAL计算遥感影像光谱指数(如NDVI、NDWI、EVI等)时就已经用过这部分代码,没啥好说的,就是获取影像的基本参数。代码中除了仿射地理变换参数其他没啥用,但我习惯全部输出。

def Get_data(filepath):
"""
:param filepath: 输入影像的路径
:return: 返回仿射地理变换参数
"""
ds = gdal.Open(filepath) # 打开数据集dataset
ds_width = ds.RasterXSize # 获取数据宽度
ds_height = ds.RasterYSize # 获取数据高度
ds_bands = ds.RasterCount # 获取波段数
ds_geo = ds.GetGeoTransform() # 获取仿射地理变换参数
ds_prj = ds.GetProjection() # 获取投影信息
print("影像的宽度为:" + str(ds_width))
print("影像的高度为:" + str(ds_height))
print("仿射地理变换参数为:" + str(ds_geo))
print("投影坐标系为:" + str(ds_prj))
return ds_geo
# data = ds.ReadAsArray(0, 0, ds_width, ds_height) # 以数组的形式读取整个数据集

二、像素坐标转地理/投影坐标

这里先介绍一下仿射地理变换参数(3497294, 0.1, 0.0, 3438148, 0.0, -0.1),这样大家可以更直观的明白代码的意思。

0:图像左上角的X坐标

        1:图像东西方向分辨率

        2:旋转角度,如果图像北方朝上,该值为0

        3:图像左上角的Y坐标

        4:旋转角度,如果图像北方朝上,该值为0

        5:图像南北方向分辨率

def Pixel_Coordinate(x, y, ds_geo):
"""
:param x: 输入x像素坐标
:param y: 输入y像素坐标
:param ds_geo: 输入仿射地理变换参数
:return: 返回x,y的地理/投影坐标
"""
x_geo = ds_geo[0]+ds_geo[1]*x + y*ds_geo[2]
y_geo = ds_geo[3]+ds_geo[4]*x + y*ds_geo[5]
print(x_geo, y_geo)
return x_geo, y_geo

从代码中我们可以看到使用仿射地理变换参数将像素坐标转成地理坐标时,就是将左上角的x,y值加上x,y的像素坐标乘以分辨率(即实际距离),然后再加上偏转就行了。这和我之前写的通过图片中心点地理坐标推算整张图片所有像素点地理坐标的原理是一样的,只不过这里的仿射地理变换参数是影像自带的,而之前写的【Python&GIS】根据像素坐标计算图片某点的地理/投影坐标中的偏转角度是自己算出来的。

三、地理/投影坐标转像素坐标

def Coordinate_Pixel(x_geo, y_geo, ds_geo):
"""
:param x_geo: 输入x地理坐标
:param y_geo: 输入y地理坐标
:param ds_geo: 输入仿射地理变换参数
:return: 返回x,y像素坐标
"""
y = ((y_geo - ds_geo[3] - ds_geo[4] / ds_geo[1] * x_geo + ds_geo[4] / ds_geo[1] * ds_geo[
0]) / (ds_geo[5] - ds_geo[4] / ds_geo[1] * ds_geo[2]))
x = ((x_geo - ds_geo[0] - y * ds_geo[2]) / ds_geo[1])
return int(x), int(y)

 本文章主要是分享个人在学习Python过程中写过的一些代码。有些部分借鉴了前人以及官网的教程,如有侵权请联系作者删除,大家有问题可以随时留言交流,博主会及时回复。

【Python&RS】遥感影像的像素坐标转地理坐标(仿射变换)的更多相关文章

  1. Python核对遥感影像批量下载情况的方法

      本文介绍批量下载遥感影像时,利用Python实现已下载影像文件的核对,并自动生成未下载影像的下载链接列表的方法.   批量下载大量遥感影像数据对于GIS学生与从业人员可谓十分常见.然而,对于动辄成 ...

  2. 在matlab中进行地理坐标和像素坐标的相互转换

    clc;close all;clear; %地理坐标和像素坐标的相互转换 [pic,R]=geotiffread('boston.tif'); %读取带地理坐标信息的tif影像 [m,n,~]=siz ...

  3. Python gdal读取MODIS遥感影像并结合质量控制QC波段掩膜数据

      本文介绍基于Python中GDAL模块,实现MODIS遥感影像数据的读取.计算,并基于质量控制QC波段进行图像掩膜的方法.   前期的文章Python GDAL读取栅格数据并基于质量评估波段QA对 ...

  4. Python ArcPy批量掩膜、重采样大量遥感影像

      本文介绍基于Python中ArcPy模块,对大量栅格遥感影像文件进行批量掩膜与批量重采样的操作.   首先,我们来明确一下本文的具体需求.现有一个存储有大量.tif格式遥感影像的文件夹:且其中除了 ...

  5. 在matlab中进行遥感影像地理坐标的相互转换

    在matlab中进行图像处理,一般使用的都是图像本地坐标,以左上角(1,1)开始.处理完成后,如果要将结果在带地理坐标的遥感影像中显示,或者需要输出成shp文件,就需要涉及到本地坐标和地理坐标的转换, ...

  6. 在matlab中实现遥感影像和shp文件的结合显示

    clc;close all;clear; road=shaperead('boston_roads.shp'); %读取shape文件 figure, mapshow('boston.tif'); % ...

  7. 基于VC++ Win32+CUDA+OpenGL组合与VC++ MFC SDI+CUDA+OpenGL组合两种方案的遥感影像显示:获得的重要结论!

    1.基于VC++ Win32+CUDA+OpenGL组合的遥感影像显示 在该组合方案下,初始化时将OpenGL设置为下面两种方式,效果一样 //设置方式1 glutInitDisplayMode (G ...

  8. 遥感影像滤波处理软件 — timesat3.2

    最近因为要做遥感影像的滤波处理,经过女神推荐,决定用Timesat,可是该软件3.1版本只适合xp系统以及2011的matlab,后来在官网上找到了最新的3.2版本.支持64位操作系统以及2014的m ...

  9. 1. GDAL与OpenCV2.X数据转换(适合多光谱和高光谱等多通道的遥感影像)

    一.前言 GDAL具有强大的图像读写功能,但是对常用图像处理算法的集成较少,OpenCV恰恰具有较强的图像处理能力,因此有效的结合两者对图像(遥感影像)的处理带来了极大的方便.那么如何实现GDAL与o ...

  10. GDAL与OpenCV2.X数据转换(适合多光谱和高光谱等多通道的遥感影像)

    一.前言 GDAL具有强大的图像读写功能,但是对常用图像处理算法的集成较少,OpenCV恰恰具有较强的图像处理能力,因此有效的结合两者对图像(遥感影像)的处理带来了极大的方便.那么如何实现GDAL与o ...

随机推荐

  1. ColorWell - web 颜色代码取色工具,Mac 上的优秀调色板

    ColorWell 是 Mac 上的一款非常优秀的颜色取色工具,她具有历史记录.调色板同步等功能,非常适合 web 或 App 开发人员使用 下载 ► ColorWell 下载安装 ⇲ 详细介绍 美丽 ...

  2. Python 霸榜的一周,又有什么新 AI 力作呢?「GitHub 热点速览」

    GPT 带火了一波语言模型,LLaMA 和 Alpaca 也在持续发力.依旧是各类 GPT 后缀霸榜 GitHub trending 的一周,为此特推部分专门收录了两个比较不错的 GPT 应用.而作为 ...

  3. 利用NGINX搭建部署直播流媒体服务器

    直播如今是一个老生常谈的问题,怎么用于直播,大多数人只晓得,大佬某平台直播软件,点击开始即可直播.那么如何来搭建一个简易的直播平台呢?仅仅是有直播功能,没有涉及转码以及播放软件. 安装nginx以及r ...

  4. telnet命令安装

    1.[root@pld3bomdb01 ~]# yum install telnet-server 2.[root@pld3bomdb01 ~]# rpm -qa telnet* telnet-ser ...

  5. 帝国cms随机sql语句,mysql高效的随机查询

    select * from AppleStorewhere rand()<0.015limit 100;

  6. AI测试101:测试AI系统的实用技巧&ML和AI自动化工具

    基于人工智能的系统,也称为神经网络(NN Neural Networks),和其他应用程序一样是 "系统",因此需要测试.本文将指导你测试AI和基于NN的系统,并理解相关概念. 测 ...

  7. react 兄弟组件传值(发布订阅,使用于任何组件传值,包括vue)

    react中兄弟组件传值常规操作一般是,A组件传给父组件,父组件再传给B组件 非常规操作 利用  pubsub-js 在Home组件内调用 PubSub.publish("第一个参数是事件名 ...

  8. Python_14 接口测试报告

    一.查缺补漏 1. 测试用例要复制到pycharm执行的项目中,才能显示 2. 函数用下划线,类用大驼峰 3. pycharm一行显示(不换行): File -> settings-> E ...

  9. [Pytorch框架] 2.5 循环神经网络

    文章目录 2.5 循环神经网络 2.5.1 RNN简介 RNN的起因 为什么需要RNN RNN都能做什么 2.5.2 RNN的网络结构及原理 RNN LSTM GRU 2.5.3 循环网络的向后传播( ...

  10. Pillow + pytesseract + tesseract-ocr 破解简单的图形验证码

    前言: 我们在做WEB UI自动化测试时,会遇到一些图形验证码,今天就来简单介绍下,如何来识别简单的图形验证码. 一.安装 ◇ Pillow pip3 install Pillow ◇ pytesse ...