Pythonを勉強して日本地図を作ってみよう!〜GMT付き〜

Python

こんにちは。とりりんです。

最近、プログラミングが流行っていますよね。

プログラミングってなんなんだろ?とか、始めたけどモチベが維持できない!という方にもってこいのネタです。

今日はPythonという言語を使って、日本地図を作成してみます!

プログラミング自体の要素は薄めですが、こんなのできるんだ〜と思っていただけたら嬉しいです。

  • プログラミングに興味がある方
  • 暇つぶししたい方
  • プログラミングのモチベーションを高めたい方

最後までご覧いただけると嬉しいです!

スポンサーリンク

Pythonとは

Pythonとはプログラム言語の一種で、近年最も注目されている言語(拡張子は.py)の1つです。

書きやすい!新しい!とか良い点はいくつもありますが、注目される最も大きな理由はAI(機械学習)の実装に最適だからだと思います。

今日はブームな言語であるPythonを使うことにします。

因みに、プログラミング初学者は何の言語から学べばいいの?という話についてもPythonで良いと私は思っています。

Pythonは型宣言がないから良くない!とか議論がありますが、まぁPythonやってれば時代を生き抜く上で多分困らないでしょう。

話が逸れましたが、Pythonは一言で言うと、便利な言語だよ!と言いたいだけです。

Pythonで日本地図を描いてみよう!

初学者にはここが山場なのに大変申し訳ないですが、Pythonの環境構築や実行方法等については、環境構築1[Windows]環境構築2[Windows]環境構築[Mac]などを参照してください。


筆者実行環境:OS:Mac, Python:3.9


まず、ソースをお見せします。

  import cartopy.crs as ccrs
  import cartopy.feature as cfea
  import matplotlib.pyplot as plt
  
  # 描画サイズ指定
  plt.figure(figsize=(10, 10))
  ax = plt.axes(projection=ccrs.PlateCarree())
  
  # ラベル表示
  ax.gridlines(draw_labels=True)
  
  #描画位置(Lon, Lat)指定
  ax.set_extent((120.0, 160.0, 30.0, 50.0), ccrs.PlateCarree())
  
  # 海洋と陸地の色を指定
  ax.add_feature(cfea.OCEAN,color='#00FFFF')
  ax.add_feature(cfea.LAND,color='#32CD32')
  
  plt.title('japan', fontsize=15)
  
  # 画像保存
  plt.savefig('cartopy.png')

今回は地形作成にcartopy、描画にmatplotlibというモジュールを使っています。

これらがインストールされていない影響でエラーが出ている場合は、ターミナル等で以下のコマンドを実行してみてください。

pip install cartopy
pip install matplotlib

1~3行目はモジュールをインポートしています。これ使うよ!って言ってるだけなのではじめた手の方はこういうもんだと思ってください。

6行目は描画サイズを指定しています。(10, 10)にしていますが、値を変えることで大きさを変えることができます。

10行目はラベルを表示するかどうかを決められます。Trueで表示、Falseで非表示です。

13行目の各数値は描画範囲を指定します。それぞれ(左端経度, 右端経度, 下端緯度, 上端緯度)になります。

16, 17行目は色を指定しています。今回は16進数表記ですが、デフォルトの色(greenなど)での指定も可能です。

19行目はタイトルを描画しています。不要なら取ってください。

22行目でファイル名を指定して作成した画像を保存します。

このプログラムを実行(python [ファイル名]など)すると、以下の画像が出来上がります。


これだけで!?と思いませんか?もっと工夫すればもっと綺麗な図ができますよ。

スポンサーリンク

GMTで日本地図を描画しよう!

番外編でGMT(Generic Mapping Tools)という描画ツールも使ってみましょう。

これは玄人向けなので、Pythonで十分という方には向いていません。

今回はPythonではなくシェルスクリプト(拡張子は.sh)というものに記載して、ほんのちょっとでできますよ!(しかしめっちゃ暗号)

GMTとは、ハワイ大学が開発したマッピングツールで、非常に綺麗な地図を描くことが可能です。

Macの場合だとbrew install gmt、Linuxの場合だとapt-getやyumでinstall gmtと実行するとインストール可能です。

Windowsはインストーラーでインストール可能です(ここ参照でできそう)。

こんな図ができるんです!個人的にはPythonよりGMTの方が好き。


これを作成するためのプログラムソースです。短い!って思うでしょう。


  #!/bin/bash

  # 出力psファイル名
  outimg="gmt.ps"

  # 描画
  gmt pscoast -JM15c -R120/160/30/50 -Ba5f5g10/a5f10g5:."japan": -W -P -Ggreen -S#00FFFF > $outimg

  # ps -> png
  gmt ps2raster $outimg -E100 -Tg

1行目はシェルスクリプトのお決まり文句です。bashという種類のやつ使うよ!って意味です(覚えなくていいです)。

4行目は出力する画像ファイル名を変数にしています。GMTではpsファイルという特殊な形式で出力しなければいけないため、仕方なく指定しています。

7, 10行目がGMTのコマンドです。7行目に描画、10行目にpsファイルからpngファイルへ変換しています。

地図の描画はpscoastという海岸線を描くコマンドを用いて実装します。

-なんとかで示されている暗号みたいなものはオプションで、以下のような意味を持ちます(凄く簡単に書いてるので、実際に試した方が理解できると思います)。

オプション 意味
J 図法の種類;Mはメルカトル図法
R 描画範囲;左端経度/右端経度/下端緯度/上端緯度
B ラベル;a:緯度経度表示, f:白黒のやつ, g:グリッド
/より前が東西方向で後が南北方向
:.:で囲まれた場所がタイトル
W 海岸線描画
P 描画を縦に変更
G 陸地の色を指定
S 海洋の色を指定

10行目は7行目で作成されたgmt.psからgmt.pngを作成します。

Eオプションはdpi単位の解像度で、-Tオプションで出力形式(-Tgがpng)を指定できます。

因みにTオプションを指定しない場合はjpgファイルが作成されます。

GMTは書く量が少なくて楽なのですが、なんせ玄人好みツールなので、敷居は高いかもしれません…。

スポンサーリンク

まとめ

今日は地図の描画を学習しました!

難しかったですか?色々細かく言ったのでとっつきにくかったかもしれません。

ガチ内容なのでこんなこともできるんだ程度に思って頂けると幸いです。

プログラミング等に関しても記事を書いていこうと思うので、これからもよろしくお願いします!

↓とりりんを応援して頂けると嬉しいです!↓
にほんブログ村 投資ブログ お金(投資)へ
にほんブログ村

スポンサーリンク

コメント

タイトルとURLをコピーしました