c++直角坐標系與極坐標系的轉換_一篇閱讀量高達2百6十多萬的關于坐標系和投影的相關知識探討...

57876d2aebb5853a2ddfafcbfcf02d43.gif

本文轉載于CSDN作者rsyaoxin

這是一篇關于坐標和投影的「神文」截止目前瀏覽量已達2698239

是相關文章中不可打破的神話...

文末有本文作者推薦的

兩款坐標轉換的小工具下載鏈接

回想一下,接觸遙感專業也有幾個年頭了,而現在越來越偏離遙感了,突然想著把自己腦中的遙感知識整理出來。首先想到的便是坐標系和投影,我想這個東西困擾著80%以上的測繪、遙感和GIS領域的從業人員吧,經常有人問,我自己曾經也很迷糊,什么大地坐標系啊、地心坐標系啊、高斯投影啊、UTM投影啊,搞得頭都大了,可是這玩意又不能不玩,畢竟空間信息是遙感數據的靈魂,如果定位不準影像就只能當風景畫看了。好吧,那就啃吧,基礎的東西還是要的,經過一番探索,再加上去年專門做過坐標轉換一些工作,算是清晰明了些了,在此就把我的一些見解分享給大家,歡迎各位菜鳥和專家前來吐槽。好了,咱們言歸正傳,開始坐標系探險記。

1、什么是坐標系?

? ? ? ? 或許很多人心中明白這個概念,卻又不甚明白。什么是坐標系?人們描述空間中的一個點或者一個位置,通常會采用坐標這個概念。可是這個坐標該怎么計算呢?它的參考是誰呢?如果中國定義中南海坐標是(1921,1949,2012),美國佬也定義他們白宮的坐標是(1921,1949,2012),哪天黑馬說咱們打它中南海一炮吧,那就可能把他自己烤熟。所以必須要建立一個合理的坐標系(⊙﹏⊙b汗~~,這個理由好牽強啊)。

? ? ? ? 坐標系由原點和坐標軸組成。坐標系種類很多,我們大家在數學中想必都學過笛卡爾坐標系、極坐標系、球面坐標系和柱面坐標系吧,在地學領域,用到最多的是平面坐標系、空間直角坐標系(前兩者屬于笛卡爾坐標系)和球面坐標系。比如說一個點坐標是(-2850017.472,4690744.523,3237959.973)就是指空間直角坐標,而我們經常看到的Google Earth上的點的坐標(37°20′17″N,112°33′20″E)就是指球面坐標。

? ? ? ? 測量學上,坐標系怎樣定義的呢?地球是一個不規則的類橢球,怎樣用嚴格的數學方式表示它,應該是測繪學家們所追求的高峰。為了表示地球上每一個點的位置,是不是要建立一個統一的世界坐標系呢?建立坐標系是不是要確定坐標原點和坐標軸呢?那怎樣建立呢?測量學家們把地球當作一個規則的橢球來處理,這下就好辦多了,橢球中心就原點唄,長軸短軸就作為坐標軸,這樣一個坐標系就出來了啊。可是有人會問,那這個橢球怎么表示呢?嘛嘛的,我也想問,原來這是科學家們利用天文觀測得到的,而且不同的科學家得到的橢球還不一樣,比如,一個叫Krasovsky的人搞了個克拉索夫斯基橢球,還有人搞了什么IUGG-1975、WGS-84、GRS80橢球,他們主要特點是長半軸和扁率不同。可是又有人會問(Y的,問題好多啊),搞這么多橢球干嘛,有一個不就行啦。呵呵,我們知道,地球坑坑洼洼的,用嚴密的橢球來表示肯定有誤差,有的國家為了使自己的國家與橢球面吻合(最好大家都站在橢球面上),這樣根據各自的情況就定義了不同的參考橢球,比如北京54坐標系就采用了蘇聯老大哥的克拉索夫斯基橢球。可是問題又來了,怎樣才算吻合得好呢?肯定會有人站在橢球面上,有人站在橢球面下,真頭疼。此時,測量學家們引入了大地基準面來衡量橢球與大地的吻合度。大地基準面是由大地水準面而來,是指平均海平面延伸到大陸得到的一個封閉曲面。比如,在建立北京54坐標系時,專家們肯定會選擇與中國的大地水準面吻合比較好的橢球。此時的橢球稱為參考橢球,建立的坐標系稱為參心坐標系,我國的北京54和西安80坐標系都是參心坐標系,是一種局部范圍的坐標系。然而這種坐標系對于全球定位來說極其不便,誤差很大,所以山姆大叔率先針對GPS系統設計了全球大地坐標系WGS-84坐標系統,這時的大地原點不再是參考橢球的中心,而是地球的質心。WGS84橢球體的相關參數和WGS84坐標系的坐標軸指向請參考相關專業書籍。我國現有的國家2000坐標系也是一種全球大地坐標系,其與WGS-84坐標系稍微有點差異。

下面是幾種常見坐標系的橢球參數:

8f40e420bebee02922a8702196171327.png

其中北京54坐標系和西安80坐標系是參心坐標系,而WGS-84坐標系與國家2000坐標系是地心坐標系,坐標原點是地球質心。

? ? ? ?好啦,這樣大家明白了坐標系的定義了吧,首先,需要定義參考橢球體,有了參考橢球還需要大地基準面(全球大地坐標系就不要了),然后需要定義坐標系原點和坐標軸的指向。這樣一個坐標系就建立了,以后找妹子就方便多了,全球定位吧,哈哈!

2、為什么要投影?

? ? ? 大家會想,有了坐標就行了,為什么還要搞個讓人迷糊的投影?呵呵,前面我們講到的是以橢球體為參考來進行空間定位,一點都不直觀,如果哪天你和妹紙約會,妹紙說她在(-2850017.472,4690744.523,3237959.973)或者(112°E,38°N),尼瑪坑爹,這到底在哪個國家,離哥哥我有多遠啊,不知道啊,不至于拿個尺子去測吧。這時候,泡妞高手們想出了一個辦法,把球面投影到一個平面,用一個平面坐標(x,y)來表示地面點的位置,兩點之間求距離是不是很容易啊?這時候你會發現那個妹子不就是隔壁那妞嘛,200米不到(囧!哈哈)。當然,投影最大的目的不是方便把妹紙,而是地圖。所以投影就是把球面坐標轉化為平面坐標,也就是3D到2D的轉換。

? ? ? 投影有很多種,按性質分,比如等角投影,等積投影,等距投影,任意投影等。大家都知道,球面展開成平面,肯定是一個不嚴密(也可說不完美)的過程,會有不同程度的變形。如何選擇呢?比如在航海上,就需要等角投影,如果方向錯了就會差很多,我猜如果哥倫布那時知道這些就不會跑到美洲還以為到了印度吧。如果需要丈量面積,那就要選擇等積投影了。

3、測量坐標有哪幾種表示方式?

? ? ? 常見的測量坐標包括大地坐標(B、L、H)、空間直角坐標(X、Y、Z)、平面坐標(x、y、H)。具體參考相關教程。

4、坐標轉換

? ? ? ?終于講到重點了,各種坐標怎樣轉換是大家最關心的。首先有一點要牢記:

? ? ? ?同一參考橢球下,大地坐標與空間直角坐標之間的轉換是嚴密的(數學關系對應),它們與平面坐標的轉換是不嚴密的,需要做投影轉換(想想也明白,把球面展成平面那可是難住了好多科學家呀)。而不同參考橢球之間的坐標轉換永遠都是非嚴密的。

? ? ?坐標轉換原理:

  • 同一橢球下的轉換

? ? ? ??同一橢球下,大地坐標(B、L、H)與空間直角坐標(X、Y、Z)之間的轉換是嚴密的,其公式為:

bd9d37b1f4d2f3b1ffa0fb23836ee74b.png

? ? ? ? ?而大地坐標(B、L、H)與空間直角坐標(X、Y、Z)向平面直角坐標的轉換屬于非嚴密的,需要進行球面到平面的投影選擇,通常將空間直角坐標轉換為大地坐標,然后在大地坐標和平面直角坐標之間采用高斯正算和反算公式進行計算。

  • 不同橢球下的轉換

? ? ? ??不同參考橢球下的坐標轉換實質是基準的轉換。如空間定位技術所采用的全球基準與地面網所采用的局部基準間的轉換。通常的轉換模型有布爾莎-沃爾夫模型和莫洛金斯基模型。這兩種模型都常用且非常相似,布爾莎模型在進行全球或者較大范圍內較為常用,但是莫洛金斯基模型可以克服布爾莎模型中旋轉參數與平移參數相關性高的問題。

? ? ? ??兩個坐標系的轉換通常有三維七參數模型和二維四參數模型。

? ? ? ? 布爾莎模型又稱為七參數轉換,或者七參數赫爾默特變換。該模型共采用7個參數,分別為三個平移參數(ΔX、ΔY、ΔZ)和三個旋轉參數(ωx、 ωy、ωz)和一個尺度參數k。

34ff6d58ba38e2cdfe9bccf912334aa1.png

? ? ? ?上式是一個WGS84下的空間直角坐標轉換到CGCS2000下的空間直角坐標的布爾莎模型,有七個未知參數,簡單的求解,只需要3個公共點就可以了,如果要得到嚴密解,就需要更多的公共點進行最小二乘平差解算。而對于大地坐標,可以轉成空間直角坐標再解算,也可以直接利用布爾莎模型。

5、遙感制圖的投影和坐標系選擇

? ? ? ? 關于遙感影像的坐標系和投影,大家經常會聽到所謂的地理坐標系(Geographic ?coordinate ?system)和投影坐標系(Projection coordinate system)的概念。打開Arcgis的坐標系文件夾也會發現這兩個子文件夾。地理坐標系是以經緯度表示的,是一種球面坐標系,而投影坐標系是米或者千米等為單位的,是一種以xy表示的平面坐標系。下面是Arcgis中兩種坐標系的定義:

2e7a29914d09053ac3b19358c3676285.png

(a) 地理坐標系??

29fe99b7f7fb285a1b11e99559efeab2.png

?(b)投影坐標系

? ? ? ??上圖中的左圖a是WGS-84下的地理坐標系,我們可以看出它定義了一個WGS-84橢球體,然后是WGS84下的基準面。有了Spheroid和Datum就可以使用地理坐標系了。右圖b是西安80坐標系下的投影坐標系,投影方式是高斯-克呂格投影。可以看出,它除了Gauss-Kruger投影參數外,還定義了Xian-1980地理坐標系。

? ?有人會問,為什么投影坐標系要帶一個地理坐標系呢?我們知道投影本質就是把球面投影到平面,那么投影就必須定義是用哪個球面坐標系來投影。比如UTM投影坐標系,我們熟知的是WGS84坐標系來投影,其實我們也可以用國家2000坐標系來投影,就我所知,在月球探索過程中,人們也用到了UTM投影,而這時用來投影的坐標系就是月球坐標系了。

我國常用地圖投影的選擇:

? ?在我國,大中比例尺(≥1:50萬)的地圖一般選擇高斯-克呂格投影,高斯-克呂格投影有3°和6°分帶兩種,1:2.5萬-1:50萬比例尺地形圖采用經差6度分帶,1:1萬比例尺的地形圖采用經差3度分帶。小比例尺的地圖(比如全中國地圖)應采用等角正軸割圓錐投影,也就是蘭勃特投影(Lambert Conformal Conic),但是小比例尺海圖多選擇等角正軸圓柱投影,也就是墨卡托投影。另外我們平時下載的遙感影像大都是WGS-84下的地理坐標系或者UTM投影坐標系。

? ? ?下面就一個例子具體說下地理坐標系到投影坐標系的轉換(投影的選擇):

? ? ?比如:北京的中心經緯度大致在(117°E,40°N),那么其在北京54投影坐標系下6°分帶就應該選擇Beijing 1954 GK Zone 20.prj或者Beijing 1954 GK Zone 20N.prj(后者會在橫坐標前加上帶號),中央經線=帶號(比如20)*6-3。而在西安80投影坐標系下6°分帶應該選擇Xian 1980 GK Zone 20.prj。北京地區的遙感影像的UTM投影一般會選擇WGS 1984 UTM Zone 50N,因為Zone為20*6-3的中央經線為117,左114,右120,正好覆蓋北京,而東半球要加30(全球360/6共60個Zone)所以是50N,N表示北半球。此外,需要說明的是,跨帶投影會造成較大的變形。很多人下載全球的植被圖、夜間燈光圖等,想要裁剪出自己需要的區域,原始數據往往是WGS84下的地理坐標系,而矢量數據多是UTM或者TM等投影坐標系,這時需要將矢量數據轉換到地理坐標系再去裁剪,如果反過來將全球圖去投影,會發現變形得很難看。

6、推薦一些好用的坐標轉換工具

(1) 坐標轉換工具:用過很多坐標轉換工具,也自己寫過,現在給大家推薦一款:GPS工具箱,發現它很容易用,精度也不錯,這是下載地址:在文末。可能大家平時會用的比較多的是Coord這個軟件,但是我發現它結果老是不對,下面是幾個軟件的比較,第一個是GPS工具箱,第二個是我自己寫的一個小軟件,第三個是Coord,結果明顯不對,不知道是不是我下載的Coord有問題。

ac72d3273cb4ae94be4ffa9b9371bd5d.png

230433d386f75f87e07054c5f75de749.png

19eb5fd604d96b413bbe623ca8a08145.png

(2)開源坐標和投影轉換庫:Proj4。它的功能主要有經緯度坐標與地理坐標的轉換,坐標系的轉換,包括基準變換等。這是官方網站:http://trac.osgeo.org/proj/,可以下載到源碼和文檔,源碼是C++所寫,需要編譯才能集成到你的程序使用。

公眾號對話框發送

613

獲取兩款坐標轉換工具的下載鏈接

- END -

現有測繪成果轉換到2000國家大地坐標系統指南

2000國家大地坐標系轉換技術培訓(含DLG,DOM,DEM,DRG轉換方法及后處理)

一篇非常詳細的坐標系統學習PPT,值得學習!坐標問題不再頭疼

墨卡托、高斯-克呂格、UTM...這些投影的小知識你真的知道嗎?

0b4edabc653d284e8c3e0313b4faa504.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/276600.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/276600.shtml
英文地址,請注明出處:http://en.pswp.cn/news/276600.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

c# xmlhttp POST提取遠程webservice數據

public string cancel(string StudentID,string Mobile){string datanull;data "<?xml version1.0 encodingutf-8?><soap:Envelope xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xmlns:xsdhttp://www.w3.org/2001/XMLSchema xmlns:soaphttp://schemas.…

Javascript實現的左右滑動菜單

原文鏈接&#xff1a;http://www.cnblogs.com/miqi2214/archive/2009/04/28/1445308.html Javascript實現的左右滑動菜單 先看Demo便于理解&#xff1a;請大家往這里看 業務需求&#xff1a; 1. 菜單個數不固定&#xff0c;當菜單個數長度小于給定范圍寬度&#xff0c;則左右移…

查詢用戶分配角色TCODE

s_bce_68001419 轉載于:https://www.cnblogs.com/yangliang/archive/2009/04/13/1434862.html

query string parameters什么意思_public static void main(String[] args) 是什么意思?(轉)...

public static void main(String[] args)&#xff0c;是java程序的入口地址&#xff0c;java虛擬機運行程序的時候首先找的就是main方法。一、這里要對main函數講解一下&#xff0c;參數String[] args是一個字符串數組&#xff0c;接收來自程度序執行時傳進來的參數。如果是在控…

經典算法:位圖排序

最近發現一個有趣的排序算法&#xff0c;通過位圖來完成排序。位圖排序其實就是基數排序&#xff0c;只不過位圖排序的下標是比特位。 問題描述 輸入&#xff1a;一個最多包含n個正整數的文件&#xff0c;每個數都小于n&#xff0c;其中n10^7。如果在輸入文件中有任何正數重復出…

PHP中刪除目錄的三種方法

原文鏈接&#xff1a;http://www.chinaz.com/program/2008/1022/41645.shtml PHP中刪除目錄的三種方法 1、遞規法&#xff1a;利用遞歸一層一層的刪。 deleteDir(&#xff04;dir) { if (rmdir(&#xff04;dir)false && is_dir(&#xff04;dir)) {if (&#xff04;d…

b樣條曲面繪制 opengl_CAD制圖軟件中如何利用EXCEL輸入坐標繪制曲線?

當在使用浩辰CAD制圖軟件繪制圖紙的過程中&#xff0c;經常要繪制由多個坐標點連接成的曲線時&#xff0c;有什么方便快捷的方法嗎&#xff1f;那當然是有的。利用EXCEL表格保存數據并與CAD制圖軟件巧妙地結合起來&#xff0c;就能很容易地畫出曲線。下面給大家詳細介紹一下吧&…

根據進程名殺掉進程

foreach (System.Diagnostics.Process pro in System.Diagnostics.Process.GetProcesses()){if (pro.ProcessName "Bss"){pro.Kill();break;}} 轉載于:https://www.cnblogs.com/wolfcool/archive/2009/04/17/1438284.html

JavaScript 操作 Cookie

從事web開發也有些日子了&#xff0c;cookie 是個啥差不多能說明白&#xff0c;可是實際自己一上手操作就是得去搜索(你們懂的)&#xff0c;結果被鄙視了...所以就寫一篇博文做為自己的學習筆記&#xff0c;嘿嘿&#xff0c;博客的好處在此體現出來了。 什么是 Cookie “cookie…

阿里云服務器購買該如何選擇?阿里云服務器購買步驟流程介紹...

很多第一次購買阿里云服務器&#xff0c;不知該如何選擇適合自已的服務器。其實購買阿里云服務器&#xff0c;主要是根據自已網站的流量來決定的。如果網站流量不大&#xff0c;一天只有幾百ip&#xff0c;一般選擇1核cpu&#xff0c;1G內存&#xff0c;1MB帶寬就可以用了&…

python 切片_全面解讀Python高級特性切片

大家好&#xff0c;歡迎來到Crossin的編程教室&#xff01;眾所周知&#xff0c;我們可以通過索引值(或稱下標)來查找序列類型(如字符串、列表、元組…)中的單個元素&#xff0c;那么&#xff0c;如果要獲取一個索引區間的元素該怎么辦呢&#xff1f;切片(slice)就是一種截取索…

十大Web網站漏洞掃描工具

原文鏈接&#xff1a;http://zhumeng8337797.blog.163.com/blog/static/1007689142012819111054920/ 1. Nikto 這是一個開源的Web服務器掃描程序&#xff0c;它可以對Web服務器的多種項目(包括3500個潛在的危險文件/CGI&#xff0c;以及超過900個服務器版本&#xff0c;還有250…

讀書筆記(06) - 語法基礎 - JavaScript高級程序設計

寫在開頭 本篇是小紅書筆記的第六篇&#xff0c;也許你會奇怪第六篇筆記才寫語法基礎&#xff0c;筆者是不是穿越了。 答案當然是沒有&#xff0c;筆者在此分享自己的閱讀心得&#xff0c;不少人翻書都是從頭開始&#xff0c;結果永遠就只在前幾章。對此&#xff0c;筆者換了隨…

最近做了一個安裝包的安裝流程圖

最近到做安裝包的詳細設計。下圖是安裝包的流程圖&#xff0c;如果有什么意見和建議&#xff0c;希望大家給我留言&#xff0c;大家以前討論 轉載于:https://www.cnblogs.com/zengshengping815/archive/2009/04/22/1441319.html

如何使用Nikto漏洞掃描工具檢測網站安全

轉載鏈接&#xff1a;http://www.linuxidc.com/Linux/2011-02/32000.htm 【51CTO.com 獨家特稿】隨著信息技術的發展&#xff0c;網絡應用越來越廣泛&#xff0c;很多企業單位都依靠網站來運營&#xff0c;正因為業務的不斷提升和應用&#xff0c;致使網站的安全性顯得越來越重…

什么是區塊鏈預言機(BlockChain Oracle)

預言機 Oracle 是區塊鏈中非常重要的一個功能&#xff0c;但我發現很少有人討論&#xff0c;也可能很多人對此并不了解。而網上關于預言機的文章很少&#xff0c;很多也沒有講明白&#xff0c;甚至有些還是錯誤的。所以我整理了一篇詳細的文章&#xff0c;分享給大家&#xff0…

idea tomcat啟動成功但是訪問方面都是404_IDEA相關配置【集成Tomcatamp;項目部署】...

“知其然知其所以然”始終是Brick我學習新興技術的出發點&#xff0c;那么咱們來聊聊以下幾個問題問題1&#xff1a;在編寫完web項目之后&#xff0c;我們怎么才能運行項目呢&#xff1f;--需要部署項目到Tomcat上。問題2&#xff1a;部署項目到Tomcat服務器有多少種方式&#…

程序員素質面試題

技術題做完后&#xff0c;先檢查技術是否合格&#xff0c;技術合格的并非就一定是合適人選&#xff0c;還要做素質面試。 如下是小y出的面試題&#xff1a; &#xff08;上進心&#xff09;1.你的職業規劃是怎樣的&#xff0c;未來兩年想朝哪個方向發展&#xff1f; &#xff0…

用U盤或移動硬盤安裝Windows7 (超簡單制作Win7安裝U盤方法)

轉載鏈接&#xff1a;http://www.iplaysoft.com/win7-usb-dvd-download-tool.html 最近很多人想要安裝 Windows7 &#xff0c;下載回去后的ISO鏡像文件很多人都是使用 Nero 或 IMGBurn 等工具刻錄成光盤來安裝的。但實際上&#xff0c;不需刻盤安裝Win7的方法還是有不少的。…

安裝pywin32時:ImportError: DLL load failed: %1 不是有效的 Win32 應用程序和 DLL load failed...

問題一&#xff1a;ImportError: DLL load failed: %1 不是有效的 Win32 應用程序 import pywinapi報錯:ImportError: DLL load failed: %1 不是有效的 Win32 應用程序 原因&#xff1a;與python版本不對應 pypi官網上下載whl文件,我的python 版本為27 下載第一個后安裝 下載文…