地図に位置をプロットしたり、移動経路(ルート)を描画したい場合、グーグルマップ GoogleMapがよく利用されている。住所ないし緯度・経度を入力するとマーカーがプロットされる。
紙の地図をスキャンしたり、自由に使える白地図がないか探さなくても大体間に合うようになった。
自由に使える白地図、ベースマップがあると便利。
ある時(数年前のことだが)、GMTで海岸線を描く(pscoast)などして出力すれば良いことに気付いた。
その後、まもなくPython + Basemapライブラリの存在を知った。
ネック(障害)はPythonを使ったことがない点。Java、JavaScriptで止まったまま。でもあちこちで見かけるし、JavaScript同様、コンパイル不要のスクリプト言語か……。
試しにインストールして使ってみることにした。
以下のページを参考にした。
- matplotlib Basemap Toolkit documentation
(matplotlib.org/basemap/) - mwSoft basemapやcartopyで地図上でplot
(www.mwsoft.jp/programming/numpy/plot_map.html)
比較的短いコードで、いい感じに地図が描けた。
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
import numpy as np
fig=plt.figure(figsize=(10,10))
map = Basemap(projection='merc',llcrnrlat = 22.0,urcrnrlat = 48.0,llcrnrlon = 121.0,urcrnrlon = 151.0,resolution = "h")
map.drawcoastlines(linewidth=0.5,color='#000000')
map.fillcontinents(color = '#9acd32',lake_color='aqua')
map.drawmapboundary(fill_color='#7fffd4')
map.drawmeridians(np.arange(125,151,5),labels=[0,0,0,1],fontsize=12)
map.drawparallels(np.arange(25,50,5),labels=[1,0,0,0],fontsize=12)
base = "basejp.png"
plt.savefig(base)
plt.show()
以上○○○.py(ファイル名は任意)で保存し、コマンドラインから
python ○○○.py
と入力。
コードの(大まかな)意味は上から順に
Basemapライブラリを使う。
matplotlibライブラリのpyplotモジュールをpltという名で使う。
numpyライブラリをnpという名で使う。
図の大きさ 1000×1000 pixel。
メルカトル図法で北緯22°-48°、東経121°-151°の範囲を描画。
解像度はh(high)。高いほど描画に時間がかかる。
f(full) > h > i(intermediate) > l(low) > c(crude)。
海岸線を描画。
陸地と湖沼を塗りつぶし。北緯45°の大きな湖はハンカ湖。
残りの背景(=海洋)を塗りつぶし。
経線を5°間隔で描画 + ラベル。
緯線を5°間隔で描画 + ラベル。
basejp.png(ファイル名は任意)に保存。
matplotlibのビューアに描画。
あとは範囲を変えるなどすれば自在に白地図、ベースマップを作ることができる。
積年の懸案が解消された。