2022年10月2日 星期日

再為雲圖上加上海岸線和經緯度線

延續前一篇文章,使用pyresample轉換了衛星雲圖的投影。接下來要在圖上加上海岸線和經緯線。

from PIL import Image
import numpy as np
import pyresample as pr
from pycoast import ContourWriterAGG
import aggdraw
Source_def = pr.load_area('Table/Projection.proj','KoChi_1800') # 原始FDK資料的投影
Image_def = pr.load_area('Table/Projection.proj','LCC_1000')  # 輸出圖檔的投影
PGMIR1='HMW822090416IR1.pgm'
cntS = np.fromfile(PGMIR1,dtype='uint8')
dsize=1800
arraysize=dsize*dsize
cntS = cntS[-arraysize:]
cntS = cntS.reshape((dsize,dsize))
RoI = 5000 # 取樣之影響半徑
Cnt = pr.kd_tree.resample_nearest(Source_def, cntS, Image_def, radius_of_influence=RoI)
Img = Image.fromarray(Cnt,'L')
Img_new=Img.convert('RGB') #把灰階的Img轉換成RGB的Img_new

前面這些程式碼先把要輸出的圖準備好,注意,要把圖轉換成RBG的格式,否則海岸線和經緯線也會是黑白的。

要完成這件事情要準備一些東西。首先要下載gshhg提供的shape file,依照範例程式,解壓縮的shape file放在Table/gshhg-shp-2.3.7資料夾內。再來隨便找一個字型檔,範例程式用的是LiberationMono-Regular.ttf。

繪海岸線需用到pycoast這套件中的ContourWriterAGG,字型則是用到aggdraw。

ShapePath = 'Table/gshhg-shp-2.3.7'
cw = ContourWriterAGG(ShapePath)
cw.add_coastlines(Img_new,Image_def,resolution='l',outline=(255,0,0),width=2) #畫紅色的海岸線
ttfFile = 'Table/LiberationMono-Regular.ttf'
font = aggdraw.Font('white',ttfFile)
cw.add_grid(Img_new,Image_def,(20,20),(10,10),font,outline=(0,0,255),width=3) #畫藍色的經緯線,20度畫一條,10度一格次網格。
Img_new.show()

最後的結果

沒有留言:

張貼留言

用matplotlib畫衛星雲圖

用另外一種方式畫衛星雲圖。這方法式結合了matplotlib、pyresample和cartopy 使用viridis這個色階畫出來長這樣。