GDAL(Geospatial Data Abstraction Library)是一個在X/MIT許可協議下的開源柵格空間數據轉換庫。它利用抽象數據模型來表達所支持的各種文件格式。它還有一系列命令行工具來進行數據轉換和處理。 Python的GDAL庫作為柵格數據的處理轉換庫,其支持幾百種柵格數 ...
GDAL(Geospatial Data Abstraction Library)是一個在X/MIT許可協議下的開源柵格空間數據轉換庫。它利用抽象數據模型來表達所支持的各種文件格式。它還有一系列命令行工具來進行數據轉換和處理。
Python的GDAL庫作為柵格數據的處理轉換庫,其支持幾百種柵格數據格式,如常見的TIFF、ENVI、HFA、HDF4等。因為遙感影像大部分都是柵格數據,所以GDAL庫非常適合處理遙感影像、如光譜指數計算、波段合成、批量下載、柵格轉面等。
本次介紹如何通過遙感影像的仿射地理變換參數將像素坐標轉為地理/投影坐標,在ENVI或者ArcGIS中都是自動轉換,所以你在點擊影像的某一像元時,它就會顯示對應的地理/投影坐標。但如果你想用Python去實現,就需要使用影像的放射地理參數。
一、獲取仿射地理變換參數
之前發佈
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的像素坐標乘以解析度(即實際距離),然後再加上偏轉就行了。這和我之前寫的通過圖片中心點地理坐標推算整張圖片所有像素點地理坐標的原理是一樣的,只不過這裡的仿射地理變換參數是影像自帶的,而之前寫的
三、地理/投影坐標轉像素坐標
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過程中寫過的一些代碼。有些部分借鑒了前人以及官網的教程,如有侵權請聯繫作者刪除,大家有問題可以隨時留言交流,博主會及時回覆。