fgdrパッケージ(バージョン1.1.0)をCRAN登録しました

geospatial release

国土地理院 基盤地図情報データを扱うためのRパッケージfgdrパッケージ(バージョン1.1.0)をCRANに登録しました。 数値標高モデルデータを対象にしたときの返り値のクラスにdata.tableとterraが選択可能になりました。

Shinya Uryu https://twitter.com/u_ribo
2020-10-02

Rで国土地理院 基盤地図情報データを扱うためのパッケージ、fgdrのバージョンアップ(1.0.1から1.1.0へ)を行いました。 この更新での変更点は

です。いずれも数値標高モデルデータを対象にしたときの話題です。この記事ではそれらの利用方法を紹介します。

パッケージのインストール

パッケージのインストールはinstall.packages()を通じて行ってください。

開発版の利用に興味がある方は以下のリンクを辿ってください。開発を支援してくださるスポンサーも募集しています。

数値標高モデルの読み込み

fgdrパッケージには、以前から国土地理院 基盤地図情報でダウンロード可能な数値標高モデルのファイルを読み込み、Rのオブジェクトして処理できるread_fgd_dem()がありました。

この関数では読み込んだ際のオブジェクトの種類を指定でき、従来は表形式のdata.frame、空間オブジェクト(ラスタ)クラスのrasterおよびstarsが候補となっていました。今回のアップデートでは、これらに加えて表形式の選択肢にdata.table、ラスタ形式の候補にterraをそれぞれ追加しました。この2つのオプションを追加した理由は速度の改善と互換性の拡張です。

# 5m DEM
r_dt <- 
  read_fgd_dem(system.file("extdata/FG-GML-0000-00-00-DEM5A-dummy.xml", package = "fgdr"),
             resolution = 5,
             return_class = "data.table")
r_dt
             type     value
    1:     その他 -9999 [m]
    2:     地表面 -9999 [m]
    3:     海水面 -9999 [m]
    4:     地表面 -9999 [m]
    5: データなし    NA [m]
   ---                     
33746: データなし    NA [m]
33747: データなし    NA [m]
33748: データなし    NA [m]
33749: データなし    NA [m]
33750: データなし    NA [m]

valueの値にm単位がつくようになり、数値標高に対するイメージがつきやすくなったと思います。

# unitsパッケージのunitsオブジェクトです
class(r_dt$value)
[1] "units"

続いてterraを指定した時の結果です。

# 10m DEM
r_terra <- 
  read_fgd_dem(system.file("extdata/FG-GML-0000-10-dem10b-dummy.xml", package = "fgdr"),
             resolution = 10,
             return_class = "terra")
r_terra
class       : SpatRaster 
dimensions  : 750, 1125, 1  (nrow, ncol, nlyr)
resolution  : 0.0001111111, 0.0001111067  (x, y)
extent      : 140, 140.125, 36, 36.08333  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +ellps=GRS80 +no_defs 
data source : memory 
names       : lyr.1 
min values  : -9999 
max values  : -9999 
class(r_terra)
[1] "SpatRaster"
attr(,"package")
[1] "terra"

SpatRasterクラスはterraパッケージにおけるラスタ形式のデータで、出力すると座標系や最小値・最大値、次元数などが確認できます。

data.table導入の経緯

read_fgd_dem(return_class = "data.frame")で数値標高モデルファイルを読み込むと、読み込み時間が少々長く感じることがありました。ところが、ここでdata.frameを選択した際にそこで今回のアップデートでは読み込み速度の改善を目標にdata.tableオブジェクトへの変換を行うオプションを用意しました。

https://github.com/uribo/fgdr/pull/20

簡単な比較結果ですが、読み込み後のオブジェクトの種類をdata.tableとするとdata.frameの時よりも高速に処理されます。また、表形式の状態で操作を行うときにはdata.tableの恩恵を受けられる利点もあります。データ操作のフレームワークとしてdplyrdata.tableか、使い慣れている方を選択すると良いでしょう。

terraサポートの流れ

read_fgd_dem()では、これまでラスタの形式としてrasterおよびstarsクラスをサポートしていました。starsクラスはstarsパッケージが提供するオブジェクトのクラスです。sfパッケージでおなじみのEdzer Pebesmaさんらを開発メンバーとするr-spatialが作っています。st_*()がつく関数が用意されており、sfパッケージに馴染みがあると親しみやすく、またパイプフレンドリーに操作できるパッケージです。

一方のterraは、従来のRでのラスタデータを扱う際によく使われるrasterの後継とされる新しいパッケージです(こちらの開発にもEdzerさんは携わっています)。rasterよりも単純かつ高速であるという謳い文句です。

The package is similar to the ‘raster’ package; but ‘terra’ is simpler and faster.

今後、Rで地理空間のラスタデータを扱う際には使う機会が増えそうです。それを見越しての対応となります。

Session Information

package version attached date source
data.table 1.13.0 TRUE 2020-07-24 CRAN (R 4.0.2)
fgdr 1.1.0 TRUE 2020-09-30 CRAN (R 4.0.2)
terra 0.8-6 TRUE 2020-08-01 CRAN (R 4.0.2)
package version attached date source
abind 1.4-5 FALSE 2016-07-21 CRAN (R 4.0.2)
assertthat 0.2.1 FALSE 2019-03-21 CRAN (R 4.0.2)
class 7.3-17 FALSE 2020-04-26 CRAN (R 4.0.2)
classInt 0.4-3 FALSE 2020-04-07 CRAN (R 4.0.2)
cli 2.0.2 FALSE 2020-02-28 CRAN (R 4.0.2)
codetools 0.2-16 FALSE 2018-12-24 CRAN (R 4.0.2)
crayon 1.3.4 FALSE 2017-09-16 CRAN (R 4.0.2)
crosstalk 1.1.0.1 FALSE 2020-03-13 CRAN (R 4.0.2)
data.table 1.13.0 TRUE 2020-07-24 CRAN (R 4.0.2)
DBI 1.1.0 FALSE 2019-12-15 CRAN (R 4.0.2)
digest 0.6.25 FALSE 2020-02-23 CRAN (R 4.0.2)
distill 1.0 FALSE 2020-10-07 Github ()
downlit 0.2.0 FALSE 2020-09-25 CRAN (R 4.0.2)
dplyr 1.0.2 FALSE 2020-08-18 CRAN (R 4.0.2)
e1071 1.7-3 FALSE 2019-11-26 CRAN (R 4.0.2)
ellipsis 0.3.1 FALSE 2020-05-15 CRAN (R 4.0.2)
evaluate 0.14 FALSE 2019-05-28 CRAN (R 4.0.1)
fansi 0.4.1 FALSE 2020-01-08 CRAN (R 4.0.2)
fastmap 1.0.1 FALSE 2019-10-08 CRAN (R 4.0.2)
fgdr 1.1.0 TRUE 2020-09-30 CRAN (R 4.0.2)
fs 1.5.0 FALSE 2020-07-31 CRAN (R 4.0.2)
generics 0.0.2 FALSE 2018-11-29 CRAN (R 4.0.2)
glue 1.4.2 FALSE 2020-08-27 CRAN (R 4.0.2)
hms 0.5.3 FALSE 2020-01-08 CRAN (R 4.0.2)
htmltools 0.5.0 FALSE 2020-06-16 CRAN (R 4.0.2)
htmlwidgets 1.5.1 FALSE 2019-10-08 CRAN (R 4.0.2)
httpuv 1.5.4 FALSE 2020-06-06 CRAN (R 4.0.2)
jpmesh 1.2.1 FALSE 2020-05-06 CRAN (R 4.0.2)
KernSmooth 2.23-17 FALSE 2020-04-26 CRAN (R 4.0.2)
knitr 1.30 FALSE 2020-09-22 CRAN (R 4.0.2)
later 1.1.0.1 FALSE 2020-06-05 CRAN (R 4.0.2)
lattice 0.20-41 FALSE 2020-04-02 CRAN (R 4.0.2)
leaflet 2.0.3 FALSE 2019-11-16 CRAN (R 4.0.2)
lifecycle 0.2.0 FALSE 2020-03-06 CRAN (R 4.0.2)
lubridate 1.7.9 FALSE 2020-06-08 CRAN (R 4.0.2)
lwgeom 0.2-5 FALSE 2020-06-12 CRAN (R 4.0.2)
magrittr 1.5 FALSE 2014-11-22 CRAN (R 4.0.2)
mime 0.9 FALSE 2020-02-04 CRAN (R 4.0.2)
miniUI 0.1.1.1 FALSE 2018-05-18 CRAN (R 4.0.2)
pillar 1.4.6 FALSE 2020-07-10 CRAN (R 4.0.2)
pkgconfig 2.0.3 FALSE 2019-09-22 CRAN (R 4.0.2)
promises 1.1.1 FALSE 2020-06-09 CRAN (R 4.0.2)
purrr 0.3.4 FALSE 2020-04-17 CRAN (R 4.0.2)
R6 2.4.1 FALSE 2019-11-12 CRAN (R 4.0.2)
raster 3.3-13 FALSE 2020-07-17 CRAN (R 4.0.2)
Rcpp 1.0.5 FALSE 2020-07-06 CRAN (R 4.0.2)
readr 1.3.1 FALSE 2018-12-21 CRAN (R 4.0.2)
renv 0.12.0 FALSE 2020-08-28 CRAN (R 4.0.2)
rlang 0.4.7 FALSE 2020-07-09 CRAN (R 4.0.2)
rmarkdown 2.4 FALSE 2020-09-30 CRAN (R 4.0.2)
sessioninfo 1.1.1 FALSE 2018-11-05 CRAN (R 4.0.2)
sf 0.9-6 FALSE 2020-09-13 CRAN (R 4.0.2)
shiny 1.5.0 FALSE 2020-06-23 CRAN (R 4.0.2)
sp 1.4-2 FALSE 2020-05-20 CRAN (R 4.0.2)
stars 0.4-3 FALSE 2020-07-08 CRAN (R 4.0.2)
stringi 1.5.3 FALSE 2020-09-09 CRAN (R 4.0.2)
stringr 1.4.0 FALSE 2019-02-10 CRAN (R 4.0.2)
terra 0.8-6 TRUE 2020-08-01 CRAN (R 4.0.2)
tibble 3.0.3 FALSE 2020-07-10 CRAN (R 4.0.2)
tidyselect 1.1.0 FALSE 2020-05-11 CRAN (R 4.0.2)
units 0.6-7 FALSE 2020-06-13 CRAN (R 4.0.2)
vctrs 0.3.4 FALSE 2020-08-29 CRAN (R 4.0.2)
withr 2.3.0 FALSE 2020-09-22 CRAN (R 4.0.2)
xfun 0.17 FALSE 2020-09-09 CRAN (R 4.0.2)
xml2 1.3.2 FALSE 2020-04-23 CRAN (R 4.0.2)
xtable 1.8-4 FALSE 2019-04-21 CRAN (R 4.0.2)
yaml 2.2.1 FALSE 2020-02-01 CRAN (R 4.0.2)

Corrections

If you see mistakes or want to suggest changes, please create an issue on the source repository.

Reuse

Text and figures are licensed under Creative Commons Attribution CC BY-SA 4.0. Source code is available at https://github.com/uribo/suryu.me, unless otherwise noted. The figures that have been reused from other sources don't fall under this license and can be recognized by a note in their caption: "Figure from ...".