読者です 読者をやめる 読者になる 読者になる

Rから国土数値情報ダウンロードサービス Web APIを使うパッケージkokudosuuchiをCRANで公開しました

R 国土数値情報 kokudosuuchi GIS

去年の年末につくった、Rから国土数値情報ダウンロードサービス Web APIを使うパッケージをCRANで公開しました。

CRAN:CRAN - Package kokudosuuchi

大したことをしているパッケージでもないんですが、使ってフィードバックをいただければ嬉しいです。(恥ずかしながら私はGISドメイン知識がほとんどないので、こういう処理をする関数がほしい!みたいなアイディアとかあればぜひ教えてください...)

インストール方法

install.packages()でCRANからインストールしてください。

install.packages("kokudosuuchi")

使い方

前回から大して機能追加もしてないんですが、使い方を記しておきます。

getKSJSummary()

国土数値情報APIが取り扱っているデータの概要を取得します。(パラメータもいくつか指定できますが、今のところはすべて指定できるものが1種類しかないのでデフォルトのままで問題ありません)

getKSJSummary()
#> # A tibble: 102 × 5
#>    identifier                title           field1       field2 areaType
#>         <chr>                <chr>            <chr>        <chr>    <chr>
#> 1         A03   三大都市圏計画区域         政策区域     大都市圏        2
#> 2         A09             都市地域 国土(水・土地)     土地利用        3
#> 3         A10         自然公園地域             地域     保護保全        3
#> 4         A11         自然保全地域             地域     保護保全        3
#> 5         A12             農業地域 国土(水・土地)     土地利用        3
#> 6         A13             森林地域 国土(水・土地)     土地利用        3
#> 7         A15           鳥獣保護区             地域     保護保全        3
#> 8         A16         人口集中地区         政策区域            -        3
#> 9         A17             過疎地域         政策区域 条件不利地域        3
#> 10        A18 半島振興対策実施地域         政策区域 条件不利地域        3
# ... with 92 more rows

identifierは各データを表す識別子です。field1field2はカテゴリです。areaTypeは、「1:全国のみ」「2:三大都市圏で分類」「3:全国・都道府県で分類」「4:メッシュで分類」の4種類があります。

getKSJURL()

国土数値情報のデータ(ZIPファイル)のURLとメタデータを取得します。指定できる引数には以下があります。

  • identifier: 各データを表す識別子です(getKSJSummary()で得られたのと同じものです)。
  • metroArea/prefCode/meshCode: データの地域を表す識別子です。データの種類(areaType)によって指定すべきものが異なります。
  • fiscalyear: 年度です。(すみません、パッケージではfiscalyerとなっていますが、ただのタイポです...。次期バージョンで修正します)
getKSJURL("A03", prefCode = c(1, 2))
#> # A tibble: 3 × 9
#>   identifier              title    field  year areaType areaCode datum                                                               zipFileUrl zipFileSize
#>        <chr>              <chr>    <chr> <chr>    <chr>    <chr> <chr>                                                                    <chr>       <chr>
#> 1        A03 三大都市圏計画区域 政策区域  2003        2      100     2 http://nlftp.mlit.go.jp/ksj/gml/data/A03/A03-03/A03-03_SYUTO-tky_GML.zip      6.63MB
#> 2        A03 三大都市圏計画区域 政策区域  2003        2      200     2 http://nlftp.mlit.go.jp/ksj/gml/data/A03/A03-03/A03-03_CHUBU-tky_GML.zip     11.54MB
#> 3        A03 三大都市圏計画区域 政策区域  2003        2      300     2 http://nlftp.mlit.go.jp/ksj/gml/data/A03/A03-03/A03-03_KINKI-tky_GML.zip      8.78MB

prefCode()については、都道府県のコードをいちいち覚えていられないので、choose_prefecture_code()という関数を用意しています。ポップアップが出てきて、チェックを入れた都道府県のコードが返ります。

f:id:yutannihilation:20161108214551p:plain:w450

meshCodeについては、以下のuribo氏のブログが参考になります。

標準地域メッシュによる地図の塗り分け

getKSJData()

これは国土数値情報APIを使ったものではありません。ZIPファイルをダウンロードしてreadOGR()で読み込む、という一連の流れをまとめた関数です。ZIPファイルのURLを指定すると、ダウンロードし、すべてのレイヤーを読み込んでくれます。

d <- getKSJData("http://nlftp.mlit.go.jp/ksj/gml/data/A03/A03-03/A03-03_SYUTO-tky_GML.zip")
#> trying URL 'http://nlftp.mlit.go.jp/ksj/gml/data/A03/A03-03/A03-03_SYUTO-tky_GML.zip'
#> Content type 'application/zip' length 6956427 bytes (6.6 MB)
#> downloaded 6.6 MB
#> 
#> OGR data source with driver: ESRI Shapefile 
#> Source: "C:\Users\user1\AppData\Local\Temp\Rtmp6NQnsF/079aca496ec63850e8fd8e5b4a66be38", layer: "A03-03_SYUTO-g_ThreeMajorMetroPlanArea"
#> with 1300 features
#> It has 8 fields

str(d, max.level = 2)
#> List of 1
#>  $ A03-03_SYUTO-g_ThreeMajorMetroPlanArea:Formal class 'SpatialPolygonsDataFrame' [package "sp"] with 5 slots

結果には複数のレイヤーが含まれる場合があるので、SpatialPolygonsDataFrameのリストになっています。複数のURLを一気にダウンロードする際は、例えば以下のようにpurrrパッケージのflatten()などを用いるといいでしょう。

library(purrr)

urls <- getKSJURL("A03", prefCode = c(1, 2))

l <- urls$zipFileUrl %>%
  map(getKSJData) %>%
  flatten

str(l, max.level = 2)
#> List of 3
#>  $ A03-03_SYUTO-g_ThreeMajorMetroPlanArea:Formal class 'SpatialPolygonsDataFrame' [package "sp"] with 5 slots
#>  $ A03-03_CHUBU-g_ThreeMajorMetroPlanArea:Formal class 'SpatialPolygonsDataFrame' [package "sp"] with 5 slots
#>  $ A03-03_KINKI-g_ThreeMajorMetroPlanArea:Formal class 'SpatialPolygonsDataFrame' [package "sp"] with 5 slots

データの詳細については、どうやらこのあたりにまとまっているようです。

とりあえず可視化してみたいときにはleafletパッケージを使うといいでしょう。

library(leaflet)

leaflet(l[[1]]) %>%
  addTiles() %>%
  addPolygons()

f:id:yutannihilation:20161108230614p:plain:w450

注意事項

kokudosuuchiパッケージを使う前に、国土数値情報API利用規約をご確認ください。

また、このAPIは試行版として提供されているもので、今後も同じような形態・仕様で提供されるかは不明です。kokudosuuchiパッケージは国土数値情報に依存しているので、大幅に変更する可能性があります。ご注意ください。

さいごに

バグ報告や意見、pull requestなどは、TwitterとかGitHubなどでご連絡いただければ幸いです。