市域地図を描く

所用により、川口市の地図を描くことになった。とりあえず、川口市の形だけ出せればいい。こういうときは、GISソフトを使って、国土地理院のサイトから入手したシェープファイルを表示させればいいと地理学の授業では習った。

でも、せっかくだからR、というか{ggplot2}でやってみようと思い、以下のような手順を踏んでみたところ、予想以上に簡単だった。それは、以下に述べるように{jpndistrict}パッケージの簡便さによるところが大きい。

具体的な目的としては、蕨市の境目にある川口市の芝園団地の位置を図示することである。つまり、川口市域と芝園団地のポイントが示せればいい。

実際の図

まず、実際にできた地図を以下に示す。

## This package provide map data is based on the Digital Map 25000
## (Map Image) published by Geospatial Information Authority of Japan
## (Approval No.603FY2017 information usage <http://www.gsi.go.jp>)

芝園団地の点が蕨市にかぶっているが、まあ思ったとおりのものができた。

コード

ではコードを紹介する。

library(ggplot2) 
#まだ入ってなかったらインストールする
library(jpndistrict) 
#同上

kawaguchi<-
  jpn_cities(jis_code = 11, admin_name = "川口市")
#jpndistrictの関数です

p<-
  ggplot(kawaguchi)+
  
  geom_sf()+
  #地図はだいたいこれ書いとけばok
  
  coord_sf(datum = NA)+
  #背景表示しない
  
  theme_void()+
  #テーマ指定
  
  geom_point(x=139.684920, y=35.831579, size=5)+
  #点の位置を指定。座標はGoogle Mapで調べた
  
  geom_text(x=139.735, y=35.85, label="川口市", 
            size=7, family="HiraKakuPro-W3")+ 

  #以下、ラベルの位置指定。フォントも逐一指定
  geom_text(x=139.678, y=35.824, label="蕨市", 
            size=7, family="HiraKakuPro-W3")+
  geom_text(x=139.701, y=35.835, label="芝園団地", 
            size=5.5, family="HiraKakuPro-W3", 
            position = "identity")

print(p)

重要な点

ポイントは二つある。まず一つは、{jpndistrict}パッケージの利用である。これは、瓜生真也さんという方が開発したもので、国土地理院が出している都道府県や市区町村のポリゴンデータを簡単な関数の操作で取り出すことができるというすぐれものである(詳しくはこちら)。上のコードでは、jpn_cities()関数一発で川口市の地理情報を指定できる。これを変数kawaguchiとしてggplot()に引き渡す。

二番目のポイントは、geom_sf()関数の利用である。詳細はよくわからないが、地理情報データを{ggplot2}で使うときに用いる関数である。デフォルトだと緯度経度が図の周辺に表示されるので、coord_sf(datum = NA)で無効化する。これも、覚えておきたいと思う。

日本語フォントの設定

あと、日本語フォントの設定にやや手こずった。{ggplot2}ではだいたいtheme()関数のfont_family引数で日本語フォントを指定しておけばいいのだが、今回はそれが効かなくてgeom_text()でいちいち指定することになった。

まとめ:あまり理解していなくてもできてしまう

正直なところ、GISまわりのデータ形式とかはよくわかっていない。かろうじてライン、ポイント、ポリゴンの区別がつくくらいである。これから勉強しないといけないと思っている。

ただ、そんな状態でも、{jpndistrict}ggplot2::geom_sf()の組み合わせで、日本の都道府県・市区町村の地図なら手軽に描けてしまう。正直、地理学の授業で手こずったArcGISよりはるかに簡単である。もちろん、もっと高度な作業もできるはずである。

たぶん探せば地図関係のRパッケージは他にもあるだろうと思う。地図は好きなので細々と続けていこうと思う。

参考サイト