GDAL座標轉換六參的使用方法

2021-08-28 07:08:53 字數 2642 閱讀 6462

gdal六參座標轉換是一種二維座標轉換的引數,常在gdaldataset 類中的cplerr setgeotransform( double* padftransform )使用;下面讓我們先來談論一下二維的仿射變換。

仿射變換變換公式:

展開形式:

x』,y』為目標座標,x,y為原始座標,dx,dy為平移引數。a為儲存用於繞(dx,dy)旋轉,和x,y方向的拉伸比例引數。

與gdal座標轉換六參的對應:

double *dfgeotransform = new double[6];

dfgeotransform[0] = dx;

dfgeotransform[1] = a11;

dfgeotransform[2] = a12;

dfgeotransform[3] = dy;

dfgeotransform[4] = a21;

dfgeotransform[5] = a22;

初始化時,a為2×2的單位矩陣,dx = dy = 0.0;

即dfgeotransform = ;

座標平移:

dx = dx + xtranslation;

dy = dy + xtranslation;

座標旋**

座標縮放:

下面來個示例:

#include "ogrsf_frmts.h"

#include "stdio.h"

#include #include using namespace std;

// 定義座標轉換器

class geotransform

~geotransform()

// 設定平移

void settranslate(const double dx, const double dy)

// 設定旋轉角度

void setrotate(const double dangle)

// 設定x,y方向縮放比例

void setscale(const double xscale, const double yscale)

// 轉換座標

ogrpoint transform(const double dx, const double dy)

private:

double dfgeotransform[6];

};int main()

ogrdatasource *pods;

const char* pszfilename="out.dxf";

pods = podriver->createdatasource( pszfilename, null );

if( pods == null )

ogrlayer *polayer;

polayer = pods->createlayer( "out", null, wkbunknown, null );

if( polayer == null )

ogrfeature *pofeature = ogrfeature::createfeature( polayer->getlayerdefn() );

// 原始矩形

ogrlinearring osquare;

osquare.addpoint(2.0,2.0);

osquare.addpoint(4.0,2.0);

osquare.addpoint(4.0,3.0);

osquare.addpoint(2.0,3.0);

osquare.closerings();

pofeature->setgeometry( &osquare );

if( polayer->createfeature( pofeature ) != ogrerr_none )

// 定義轉換器

geotransform geotransform;

// 平移

geotransform.settranslate(2.0,3.0);

// 旋轉

geotransform.setrotate(2);

// 縮放比例

geotransform.setscale(2.0,3.0);

// 轉換座標之後的矩形

ogrlinearring osquare2;

osquare2.addpoint(&geotransform.transform(2.0,2.0));

osquare2.addpoint(&geotransform.transform(4.0,2.0));

osquare2.addpoint(&geotransform.transform(4.0,3.0));

osquare2.addpoint(&geotransform.transform(2.0,3.0));

osquare2.closerings();

pofeature->setgeometry( &osquare2 );

if( polayer->createfeature( pofeature ) != ogrerr_none )

ogrfeature::destroyfeature( pofeature );

ogrdatasource::destroydatasource( pods );

}

使用GDAL進行RPC座標轉換

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

AfxBeginThread 的使用方法引數介紹

使用者介面執行緒和工作者執行緒都是由afxbeginthread建立的,mfc提供了兩個過載版的afxbeginthread,乙個用於使用者介面執行緒,另乙個用於工作者執行緒。使用者介面執行緒的afxbeginthread cwinthread afxapi afxbeginthread afx t...

CEGUI 使用方法 六

統一度量系統使用指南 注意 此教程僅適用於cegui 0.4.0 統一度量系統使得我們可以用相對部分和絕對部分共同來表示乙個座標或大小。這給視窗布局帶來了極大的方便。比如 你可以用相對尺寸來表示高度,使用絕對大小表示寬度,或者混合使用。統一度量系統共有三種形式 udim 簡單的一維 uvector2...