Basemap から Cartopy へ引っ越し -2-

 今回は、Cartopy で地図を表示し、その特徴などをざっくりつかみたいと思います。

 目次

1.まずは Install する

2.とにかく表示する

3.解像度はどの程度なのだろう

4.(番外編)これはどこでしょう?

5.まとめ

 

1.まずは Install する

 公式ページの "Installing Cartopy" に従って Install します。環境によって多少違うかもしれませんが、

conda install -c conda-forge cartopy # Conda の場合
pip install cartopy           # Source からの場合

などで、Install できます。

 

2.とにかく表示する

 Cartopy Galley とその Script をしばらく眺め、とりあえず書いたものが下の code です。

 実際に code を走らせる段階で、場合によっては 2,3 の Component について ImportError メッセージが出るかもしれません。が、これも Conda install などで Install すれば、その後問題なく 動くようになります(私が、部分的に Component のバージョンをいじったりしていたために出ただけかもしれません)。

import matplotlib.pyplot as plt
import cartopy.crs as ccr            # ライブラリ2つ Import
import cartopy.feature as cfeature

plt.figure(figsize=(10,8))
ax = plt.axes(projection=ccrs.PlateCarree()) # 正距円筒図指定
ax.add_feature(cfeature.LAND)          # 陸地、海、湖、川データ
ax.add_feature(cfeature.OCEAN)         
ax.add_feature(cfeature.LAKES)
ax.add_feature(cfeature.RIVERS)
ax.coastlines(lw=0.8)               # 海岸線の太さ
ax.gridlines(linestyle='-', color='gray')    # 緯度経度線書式指定

plt.show()

f:id:ohigehige:20200919162527p:plain

  用途によっては、これでも十分過ぎるほどです。

 

3.解像度はどの程度なのだろう

 場所を日本界隈に移し、Zoom-In した時にどの程度の解像度で表示できるのかを試してみました。Cartopy Feature Interface を眺めていると、解像度をいじれる選択肢に、"NaturalEarthFeature" というものがあるようなので、今回はそれを試してみました。

import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.feature as cfeature
import matplotlib.ticker as mticker

# NaturalEarthFeature の陸地解像度の設定

land_10m = cfeature.NaturalEarthFeature('physical', 'land', '10m',
edgecolor='face', facecolor=cfeature.COLORS['land'])


plt.figure(figsize=(12,12.3))

# 左上図の表示 日本付近で緯度経度 22 度四方とした

ax1 = plt.subplot(221, projection=ccrs.PlateCarree())
ax1.set_extent([123,145,23,45],ccrs.PlateCarree())
   # 西端経度、東端経度、南端緯度、北端緯度
ax1.add_feature(land_10m)         # 陸地、海岸線解像度 10m
ax1.coastlines(resolution='10m', lw=1)
ax1.gridlines(xlocs=mticker.MultipleLocator(2),
ylocs=mticker.MultipleLocator(2),
linestyle='-', color='gray')      # 緯度経度線 2 度ごとに表示 
ax1.set_title('22 x 22 deg', fontsize=16)

# 他図も緯度経度範囲のみ変えて表示 略

plt.tight_layout()
plt.show()

f:id:ohigehige:20200919162547p:plain

 縮尺の目安のために、どの図においても、緯度経度は 2 度ごとに引いてみました。1度当たり、約 111 km であることを念頭に置きながら眺めてみますと、世界地図同様、全国、あるいは本州や九州といった視点から使う分には全く問題なさそうです。が、数県程度を対象とした地図として使う場合には、用途にもよりますが、地図として精度の高さを求めるというよりは、縮尺や緯度経度の正しい概略図として使う方が良いような気がします。

 

4.(番外編)これはどこでしょう?

 同じ解像度で、試しに 0.6 度(約70 km)四方の地図を作ってみました。クイズにするつもりは全くなかったのですが、家族に聞いたところ、思いの外難問だったようで、面白いかと思い載せてみました(ちなみに、誰も全問正解はできませんでした)。✖印が一応ヒントになります。

f:id:ohigehige:20200919162559p:plain

 答えはそれぞれ、A. 沖縄本島、B. 東京湾、C. 大阪湾で、✖印はそれぞれ沖縄那覇、東京羽田、関西国際空港でした。

 この縮尺と精度では、ゲーム等に出てくる宝探しの地図の方が、もしかしたら情報としてはよほど使えるのかもしれません。

 

5.まとめ

 ひとまず表示し、その特徴などをざっくりつかむという目標は達成しました。もっとも、課題は残りました。

 精度はおそらく使っている地図データによると思われるので、地図データとして使えるものを、もう少し調べる必要がありそうですが、次回は、この引っ越しの目標をひとまず達成すべく、以下の課題を解決したいと思います。

Basemap から Cartopy へ引っ越し -3- 

 風の矢羽根、等高線、colorbar 表示などをひとまず実現する

 

 最後までお付き合いありがとうございました。