MATLAB地圖工具箱學習總結(二)大圓和恆向線

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

MATLAB地圖工具箱學習總結(二)大圓和恆向線

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

(一)從地圖投影說起

(二)大圓和恆向線

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

(四)自定義投影

今天要和大家談一談大圓、恆向線航道的畫法。還是先從案例開始說起,再分別介紹相關的函式。

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

在作業6中,李老師要求我們畫出兩點間的大圓航線、恆定線航線和兩者混合的航線。我一開始沒有找到gcwaypts函式,導致自己花了一點時間編寫了一段程式碼實現,但效果並不好,存在誤差。後來找到了神奇的gcwaypts函式,一切也就迎刃而解。在本文中,我將會把兩種方法都簡單介紹一下。

首先是gcwaypts的演示事例,原始碼和效果如下圖所示:

landareas=shaperead('landareas.shp','UseGeoCoords',true);
axesm('mercator','Frame','on','Grid','on','origin',[0 120 0]);
geoshow(landareas,'FaceColor',[1 1 .5],'EdgeColor',[.6 .6 .6]);
[pointlat pointlong]=gcwaypts(40,120,37,-122,3);
geoshow(pointlat,pointlong)
pointTrack=track2('gc',40,120,37,-122);
plotm(pointTrack);

接下來是我自己寫了一個簡單的指令碼,主要應用了track2函式.

思路如下:由於track2函式生成了一串點集(預設為100個),當然,track2函式還可以自己設定點的數目,點數越大自然誤差越小。根據輸入的段數,根據陣列分別求出每一段起始點的座標,再依次連線即可。不過生成的路徑略有偏差。

從上面兩幅圖也可以看出,雖然後者有誤差,但誤差並不大。

接下來我就要講講相關函式的用法了。

2                    track1和track2函式的用法

track1和track2這兩個函式都可以用於描繪軌跡。獲取的是一串點集,而通過連線點集即可描繪出具體的軌跡。

(1)          track1的基本用法:track1(lat,lon,az,arclen)

其中,lat,lon分別代表起始點的經緯度座標,az代表軌跡的方位角,arclen代表的是距離,單位為角度,也可以是一個角度範圍[a b]從a度到b度

[lattrkgc,lontrkgc]=track1(0,0,45,[-55 55]);
plotm(lattrkgc,lontrkgc,'g');

(2)          track2的基本用法:track2(lat1,lon1,lat2,lon2)

其中,lat1,lon1,lat2,lon2分別是起始點和終止點的經緯度。

(3)          'gc'和'rh':在track1和track2中都可以看到這樣兩個引數,其實也很好理解,'gc'是大圓,'rh'是恆向線,只要在一開始宣告,最後的軌跡即為所需要的。

(4)          trackg的用法:trackg可以通過互動計算建立大圓。在命令列輸入後只需要在地圖上點選相應的位置,設定起始終止點,即可自動畫出大圓線。倘若畫完之後,按住shift點選航線,可以自動跳出下圖對話方塊,可以調整航線的一些引數。

3                    gcwaypts函式的用法:

gcwaypts是解決本文開始的案例最佳的方案。其功能正是在大圓上尋找等距航線。其基本用法是:[lat lon]=gcwaypts[lat1,lon1,lat2,lon2,nlegs],其中lat1~lon2四個引數分別代表的是航線起始點的經緯度座標,nlegs代表了航線將分成幾段。讓我們再來返回到最初的案例,分析一下程式碼。

landareas=shaperead('landareas.shp','UseGeoCoords',true);
axesm('mercator','Frame','on','Grid','on','origin',[0 120 0]);
geoshow(landareas,'FaceColor',[1 1 .5],'EdgeColor',[.6 .6 .6]);
[pointlat pointlong]=gcwaypts(40,120,37,-122,3);
geoshow(pointlat,pointlong)
pointTrack=track2('gc',40,120,37,-122);
plotm(pointTrack);

其中起始點設定為靠近北京的地區,終止點設定為舊金山地區,將航線分為3段,那麼最後就顯示出了等距航線。


今天關於MATLAB的問題就說這麼多,這篇文章也是拖了兩週才最終完成。

在接下來的地圖投影課程中題目也是越來越難啦。不過博主會加油爭取把所有的相關知識點都講清楚上傳的!

天靖居士

2016.5.9

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

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

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

(一)從地圖投影說起

(二)大圓和恆向線

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

(四)自定義投影

相關文章