GMT5 Tutorial

GMT5 教程 | 編者: Po-Chin Tseng

製作地圖(地理投影法)


目錄

  1. 總覽
  2. GMT介紹及安裝
  3. 網路資源及配套軟體
  4. 第零章: 基本概念及默認值
  5. 第一章: 製作地圖(地理投影法)
  6. 第二章: XY散佈圖(其他投影法)
  7. 第三章: 等高線圖及剖面
  8. 第四章: 地形圖與色階
  9. 第五章: 地震活動性與機制解
  10. 第六章: 向量與速度場
  11. 第七章: 台灣地理資訊
  12. 第八章: 直方、圓餅、三元圖
  13. 第九章: 三維空間視圖
  14. 第十章: 地質圖

5. 投影法

GMT在投影法方面,分成兩部份,如下圖,一部份是地理投影法,另一部分是其他投影法,

本章節將主要介紹地理投影法,其中又分成四個子部份,分別是:

5.1 目的

本章將學習如何繪製

  1. 麥卡托投影法(Mercator Projection)
  2. 蘭伯特正形圓錐投影(Lambert Conic conformal Projection)
  3. 等距方位投影(Azimuthal Equidistant Projection)
  4. 羅賓森投影法(Robinson Projection)

將依序利用這四種繪製台灣、美國、桃園機場的航線圖以及世界行政分區地圖。

5.2 學習的指令與概念

5.3 麥卡托投影(-Jm -JM)

首先可以從Google Map或是Google Earth抓出台灣的經緯度範圍,

使用十進制度小數的格式是由於數學計算上的方便以及GMT預設採用的座標表示法,關於經緯度表示格式之間的轉換關係, 可以參考WIKI百科。 請開啟命令提式字元(cmd.exe)或是終端機(terminal),開啟方式可參考4-1, 接著輸入下方指令:

gmt pscoast

會看到一連串關於pscoast的說明,如果你對各選項的意思已經了解,可以透過:

gmt pscoast -

你將只看到選項用法出現在影幕上。通常GMT指令的語法如下:

gmt 模組 (輸入檔) [-選項1 -選項2 -選項3 ...] > 輸出檔名.ps

簡單來說,先選定你要用的模組,給定輸入的資料,配合該模組底下的選項,來達到你要繪製的圖形, 而-開頭會被GMT視作選項,沒有-開頭則被當做資料,所以其先後順序沒差, 不過為養成好習慣,建議按照下面的範例來輸入每一行指令。

# 第1行
gmt psxy (輸入檔) -J -R [-選項1 -選項2 ...] -K  > 輸出檔名.ps
# 中間各行
gmt psxy (輸入檔) -J -R [-選項1 -選項2 ...] -K -O >> 輸出檔名.ps
                          .  
                          .  
                          .
# 最後1行
gmt psxy (輸入檔) -J -R [-選項1 -選項2 ...] -O >> 輸出檔名.ps

這樣的好處是,在debug時候,可以快速發現自己遺漏了哪個部份,而>>> 符號為輸出導向的符號,分別是「取代」與「累加」。

pscoast屬於比較特殊的模組,它可以用來畫海岸線、國界、河流等等的資訊,如果你在安裝GMT時有特別注意的話 你會發現在安裝GMT時,一同安裝的GSHHG資料庫,裡面包含上述的資訊,而pscoast會去調用此資料庫的資料, 因此不需要給定輸入檔,只需透過選項來調用需要的資訊。接下來,我們來看會用到的選項有哪些,中括號[]表示可選選項, 剩下的是必選選項。

選定好的範圍是119.0/123.0/21.5/26.0,預定地圖的寬度為15公分,海洋顏色為藍色,海岸線的寬度是1公分, 顏色及樣式則採用預設值黑色及實線,指令如下:

gmt pscoast -R119.0/122.5/21.5/26.0 -JM18 -S0/0/255 -W1 > 5_3_taiwan.ps

來看看結果的圖長什麼樣。

在預設紙張大小為A4的情況下,看到台灣北部並沒有被涵蓋在A4的紙張上,是什麼原因呢? 原來是因為GMT預設紙張方向是橫向(Landscape),如果要改成縱向(Portrait),需要加上-P這個選項。 再來是這海岸線的解析度也太粗糙了吧!我們可以透過-D這個選項來改善這問題,其解析成度分別是 詳細(full)、高度(high)、中度(intermediate)、 低度(low)、粗糙(crude),海岸線的解析度預設值是低度(l), 也可以透過自動(auto),依照地圖尺寸來決定海岸線的解析度。 接著陸地是白色,似乎有點單調,來試看看用-G英文單字,來更改陸地的顏色, 於是乎將指令改寫如下:

gmt pscoast -R119.0/122.5/21.5/26.0 -JM18 -S0/0/255 -Gspringgreen2 -W1 -Df -P > 5_3_taiwan.ps

看起來,這圖已經有點起色了,但好像還缺少點什麼,例如地圖比例尺(map scale)、 地圖方向標(map directional rose)、座標框架(map boundary frame and axes attributes)等等, 這些我們將在下一節提到。

5.4 蘭伯特投影(-Jl -JL)

美國幅員遼闊,經度橫跨約55度,且主要在中緯度,不適合使用麥卡托投影(-JM),因此這邊介紹蘭伯特投影法(-JL)。 與前一節一樣,先初步畫出美國的國土,給定範圍在-130/-66/24/52,但-JL的用法較不一樣, 它需要的格式是-JL中心點經度/中心點緯度/固定緯度線1/固定緯度線2/寬度,指令如下:

gmt pscoast -R-130/-66/24/52 -JL-98/35/33/45/25 -S0/0/255 -Gspringgreen2 -W1 -Df > 5_4_unitedstate.ps

其結果為

中心點的經度,表示該經度線為垂直線,而中心點緯度則不影響,兩條固定緯度線則請想像用圓錐去罩住一顆球, 當你罩的緯度範圍越大,越接近平面。接下來看看有什麼地方需要改善,

透過上述的選項,將這張美國地圖做了一些改善,包括省略面積500km^2以下的湖泊,加上經緯度外框、網格線、 比例尺、方向標,更改湖泊、河川的顏色,把墨西哥(MX)及加拿大(CA)國土變成灰色,以下是指令及成果圖。

gmt pscoast -R-130/-66/24/52 -JL-98/35/33/45/25 -A500 -BWESN ^
-Bxa10g10 -Bya10f5g10 -C104/210/223 -Df -EMX,CA+g210 ^
-Gspringgreen2 -N1/2,red -S0/0/255 -Lg-125/27+c27+w500+f+l"km" ^
-I1.5/1,41/143/194,solid -Tdg-70/27+w1.5+f2 -W1 -F+g255+r > ^
5_4_unitedstate.ps

應該注意到上面的指令,多出現了一種符號^。因為使用的選項很多,造成指令過長, 這時候就需要換行符號來告訴電腦,這指令編寫長度到這要進行換行,在Windows環境中使用^, Linux及MAC則使用\

5.5 等距方位投影(-Je -JE)

在這節開始之前,先介紹在Windows的環境下什麼是批次檔(.bat),或是在Linux或MAC環境下的shell scripts(.sh)。 主要的原因是:

編者在編譯此教程是預設在Windows環境底下,但為了處理資料方便,另外安裝了Gawk for Windows, 並把執行檔(bin)路徑加入系統環境變數下,設定方式可參考此網頁, 如果你熟悉使用Linux其他指令,也可以安裝Cygwin

回到本節重點,要利用等距方位投影法來繪製桃園機場的航線圖,首先要收集的是桃園機場的航班資訊, 利用在3.1提到的政府資料開放平台, 找到了桃園國際機場定期航班的資料檔(.csv),依照網頁上的欄位說明, 了解到第一欄為班機性質,本範例只選用客機起飛(PD)的資料,但這份資料缺少了各機場的經緯度資訊, 利用Google大神,找到了提供機場經緯度的資料,下載好airports.dat後, 透過Python(一種程式語言),將兩筆資料整理合併,完成後的檔案有5欄, 分別是流水碼、班機性質、目的地、緯度、經度,也整理了一份航線的資料檔給GMT用。 先來看成果圖及批次檔,再逐行說明。

使用的資料檔:

成果圖

批次檔

set ps=5_5_TPEairline.ps

gmt pscoast -Rg -JE121.2342/25.0797/12 -S0 -G50 -W.2,white -A1000 -K > %ps%
echo 40 -45 | gmt psxy -R -JE -Sa.8 -Gred -K -O >> %ps%
echo -80 20 | gmt psxy -R -JE -Sa.8 -Gred -K -O >> %ps%
awk "{print $5, $4}" TPE_airline.dat | gmt psxy -R -JE -Sc.15 -G159/174/229 -K -O >> %ps%
gmt psxy TPE_airline.gmt -R -JE -W.3,yellow -K -O >> %ps%

gmt pscoast -R40/-45/-80/20r -JE121.2342/15.0/12 -S0 -G50 -W.2,white -A1000 -X13.5 -K -O >> %ps%
awk "{print $5, $4}" TPE_airline.dat | gmt psxy -R -JE -Sc.2 -G159/174/229 -K -O >> %ps%
gmt psxy TPE_airline.gmt -R -JE -W.3,yellow -O >> %ps%

gmt psconvert %ps% -Tg -A -P

透過範例,學習到的新用法:

可以看到兩點的經緯度透過>分開,原來GMT會自動將>內的資料視為同一組,藉由此方式, 就輕鬆地完成兩機場之間的連線。psxy除了能畫符號,也能透過-W來繪製線。

透過繪製桃園機場的航線圖,學習如何利用批次檔來完成一張圖,往後都會以此模式來介紹不同的圖形繪製。

5.6 羅賓森投影法(-Jn -JN)

由羅賓森(Arthur H. Robinson)博士在1963年提出,此方法不等積、不等角,使用筆直的緯線及空間均勻分佈的經線, 加上對經緯度線乘上一個插值表,來實現視覺上平衡。本節將製作全球行政分區地圖, 透過pscoast -E+l > CountryCode.txt可以將各國的國碼及國名輸出成一個檔案,透過Python做了隨機排序及整檔, 輸出這次範例所需要的資料檔,但要如何利用這個檔案,幫不同國家上色呢? 本節將會使用到setlocal讓批次檔現可以接受一個選項引數, ENABLEDELAYEDEXPANSION啟用延遲環境變數擴充功能,來批次設定國家的顏色。讓我們來看成果及批次檔吧!

使用的資料檔:

成果圖

批次檔

set ps=5_6_globalNationalBoundary.ps

setlocal ENABLEDELAYEDEXPANSION
set vidx=0
for /F "tokens=2" %%A in (CountryCode.dat) do (
    set /A vidx=!vidx! + 1
    set var!vidx!=%%A
)
set var

set vidx=0
for /F "tokens=1" %%A in (CountryCode.dat) do (
    set /A vidx=!vidx! + 1
    set color!vidx!=%%A
)
set color

gmt pscoast -R-180/180/-79/90 -JN0/25 -W1 -Ba -K > %ps%
gmt pscoast -R -JN -E%var1%+g%color1% -K -O >> %ps%
gmt pscoast -R -JN -E%var2%+g%color2% -K -O >> %ps%
gmt pscoast -R -JN -E%var3%+g%color3% -K -O >> %ps%
gmt pscoast -R -JN -E%var4%+g%color4% -K -O >> %ps%
gmt pscoast -R -JN -E%var5%+g%color5% -K -O >> %ps%
gmt pscoast -R -JN -E%var6%+g%color6% -K -O >> %ps%
gmt pscoast -R -JN -E%var7%+g%color7% -K -O >> %ps%
gmt pscoast -R -JN -E%var8%+g%color8% -K -O >> %ps%
gmt pscoast -R -JN -E%var9%+g%color9% -K -O >> %ps%
gmt pscoast -R -JN -E%var10%+g%color10% -K -O >> %ps%
gmt pscoast -R -JN -A10000 -N1 -W.2 -S255 -O >> %ps%

gmt psconvert %ps% -Tg -A -P

透過範例,學習到的新用法:

顏色變數的設定用法與國碼相同,當這些變數都設置好後,就交給GMT來把圖畫出來吧!-JN中心經度/寬度, 將投影法設定為羅賓森投影法,剩下的指令或選項都以在前面各節描述。

5.7 習題

已經學過了四種不同應用方向的投影法,接下來,將有兩個習題,來熟習GMT的用法吧!

5.8 參考批次檔

列出本章節使用的批次檔,供讀者參考使用,檔案路經可能會有些許不同,再自行修改。


上一章下一章