星期四, 12月 29, 2011

剛學NCL很多東西還搞不是很清楚,只好用TIP的方式。
跑海洋模式,大部份在繪圖時會用到岸線資料,所以寫一個能畫模式結果並顯示岸線資料是基本的工夫,如下圖。但如果不想繪岸線怎辦?


最簡單的想法是透過繪圖的順序,把岸線蓋掉。在NCL中,岸線是與CONTOUR畫在一起。控制繪圖順序的方式有PreDraw, Draw,  與 PostDraw。
PreDraw是最先畫的,Draw次之最後是PostDraw,所以讓岸線先畫,Contour後畫。不過還是得先找出控制繪圖順序的屬性,cnFillDrawOrder是contour的屬性;mpOutlineDrawOrder是map的屬性。在程式碼上加上下面二行屬性。
res@cnFillDrawOrder        = "Draw"
res@mpOutlineDrawOrder="PreDraw"
結果如果是沒有反應,那應該是我們用了rangs/gshhs 的高解析度岸線的關係…如果我們用了rangs/gshhs的岸線,有很多屬性會自動失效(手冊上寫的,別問我原因)…所以就不要用 rangs/gshhs的岸線檔就好了,改用預設值,就是把下面這一行註解掉就可以了。
;res@mpDataBaseVersion      = "HighRes"

結果岸線的確是變粗,不過還是沒有成功,主要是預設的邊界設定還沒關閉,再加上下面這一行:
res@mpFillBoundarySets="NoBoundaries"
結果就會如下圖一樣,看不到岸線…白色的地方是因為模式本身的mask所致。