Qgis開發7 座標系統CRS 設定和轉換

2021-06-24 18:24:03 字數 2827 閱讀 2328

qgis開發7-座標系統crs

設定和轉換

[email protected]

2023年8月24日

座標系統用於量化地圖的不同部分,是顯示、測量和地理運算的基礎。

每乙個gis都要面臨座標轉換的問題。乙個是裝置座標與邏輯座標之間的轉換,另乙個是不同的邏輯座標之間的轉換。

1)   如果從廣義上來講,是從硬體到軟體的轉換,預設兩者是1:1的。在qt中也進行了相應的轉換,可以直接獲取控制項的座標。

2)   從狹義上講,控制項的座標作為一種視口座標(viewport,區域性裝置座標),要與地理座標進行轉換。它們之間的轉換是gis的基礎。只有這一步設定正確了,才能進行比例尺、渲染、測試等量化操作。所以qgis最初的名稱為quantum gis,可能在座標轉換上也下一番功夫。

從視口到地圖的轉換,可以簡單的理解為兩種直角座標的對映,只是y方向不同。

是一種不同的座標系統之間的對映關係,可以是仿射變換,也可能會有其它變換,比較複雜。

qgs與地圖有關的所有設定通過qgsmapsettings指定。

使用當前mapcanvas設定的qgsmaptopixel由qgsmapcanvas::getcoordinatetransform()獲取。

視口作為畫素座標系統,需要提供當前控制項的大小範圍viewport,由qgsmapcanvas的viewport提供,對應qgsmapsettins::msize。

地圖範圍由圖層大小提供qgsmapsettings::mextent。

兩者進行比例執行生成圖元單位對映mmapunitsperpixel:這是所有運算的基礎。

由於圖層的寬高比與視口的寬高比可能不同,因此為顯示整個圖層,會將不夠的地圖使用背景色填充,圖層居中顯示。

由此產生乙個visibleextent:可視範圍。是按照地圖範圍設定後,按比例尺計算在當前視口的地圖範圍。此範圍對應qgsmapcanvas::extent()。

如果有多個圖層,則所有圖層的大小,會綜合產生乙個qgsmapcanvas::fullextent()。

可以直接生成一種正規的座標系統,或者自定義乙個座標系統。

為mapcanvas和layer指定座標系統。

如果mapcanvas::setcrstransformenabled(true),那麼每次重新整理顯示時,將自動進行座標轉換,將主視窗內不同於本視窗座標系統的圖層動態轉換為本視窗座標系統。

不同座標系統之間,可以進行幾何型別、指定點等座標轉換。座標轉換使用proj4進行。

使用proj4對應的座標系統,可以與qgis獲取相同的轉換結果。

f:\developware\ogc\proj\bld\bin>proj+proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6

378137 +b=6378137 +towgs84=0,0,0,0,0,0,0+units=m +no_defs

116 40

12913060.93    4865942.28

1)   新增座標轉換slot函式。

voidcrstransform(void);

2)   新增座標轉換的選單 action,並置於工具欄,在程式中將action與slot連線。

connect(ui->actioncrstransform,signal(triggered()),this,slot(crstransform()));
3)   進行座標轉換

/**
*

@brief

mainwindow::crstransform

*
*

transfrom

crsand

transform

point.

*

@author

[email protected]

*

@date

2014-08-24

12:22:55

*/
void

mainwindow::crstransform()

{
qdebug()<<"pkgpath="

="qgscoordinatereferencesystemwgs84(4326,qgscoordinatereferencesystem::epsgcrsid);

qdebug()<<"wgs84

="<

qgscoordinatereferencesystemweb(3857,qgscoordinatereferencesystem::epsgcrsid);

const

qstringstr=web.towkt();

qgscoordinatetransformtrans(wgs84,web);

qgspointptweb=trans.transform(116,40,qgscoordinatetransform::forwardtransform);

qdebug()<<"trans

116,40=

"<","

<

m_pmapcanvas->setdestinationcrs(web);

m_pmapcanvas->setcrstransformenabled(true);

m_pmapcanvas->setextent(m_pmapcanvas->fullextent());

m_pmapcanvas->refresh();

WP7 座標變換

在應用開發的過程中,有時需要使用到座標變換 平移,旋轉,縮放,三維變換等 wp7提供了一下幾種座標變換的方式 translatetransform 平移 rotatetransform 旋轉 scaletransform 縮放 skewtransform 傾斜 compositetransform ...

opengl學習 四 座標系統

總述 opengl希望在每次頂點著色器執行後,我們可見的所有頂點都為標準化裝置座標 normalized device coordinate,ndc 也就是說,每個頂點的x,y,z座標都應該在 1.0到1.0之間,超出這個座標範圍的頂點都將不可見。我們通常會自己設定乙個座標的範圍,之後再在頂點著色器...

2 座標系統和顏色變換

gdi 定義了三種形式的座標系統 世界座標系統 頁面座標系統和裝置座標系統 測量相當於文件區域左上角的位置和測量相當於螢幕 桌面 左上角的位置之間的區別非常重要,gdi 為它們指定了不同的名稱 gdi 在裝置繪圖表面 如螢幕 印表機 繪製圖形之前,圖形的座標系統要經過幾步變換 現在改變到頁面座標系統...