MATLAB地圖工具箱學習總結(三)地圖工具箱的基本知識

天靖居士發表於2016-05-16

MATLAB地圖工具箱學習總結(三)地圖工具箱的基本知識

MATLAB地圖工具箱學習總結系列:

(一)從地圖投影說起

(二)大圓和恆向線

(三)地圖工具箱的基本知識

(四)自定義投影

今天想要介紹的是一些比較基礎的函式。瞭解了這些函式,地圖投影的基本概念才能真正明白。而要想繼續研究MATLAB中有關地圖投影的函式,尤其是未來我要提到的投影檔案原始碼,知曉這些函式的功能必不可少。本篇文章將會羅列三個案例,並在後面一一進行講解。

1                    作業案例:地圖投影作業1

這次的案例從作業1開始。作業1是要求計算出地球橢球體的一些基本引數,包括子午圈曲率半徑、卯酉圈曲率半徑、平均曲率半徑和緯圈半徑等。當初我交上的作業完全是數學公式的堆砌,不過其實MATLAB中有相關的函式。

在這裡用到了三個函式,包括referenceEllipsoid, rcurve和rsphere,其中angle是輸入的角度。利用這兩個函式輕鬆就將以上四種橢球體的引數獲得了。

讓我們來分析一下程式碼。

首先需要介紹的是referenceEllipsoid(參考橢球體)函式。和這個函式相似的還有referenceSphere(參考球體)和oblateSpheroid函式,都是關於參考系的設定。函式括號中的引數也很明顯,分別是設定為WGS84座標系,單位是km.在進行地圖投影的計算前,設定好所需的參考橢球是必須的。MATLAB中包含了多種參考橢球,可以直接使用,只需要檢視函式幫助就可以了。

接下來要講得是rcurve函式。這個函式可以計算各種曲率半徑。其基本用法為:rcurve(propertyName,ellipsoid,lat).在上面案例中提到的三個引數分別是:transverse,用來計算卯酉圈曲率半徑;meridian,用來計運算元午圈曲率半徑;parallel,用來計算緯線圈半徑。只要接下來輸入所用參考橢球和緯度,即可計算出相應的引數。

最後要講一下rsphere函式。這個函式用來計算地球球體的半徑。它有多種計算方式,其中triaxial引數可以計算出平均曲率半徑。公式為sqrt(a*b),即幾何平均值。此外還包括authalic、euler等引數,具體形式請檢視幫助。

 

2                    作業案例2:地圖投影作業2

作業2的問題是,一個人從哪裡出發,先向東走,再向北走(過了北極後方向仍然不變),最終回到原點,且向東向北走的距離相同。其核心問題是求經線和緯線長度。還記得當時把一整長串積分公式好不容易錄入MATLAB,MATLAB向我報告積分太多算不了。後來改用了其泰勒展開式的一部分帶入進行計算,好在成功了。不過在本文裡我並沒有更好的解法。但我想借此機會介紹幾個函式。分別是departure,meridianarc,meridianfwd,distance,reckon。

departure函式的作用在於計算緯線的長度。其基本用法是departure(lon1,lon2,lat,ellipsoid),首先輸入兩條經線,再輸入緯度,帶入橢球體引數即可計算出相應緯線的長度。

meridianarc、meridianfwd函式剛好與departure函式相反,是用來求經線長度的。meridianarc的基本用法是s=meridianarc(phi1,phi2,ellipsoid),即只要輸入緯度即可算出它們間相隔的距離s。meridianfwd則和meridianarc互為正反算。其基本用法是phi2=meridianfwd(phi1,s,ellipsoid),即輸入一點經度,再輸入相隔的距離和橢球體,即可算出相對應的經度。需要注意到的是,這兩個函式都需要輸入弧度制的經度,所以一定要先轉換好再輸入。

以上三個函式的效果如下:

distance和reckon兩個函式都和距離有關。distance的基本用法是[arclen,az]=distance(lat1,lon1,lat2,lon2),很明顯,只要輸入兩個點的經緯度,即可獲得兩點間的距離。這個距離預設為大圓距離,當然也可以設定rh,求恆向線的距離。獲得的arclen即為距離,此外還可以獲得az,即兩點之間的方位角。reckon的基本用法是[latout,lonout]=reckon(lat,lon,arclen,az),這和distance剛好相反。輸入一個點的經緯度,距離和方位角,即可求出距離這個點相應距離和相應方位角的點。

 

3                    作業案例3:地圖投影作業7

在作業7中,老師要求我們每個人根據標準緯線,使用圓錐等角投影顯示各自家鄉的省份。我想在這裡提一提MATLAB中地圖投影最基本的組織原理。

在工具箱中,有一個mstruct的控制程式碼,這便是地圖投影組織結構。建立axesm後,使用命令:gcm就可以獲得當前的投影資訊。我們以墨卡託投影為例來看一下里麵包含了哪些結構。

當然不僅僅這些,下面還有很多屬性沒有列出。這裡面就顯示了axesm的各種屬性。而這些屬性我在本系列的第一篇中就提到了,雖然當時的我還沒有理解其中的原理。

對於屬性的設定,除了用axesm可以進行設定外,還可以分別使用getm和setm對屬性進行讀取和設定。getm就是讀取投影屬性,使用方法為:getm(gcm,propertyName),即輸入你想要了解的屬性即可。而setm則需要在propertyName後加具體的值,那麼地圖投影就會跟著改變。

其中有一個mapparallels是解決這道題的關鍵,這個屬性正是指的地圖投影的標準緯線。nparallels可以設定標準緯線的個數,當nparallels為1時,可以設定一個mapparallels,說明是切投影,兩個值的時候則是割投影。要注意的是,並不是所有的投影型別都支援設定該屬性,因此在使用前要確認這個投影是否能設定標準緯線。

 

不知不覺,當我寫到這個時候,地圖投影的課程已經結課了。最後的作業是自定義投影,也是花了我不少時間,不過還是做出來了。那麼,下一篇也就將是本系列的最後一篇了,希望能夠給使用MATLAB地圖工具箱的人帶來更多的幫助。

 

天靖居士

2016.5.16

8.17更新說明:具體程式碼請參考:https://git.oschina.net/kkyyhh96/MapProjectInMatlab

有關地圖工具箱其他文章,請參看:

MATLAB地圖工具箱學習總結系列:

(一)從地圖投影說起

(二)大圓和恆向線

(三)地圖工具箱的基本知識

(四)自定義投影

相關文章