LoginSignup
8
7

More than 3 years have passed since last update.

Pythonで世界地図-3(日本地図・cartopy版)

Last updated at Posted at 2018-05-02

Pythonで世界地図
https://qiita.com/ty21ky/items/c7a93b83cbbfa8a82a17

Pythonで世界地図-2
https://qiita.com/ty21ky/items/c9e29a5361e35ca7c4f2

の続き

日本地図に県境を入れる

basemapやcartopyで地図上でplot
http://www.mwsoft.jp/programming/numpy/plot_map.html

上記のサイトに日本地図に県境を表示する方法が書かれています。詳しくは上記のサイトを参照してください。

インストール

$ git clone https://github.com/OSGeo/proj.4.git
$ cd proj.4
$ git checkout -b 4.9.0 tags/4.9.0
$ ./configure
$ make
$ sudo make install

$ sudo apt-get install libgeos-dev

$ git clone https://github.com/SciTools/cartopy.git
$ cd cartopy
$ git tag

$ git checkout -b v0.14.2 tags/v0.14.2

ここまでは順調に進んだが、次の
$ sudo pip install .
でエラー。メッセージを翻訳するとsudoに-Hを入れろと書いてあるので入れるとOKだった。

$ sudo -H pip install .
$ python -c "import cartopy"

ここで、またエラー。
libproj.so.0がないらしい。
$ ls -l /usr/local/lib/libp*
-rw-r--r-- 1 root root 3737918 5月 2 14:21 /usr/local/lib/libproj.a
-rwxr-xr-x 1 root root 953 5月 2 14:21 /usr/local/lib/libproj.la*
lrwxrwxrwx 1 root root 16 5月 2 14:21 /usr/local/lib/libproj.so -> libproj.so.0.8.0*
lrwxrwxrwx 1 root root 16 5月 2 14:21 /usr/local/lib/libproj.so.0 -> libproj.so.0.8.0*
-rwxr-xr-x 1 root root 1775816 5月 2 14:21 /usr/local/lib/libproj.so.0.8.0*
ここにシンボリックリンクがあるが?

ネットで検索すると、海外のサイトにバグらしいと書いてあった。
Debianでは、なおっているがUbuntuはまだらしい。
ネットに書いてることをいろいろやっても駄目。
しかし、

$ export LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib

これで、import出来るようになりました。

上記のサイトを参考に
国土数値情報 ダウンロードサービス
http://nlftp.mlit.go.jp/ksj/
から、データをダウンロード

2. 政策区域 ー> 行政区域 ー> ダウンロードするデータの選択

でデータをダウンロードしました。
ダウンロードする時間帯が悪いのか、それほどファイルサイズが大きくないのに物凄く時間がかかる。(数十分)マイクロソフト以外でこれほど時間がかかったのは初めてだ。

上記のサイトのサンプルプログラムを実行

test.py
#!/usr/bin/python
# coding: UTF-8

import cartopy.crs as ccrs
import cartopy.io.shapereader as shpreader
import matplotlib.pyplot as plt

# 落としてきた行政区域のshpファイルを指定
fname = '/home/ty/python/map/japan/N03-170101_GML/N03-17_170101.shp'
shapes = list(shpreader.Reader(fname).geometries())

# 東京あたりを描画
ax = plt.axes(projection=ccrs.PlateCarree())
ax.add_geometries(shapes, ccrs.PlateCarree(), edgecolor='black', facecolor='gray', alpha=0.3)
ax.set_extent([139, 141, 35, 36], ccrs.PlateCarree())
plt.show()

image.png

最初は気が付かなかったが、このプログラムはBasemapとは、全然関係なかったぁぁ・・・

image.png

しかし、さすが国交省が作った地図なので、Basemapの"f"よりもさらに精度は良いですね。

県境だけにするか、県境の色を変更したいがshpファイルを読むことが出来ないので、現在調査中。

8
7
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
7