本文へスキップ

岩通ソフトシステム株式会社はソフトウェア開発からサービスまでをトータルで提供するソリューションプロバイダです。

basemapbasemap

basemapというPythonから地図を表示するライブラリについて説明します。

basemapとは

basemapとは、Pythonから地図を表示するライブラリです。地図の表示をPythonから行う方法にはいくつかありますが、無料で使用できる物の一つにmatplotlibの一部であるbasemap(https://matplotlib.org/basemap/)というツールキットがあります。

Pythonでmatplotlibを使用している人は多いので、地図を利用するときにも、matplotlibの一部であるbasemapを利用するのがお手軽だと思います。

ただし、開発自体は、sourceforge(https://sourceforge.net/projects/matplotlib/files/matplotlib-toolkits/)を見る限り、2013年の1.0.7というバージョンで一区切り付いてしまっているようです。

なお、basemapのライセンスは、matplotlibのライセンス(https://matplotlib.org/users/license.html)が適用されます。

Anaconda3へのmatplotlibのインストールについて

筆者は、windows環境のレガシー系の機械学習では、Anaconda3を使うことが多いのですが、残念ながらbasemapはAnaconda3に含まれていません。

Anaconda3のコマンドであるcondaを使用してbasemapをインストールする場合に、やり方を間違えるとAnaconda3がダウングレードしてPython2がインストールされてしまったり、Anaconda Navigatorが起動しなくなったりと、いろいろな問題が発生する可能性があります。

問題が発生すると復旧するのに多くの時間を費やしてしまうので、インストールの方法について以下で説明します。


なお、使用した環境は、以下のものです。これ以外の環境では試していませんので、正しくインストールできるのかどうかは分かりません。

Windowsは64ビットのWindows 7と10のHomeとProfessionalで確認しています。

Anaconda3は、64ビットのAnaconda3-5.1.0-Windows-x86_64.exeというインストーラでインストールしています。2018年6月2日現在で、最新版は、Anaconda3-5.2.0-Windows-x86_64.exeとなっていますので、ひとつ前のバージョンで確認していることになります。


インストール方法は、
  1. Anaconda Promptを起動し、以下のコマンドを入力します。
  2. conda install -c conda-forge basemap
  3. conda install -c conda-forge basemap-data-hires
で終わりです。時間にして2、30分くらいです。

これで、インストールされるものは、https://anaconda.org/conda-forge/basemapにあるものがインストールされます。


Anaconda navigatorで確認すると、下のようになっており、確かにbasemapは、Anaconda Navigatorから認識されています。Basemapのバージョンは、1.1.0ということですので、sourceforgeに登録してあるものよりも新しいものがインストールされています。

basemapをインストールすると、mpl_toolkitsにもbasemapのプログラムがインストールされます。以下のプログラムでは、mpl_toolkitsのbasemapをimportして使用しています。


次に、basemapでどんなことができるかをお話しします。

いろいろなサイトにたくさんの例が出ていますので、そちらを参考にしていただくのも良いと思います。ここでは、ごく基本的な部分だけを紹介します。

上の画像は、下のプログラムで表示したものです。

下のプログラムでは、lonとlatで県庁所在地の緯度経度、hで県庁所在地の標高を表しています。

  1. ###########################################
  2. import matplotlib.pyplot as plt
  3. from mpl_toolkits.basemap import Basemap, cm
  4. fig = plt.figure(figsize=(12,12))
  5. # creates Basemap instance
  6. m = Basemap(projection='merc',
  7. resolution='i',
  8. llcrnrlon=128,
  9. llcrnrlat=30,
  10. urcrnrlon=147,
  11. urcrnrlat=46)
  12. m.drawcoastlines()
  13. lon = ([141.34694, 140.74, 141.1525, 140.87194, 140.1025,
  14. 140.36333, 140.46778, 140.44667, 139.88361, 139.06083,
  15. 139.64889, 140.12333, 139.69167, 139.6425, 139.02361,
  16. 137.21139, 136.62556, 136.22194, 138.56833, 138.18111,
  17. 136.72222, 138.38306, 136.90667, 136.50861, 135.86833,
  18. 135.75556, 135.52, 135.18306, 135.83278, 135.1675,
  19. 134.23833, 133.05056, 133.935, 132.45944, 131.47139,
  20. 134.55944, 134.04333, 132.76611, 133.53111, 130.41806,
  21. 130.29889, 129.87361, 130.74167, 131.6125, 131.42389,
  22. 130.55806, 127.68111])
  23. lat = ([43.06417, 40.82444, 39.70361, 38.26889, 39.71861,
  24. 38.24056, 37.75, 36.34139, 36.56583, 36.39111,
  25. 35.85694, 35.60472, 35.68944, 35.44778, 37.90222,
  26. 36.69528, 36.59444, 36.06528, 35.66389, 36.65139,
  27. 35.39111, 34.97694, 35.18028, 34.73028, 35.00444,
  28. 35.02139, 34.68639, 34.69139, 34.68528, 34.22611,
  29. 35.50361, 35.47222, 34.66167, 34.39639, 34.18583,
  30. 34.06583, 34.34028, 33.84167, 33.55972, 33.60639,
  31. 33.24944, 32.74472, 32.78972, 33.23806, 31.91111,
  32. 31.56028, 26.2125])
  33. lon, lat = m(lon, lat)
  34. h = [18.6, 2.6, 128.3, 47.4, 6.,
  35. 198.2, 66.9, 30.4, 120.9, 108.5,
  36. 15.8, 4.2, 41.3, 2.4, 3.6,
  37. 7.9, 5.6, 11.5, 269.9, 371.3,
  38. 8.2, 22.2, 14.3, 17.5, 95,
  39. 47.6, 14.9, 28.4, 90.3, 8.7,
  40. 4.8, 3.4, 5., 3.2, 48.2,
  41. 2.9, 3.8, 24.2, 4.2, 5.2,
  42. 5.1, 8.3, 19.3, 3.5, 4.6,
  43. 5.1, 8.5]
  44. im=m.scatter(lon,lat,alpha=0.7,s=50,
  45. c=h, edgecolors='k', linewidths=1.5,
  46. cmap=cm.s3pcpn)
  47. m.colorbar(im,location='bottom',pad="5%")
  48. plt.show()

15行目で呼び出しているm.drawcoastlines()を変更することによって、描画する地図を変えることができます。画像の上に書かれているのが、変更して呼び出す関数です。


m.bluemarble()
m.drawlsmask()
m.etopo()

basemapを使用することによって、地図を使用したいろいろな表現ができるので、いろいろと試してみられると良いと思います。