R: 大阪府市町村区の地図を作成する

Rで大阪府市町村区の地図を作成することになりました。シェープファイルというフォーマットの地図データさえ入手すれば、意外と簡単に作成できます。

  1. シェープファイルを入手する
  2. sf::st_readでシェープファイルを読み込む
  3. plot()で大阪府市町村区の地図を描く

1. シェープファイルを入手する

まずは大阪市町村区のシェープファイルを入手しましょう。今回はesriジャパンが提供している日本のシェープファイルを利用します。

esriジャパン https://www.esrij.com/products/japan-shp/

ダウンロードしたフォルダのうち、絶対必要な必須ファイルは.shp、.shx、.dbfです。

  • .shp シェープデータ(地形情報の本体)
  • .shx シェープインデックスデータ(地形データの検索を高速化するための位置インデックス)
  • .dbf 属性データ(各シェープに対する縦表形式の属性情報)

2. sf::st_readでシェープファイルを読み込む

シェープファイルを利用して地図を描く場合、sf (simple features)パッケージのst_readコマンドが便利です。st_readコマンドを使って、esriジャパンからダウンロードしたフォルダjapan_ver82内のシェープファイル.shpを読み込みます。

文字化けする場合、文字コードをUTF-8に設定してみましょう。

> library(sf)
> 
> jpn <- st_read("japan_ver82/japan_ver82.shp")
>
> # 文字化けする場合
> jpn <- st_read("japan_ver82/japan_ver82.shp", options="ENCODING=UTF-8")

jpnは、data.frameです。中身を覗いてみましょう。geometry変数に地図情報が格納されており、この変数をplotすれば簡単に地図を作成できます。

> jpn                                                                                                                           
Simple feature collection with 1907 features and 9 fields                                                                       
geometry type:  MULTIPOLYGON                                                                                                    
dimension:      XY                                                                                                              
bbox:           xmin: 122.9337 ymin: 24.04562 xmax: 153.9868 ymax: 45.55724                                                     
CRS:            4612                                                                                                            
First 10 features:                                                                                                              
   JCODE    KEN      SICHO  GUN SEIREI SIKUCHOSON                  CITY_ENG  P_NUM  H_NUM                       geometry        
1  01101 北海道 石狩振興局 <NA> 札幌市     中央区      Sapporo-shi, Chuo-ku 235449 141734 MULTIPOLYGON (((141.3423 43...        
2  01102 北海道 石狩振興局 <NA> 札幌市       北区      Sapporo-shi, Kita-ku 286112 151891 MULTIPOLYGON (((141.4084 43...        
3  01103 北海道 石狩振興局 <NA> 札幌市       東区   Sapporo-shi, Higashi-ku 261777 142078 MULTIPOLYGON (((141.447 43....        
4  01104 北海道 石狩振興局 <NA> 札幌市     白石区 Sapporo-shi, Shiroishi-ku 212671 122062 MULTIPOLYGON (((141.4657 43...        
5  01105 北海道 石狩振興局 <NA> 札幌市     豊平区  Sapporo-shi, Toyohira-ku 222504 126579 MULTIPOLYGON (((141.3848 43...        
6  01106 北海道 石狩振興局 <NA> 札幌市       南区    Sapporo-shi, Minami-ku 137488  72502 MULTIPOLYGON (((141.1025 43...        
7  01107 北海道 石狩振興局 <NA> 札幌市       西区     Sapporo-shi, Nishi-ku 215231 114066 MULTIPOLYGON (((141.3283 43...        
8  01108 北海道 石狩振興局 <NA> 札幌市     厚別区 Sapporo-shi, Atsubetsu-ku 127648  65096 MULTIPOLYGON (((141.474 43....        
9  01109 北海道 石狩振興局 <NA> 札幌市     手稲区     Sapporo-shi, Teine-ku 142130  69249 MULTIPOLYGON (((141.2263 43...        
10 01110 北海道 石狩振興局 <NA> 札幌市     清田区    Sapporo-shi, Kiyota-ku 114447  53174 MULTIPOLYGON (((141.4542 43...  

今回は大阪府市町村区の地図を作成したいので、KEN==”大阪府”のデータを抽出します。市区町村名はSIKUCHOSONに格納されているみたいなので、tableで中身を確認してみます。

> osaka <- jpn[jpn$KEN=="大阪府", ]                                                                                             
> osaka                                                                                                                         
Simple feature collection with 72 features and 9 fields                                                                         
geometry type:  MULTIPOLYGON                                                                                                    
dimension:      XY                                                                                                              
bbox:           xmin: 135.092 ymin: 34.27182 xmax: 135.7466 ymax: 35.05126                                                      
CRS:            4612                                                                                                            
First 10 features:                                                                                                              
     JCODE    KEN SICHO  GUN SEIREI SIKUCHOSON                      CITY_ENG  P_NUM H_NUM                       geometry        
1214 27102 大阪府  <NA> <NA> 大阪市     都島区      Osaka-shi, Miyakojima-ku 104854 55965 MULTIPOLYGON (((135.5409 34...        
1215 27103 大阪府  <NA> <NA> 大阪市     福島区       Osaka-shi, Fukushima-ku  74751 40843 MULTIPOLYGON (((135.4639 34...        
1216 27104 大阪府  <NA> <NA> 大阪市     此花区        Osaka-shi, Konohana-ku  67064 34648 MULTIPOLYGON (((135.3494 34...    
1217 27106 大阪府  <NA> <NA> 大阪市       西区           Osaka-shi, Nishi-ku  99066 58316 MULTIPOLYGON (((135.4625 34...    
1218 27107 大阪府  <NA> <NA> 大阪市       港区          Osaka-shi, Minato-ku  81301 43778 MULTIPOLYGON (((135.4625 34...        
1219 27108 大阪府  <NA> <NA> 大阪市     大正区          Osaka-shi, Taisho-ku  65691 33832 MULTIPOLYGON (((135.482 34....        
1220 27109 大阪府  <NA> <NA> 大阪市   天王寺区         Osaka-shi, Tennoji-ku  76759 39495 MULTIPOLYGON (((135.5335 34...        
1221 27111 大阪府  <NA> <NA> 大阪市     浪速区          Osaka-shi, Naniwa-ku  67415 47769 MULTIPOLYGON (((135.4967 34...        
1222 27113 大阪府  <NA> <NA> 大阪市   西淀川区   Osaka-shi, Nishiyodogawa-ku  97510 49146 MULTIPOLYGON (((135.4739 34...        
1223 27114 大阪府  <NA> <NA> 大阪市   東淀川区 Osaka-shi, Higashiyodogawa-ku 171611 97809 MULTIPOLYGON (((135.5488 34...        
> table(osaka$SIKUCHOSON)                                                                                                       
                                                                                                                                
  阿倍野区       旭区     茨木市   羽曳野市 河内長野市     河南町     貝塚市   岸和田市     熊取町     交野市       港区        
         1          1          1          1          1          1          1          1          1          1          1        
    高石市     高槻市     此花区     阪南市       堺区   四條畷市     守口市     住吉区   住之江区     松原市     城東区        
         1          1          1          1          1          1          1          1          1          1          1        
  寝屋川市     吹田市     生野区       西区     西成区   西淀川区     摂津市 千早赤阪村   泉佐野市   泉大津市     泉南市        
         1          1          1          2          1          1          1          1          1          1          1        
    太子町 大阪狭山市     大正区     大東市     池田市     中央区       中区     忠岡町     鶴見区   天王寺区     田尻町        
         1          1          1          1          1          1          1          1          1          1          1        
    都島区     島本町       東区   東住吉区     東成区   東大阪市   東淀川区   藤井寺市       南区     能勢町     柏原市        
         1          1          1          1          1          1          1          1          1          1          1        
    八尾市     美原区   富田林市     福島区     平野区     豊中市     豊能町       北区     枚方市     箕面市       岬町        
         1          1          1          1          1          1          1          2          1          1          1        
    門真市     淀川区     浪速区     和泉市                                                                                     
         1          1          1          1       

大阪市と堺市に北区と西区があるので、それぞれレコード数が2になっています。

3. plot()で大阪府市町村区の地図を描く

それでは大阪府の地図を作成してみましょう。geometory変数に地図情報が格納されているので、plotすればOKです。RColorBrewerを利用すれば、簡単にカラフルな地図を作成することができます。

> plot(osaka$geometry)
> 
> # RColorBrewerパッケージをつかって、カラフルな色をつけてみましょう
> library(RColorBrewer)
> # サンプルを表示します
> display.brewer.all()
> # Spectralを使ってカラフルな地図を作成してみましょう
> COL <- brewer.pal(12, "Spectral")
> plot(osaka$geometry, col=COL, lty=0)

シェープファイルさえ入手すれば、意外と簡単ですね。

まとめ

  • シェープファイルを入手する
  • df <- sf::st_read(“x.shp”)
  • plot(df$geometry)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください