去年の年末につくった、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
は各データを表す識別子です。field1
、field2
はカテゴリです。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()
という関数を用意しています。ポップアップが出てきて、チェックを入れた都道府県のコードが返ります。
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()
注意事項
kokudosuuchiパッケージを使う前に、国土数値情報APIの利用規約をご確認ください。
また、このAPIは試行版として提供されているもので、今後も同じような形態・仕様で提供されるかは不明です。kokudosuuchiパッケージは国土数値情報に依存しているので、大幅に変更する可能性があります。ご注意ください。