2017.02.04 Sat |

Maximaによる世界地図の描画

world3d_simple2

1月30日の記事で無料の数式処理システムMaximaを紹介しましたので,今回はMaximaを使ってみたいと思います.

Maximaには様々なパッケージが用意されています.数式処理システムなので,数式処理や数値計算に関するパッケージもいろいろありますが,パッケージの中には,”worldmap“という世界地図を扱うものもあります.パッケージworldmapでは描画ソフトのgnuplotを用いて2次元の地図3次元の地図を描画できます.

Maximaを開いたらまずパッケージworldmapを読み込みます.
load(worldmap)$

2次元の地図の描画はdraw2dを用います.例えば,ユーラシア大陸の海岸線を描画するときのコマンドは,
draw2d(geomap(Eurasia_coastlines))$
となります.geomapというコマンドで海岸線を与えるリストを取得します.実行例は次のようになります.
worldmap2d_eurasia

3次元の地図の描画はdraw3dを用います.例えば,ユーラシア大陸の海岸線を描画するときのコマンドは,
draw3d(geomap(Eurasia_coastlines))$
となります.実行例は次のようになります.
eurasia

続いては,もう少し複雑な地図を描こうと思います.

[2次元の世界地図]
全ての国境を描くには,geomap(makelist(k,k,0,2800))というコマンドで全ての国境のリストを取得します.コードは,

arg:[
color=black,
geomap(makelist(k,k,0,2800)),
grid=true
]$
apply(draw2d,arg)$

となります.リストargの1つ目の要素で海岸線の色を指定し,3つ目の要素で格子の表示をさせています.applyコマンドでリストargをdraw2dに適用しています.
worldmap2d_simple

2次元の描画ではfill_colorコマンドで各国を塗りつぶすこともできます.各国のインターネット利用率(2014年)を,0~20%は青20%~40%は緑40%~60%は黄60%~80%はオレンジ80%~100%は赤で表現してみました(データの出典:総務省統計局「世界の統計 2016」).塗りつぶされていない国はデータのなかった国です.
worldmap2d

[3次元の世界地図]
まずは,地球儀のように,緯線・経線を描き,各国の国境を描いてみます.コードはこちらです.

d2r:%pi/180$
draw3d(
surface_hide = true,
color = gray,
parametric_surface(
cos(phi*d2r)*cos(theta*d2r),
cos(phi*d2r)*sin(theta*d2r),
sin(phi*d2r),
theta,-180,180,
phi,-90,90),
color = black,
line_width = 1,
geomap(makelist(k,k,0,2800)))$

surface_hideをtrueにすると,地球の裏側が表示されなくなります.parametric_surfaceにより緯線・経線を表示しています.line_widthで線の太さを指定しています.
worlemap3d_simple

最後に,各国のインターネット利用率で国境線の色付けをしてみますと,次のようになります.
worldmap3d

[参考]
Maximaパッケージdrawのマニュアル(http://maxima.sourceforge.net/docs/manual/maxima_52.html)
パッケージworldmapの利用例
(http://riotorto.users.sourceforge.net/Maxima/gnuplot/geomap/index.html#0)
世界の統計2016(
http://www.stat.go.jp/data/sekai/0116.htm#c07)

GO
東京大学大学院工学系研究科修士1年

2024.9  
未経験者必見!『キャリアリターン採用』開始しました  詳しく