【Python&RS】遥感影像的像素坐标转地理坐标(仿射变换)
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】遥感影像的像素坐标转地理坐标(仿射变换)的更多相关文章
- Python核对遥感影像批量下载情况的方法
本文介绍批量下载遥感影像时,利用Python实现已下载影像文件的核对,并自动生成未下载影像的下载链接列表的方法. 批量下载大量遥感影像数据对于GIS学生与从业人员可谓十分常见.然而,对于动辄成 ...
- 在matlab中进行地理坐标和像素坐标的相互转换
clc;close all;clear; %地理坐标和像素坐标的相互转换 [pic,R]=geotiffread('boston.tif'); %读取带地理坐标信息的tif影像 [m,n,~]=siz ...
- Python gdal读取MODIS遥感影像并结合质量控制QC波段掩膜数据
本文介绍基于Python中GDAL模块,实现MODIS遥感影像数据的读取.计算,并基于质量控制QC波段进行图像掩膜的方法. 前期的文章Python GDAL读取栅格数据并基于质量评估波段QA对 ...
- Python ArcPy批量掩膜、重采样大量遥感影像
本文介绍基于Python中ArcPy模块,对大量栅格遥感影像文件进行批量掩膜与批量重采样的操作. 首先,我们来明确一下本文的具体需求.现有一个存储有大量.tif格式遥感影像的文件夹:且其中除了 ...
- 在matlab中进行遥感影像地理坐标的相互转换
在matlab中进行图像处理,一般使用的都是图像本地坐标,以左上角(1,1)开始.处理完成后,如果要将结果在带地理坐标的遥感影像中显示,或者需要输出成shp文件,就需要涉及到本地坐标和地理坐标的转换, ...
- 在matlab中实现遥感影像和shp文件的结合显示
clc;close all;clear; road=shaperead('boston_roads.shp'); %读取shape文件 figure, mapshow('boston.tif'); % ...
- 基于VC++ Win32+CUDA+OpenGL组合与VC++ MFC SDI+CUDA+OpenGL组合两种方案的遥感影像显示:获得的重要结论!
1.基于VC++ Win32+CUDA+OpenGL组合的遥感影像显示 在该组合方案下,初始化时将OpenGL设置为下面两种方式,效果一样 //设置方式1 glutInitDisplayMode (G ...
- 遥感影像滤波处理软件 — timesat3.2
最近因为要做遥感影像的滤波处理,经过女神推荐,决定用Timesat,可是该软件3.1版本只适合xp系统以及2011的matlab,后来在官网上找到了最新的3.2版本.支持64位操作系统以及2014的m ...
- 1. GDAL与OpenCV2.X数据转换(适合多光谱和高光谱等多通道的遥感影像)
一.前言 GDAL具有强大的图像读写功能,但是对常用图像处理算法的集成较少,OpenCV恰恰具有较强的图像处理能力,因此有效的结合两者对图像(遥感影像)的处理带来了极大的方便.那么如何实现GDAL与o ...
- GDAL与OpenCV2.X数据转换(适合多光谱和高光谱等多通道的遥感影像)
一.前言 GDAL具有强大的图像读写功能,但是对常用图像处理算法的集成较少,OpenCV恰恰具有较强的图像处理能力,因此有效的结合两者对图像(遥感影像)的处理带来了极大的方便.那么如何实现GDAL与o ...
随机推荐
- Object 通用方法
Object 通用方法 概览 public final native Class<?> getClass() public native int hashCode() public boo ...
- Kali中python问题
Kali中python问题 1.查看python有哪些版本 update-alternatives --display python 2.如果没有,可以去/usr/bin查看kali自带哪些版本 查看 ...
- Sokit(TCP/UDP调试工具)
下载:http://www.winwin7.com/soft/56522.html#xiazai Sokit中文版是一款免费开源的TCP / UDP 测试(调试)工具,它主要可以用于接收和发送TCP/ ...
- 排队论——系统运行指标的R语言实现
排队是在日常生活中经常遇到的现象,如顾客到商店购买物品.病人到医院看病常常要排队.此时要求服务的数量超过服务机构(服务台.服务员等)的容量.也就是说,到达的顾客不能立即得到服务,因而出现了排队现象.这 ...
- python入门教程之二环境搭建
环境搭建 1python解释器 当我们编写Python代码时,我们得到的是一个包含Python代码的以.py为扩展名的文本文件.要运行代码,就需要Python解释器去执行.py文件. 由于整个Pyth ...
- [数据分析与可视化] Python绘制数据地图2-GeoPandas地图可视化
本文主要介绍GeoPandas结合matplotlib实现地图的基础可视化.GeoPandas是一个Python开源项目,旨在提供丰富而简单的地理空间数据处理接口.GeoPandas扩展了Pandas ...
- SSM整合的所有配置(配置文件)
mybatis-config.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE co ...
- SSM整合的所有配置(配置类)
导入依赖坐标pom.xml <dependencies> <dependency> <groupId>junit</groupId> <artif ...
- 【Note】矩阵加速
感谢 \(\text{tidongCrazy}\) 倾情授课. 目录 基本形式 基础习题 P1962 斐波那契数列(例题) P4838 P哥破解密码(矩阵加速) 稍微up P1397 [NOI2013 ...
- sql lag函数
lag https://spark.apache.org/docs/latest/api/sql/#lag lag(input[, offset[, default]]) OVER (PARTITIO ...