GDAL投影轉換 座標偏移筆記

2022-09-17 16:00:23 字數 3998 閱讀 7147

1.osr

#

osr(向量資料投影)

#作用:投影座標系之間轉換、地理座標和投影座標之間轉換

#可用於幾何物件和點(點屬於幾何物件)

from osgeo import

gdal

import

osrpeters_sr =osr.spatialreference()

peters_sr.importfromproj4(

'...')

ct =osr.coordinatetransformation(web_mercator_sr, peters_sr)

#world物件為web_mercator_sr投影,但沒有分配srs

world.transform(ct)

#對幾何物件的轉換

ct.transformpoint(x, y)

#對點的轉換

#如果幾何物件分配有srs,轉換方法如下

world.transformto(web_mercator_sr)

#讀取投影的地理基準,用於和地理座標進行轉換

geosrs = peters_sr.clonegeogcs()

2.proj

#

proj(向量資料投影)

#作用:投影座標之間轉換、地理座標和投影座標之間轉換

import

pyproj

utm_proj = pyproj.proj('

+proj=utm +zone=31 +ellps=wgs84')

x, y = utm_proj(2.294, 48.858) #

地理座標轉化為投影座標

x1, y1 = utm_proj(x, y, inverse=true) #

逆變換wgs84 = pyproj.proj(''

)nad27 = pyproj.proj(''

)x, y = pyproj.transform(wgs84, nad27, 580744, 4504695) #

投影座標之間轉換

3.柵格資料重投影

#

柵格資料重投影

#柵格資料也可以重投影,但比向量資料投影更複雜。

#柵格資料需要處理柵格資料中像元會彎曲和移動的事實,一對一的對映並不存在

#通常用最近鄰域插值法、雙線性插值和三次卷積插值法進行插值

#方法:1.gdalwarp 2.autocreatewarpedvrt

srs =osr.spatialreference()

srs.setwellknowngeogcs(

'wgs84

') #

utm轉無投影,即地理座標系

old_ds = gdal.open('

nat_color.tif')

vrt_ds = gdal.autocreatewarpedvrt(old_ds, none, srs.exporttowkt(), gdal.gra_bilinear) #

第乙個預設值none,使用源柵格資料的srs;第二個如果none,表示不發生重投影

gdal.getdriverbyname('

gtiff

').createcopy('

nat_color_wgs84.tif

', vrt_ds) #

該函式返回乙個資料集物件,用createcopy函式儲存為gtiff

4.getgeotransform

#

getgeotransform,在真實座標柵格資料座標具有相同srs情況下,計算座標偏移。

#作用:影象座標(行列號)和現實世界座標(投影座標或地理座標)之間的轉換。是仿射變換,不是投影轉換,和上面不同。

#0、3 x\y座標 起始點現實世界座標 1、5 畫素寬度和高度 2、4 x\y方向旋轉角

gt = ds.getgeotransform() #

正變換:影象座標到現實世界座標。正變換時輸入行列號,輸出的現實世界座標是柵格影象srs下的座標

inv_gt = gdal.invgeotransform(gt) #逆

變換:現實世界座標到影象座標

xoff, yoff = map(int, offsets) #

取整

5.gdal.transformer

#

gdal.transformer,可計算相同srs下的座標偏移;不能用於不同srs投影轉換

#作用:現實世界座標(投影座標或地理座標)與影象座標(行列號)之間的轉換、兩個柵格影象之間畫素座標偏移(行列號),如鑲嵌

#原理就是在相同srs情況下,計算圖1的畫素座標到現實世界座標的偏移,再從現實世界座標偏移到圖2的畫素座標。其實就是兩次仿射變換(正、逆),從而把圖1的畫素座標偏移到圖2的畫素座標。

#所以不能用於不同srs情況,因為該函式沒有內建不同srs的投影轉換公式。只能用於相同srs下,兩個柵格資料集座標的偏移。

#這裡in_ds和out_ds具有相同srs。轉換目的是為了把不同柵格資料的影象座標(行列號)進行偏移,方便鑲嵌

trans = gdal.transformer(in_ds, out_ds, ) #

空白用於設定轉換器選項

success, xyz = trans.transformpoint(false, 0, 0) #

false基於源資料計算目標柵格,反之為true。起始座標為左上角 0,0

x,y,z =map(int, xyz)

#影象座標和現實世界座標之間轉換

trans =gdal.transformer(out_ds, none, )

success, xyz = trans.transformpoint(0, 1078, 648)

個人想法:

1.osr \ proj \ autocreatewarpedvrt 分別用於向量/點、柵格影象的投影轉換,柵格與前兩者有所不同。

2.getgeotransform是仿射變換,計算座標偏移。(現實世界座標(地理座標或投影座標)與影象座標行列號),其中geo[0/3]是現實世界座標而不是行列號。

3.gdal.transform本書中用於相同srs,不同柵格影象座標(行列號)偏移的計算。書中用於鑲嵌。

4.proj和osr都進行投影轉換(可用於地理座標和投影座標之間的轉換,是一種特例)。

5.計算柵格之間畫素(行列號)偏移,這和仿射變換引數有關,而不是投影轉換。

6.投影轉換用osr proj(向量)/autocreatewarpedvrt(柵格);geotransform用於相同srs影象座標和現實世界座標轉換;gdal.transformer用於相同srs,柵格影象

影象座標偏移,也可以計算影象座標和現實世界座標轉換

7.osr.coordinatetransformation是不同座標系的投影轉換;

而gdal.transformer是相同srs下,不同柵格影象之間的影象座標偏移(也可計算現實世界座標和影象座標之間的轉換)。

兩者可以組合使用,完成不同投影的柵格影象之間的影象座標偏移。

投影轉換 AE地理座標與投影座標轉換

是將wgs84地理座標轉換為wgs84utm投影座標,如果要轉換為西安80或北京54座標,則引數是 北京54座標 地理座標列舉值為 esrisrgeocstype.esrisrgeocs beijing1954 投影座標列舉值為 西安80座標 地理座標列舉值為 esrisrgeocs3type.es...

GDAL獲取投影座標系注意問題

gdal提供了獲取投影座標系的c函式gdalgetprojectionref以及對應的c 函式getprojectionref,但在獲取投影座標系之前需要設定通過cplsetconfigoption函式設定 gdal data 環境變數,例如 cplsetconfigoption gdal data...

使用GDAL進行RPC座標轉換

對於高解析度遙感衛星資料而言,目前幾乎都提供了有理函式模型 rfm 來進行影象校正 spot系列提供了有理函式模型之外還提供了嚴格軌道模型 對遙感影像進行校正目前最常用的就是使用有理函式模型來進行校正。有理函式模型的計算公式網上可以搜到,同時我之前的部落格中也有比較詳細的說明,可以參考這篇部落格 g...