1 はじめに

本書は、コンピュータの力を使って地理データで何かを行う方法について書かれている。 地理データの読み書きと何らかの処理、静的およびインタラクティブな地図の作成、実世界の問題を解決するためのジオコンピュテーション の適用、地理現象のモデリングなど、交通や環境系など多様な空間スキルを教える。 本書は、様々な地理的操作をどのようにリンクさせることができるかを、文章に挟まれた再現可能な「コードチャンク」で示す。このことにより、透明性のある、したがって科学的なワークフローも教えてくれる。

本書は、ジオコンコンピュテーションのために既存のツールの利点を活用することだけにとどまらない。地理データ構造を理解し、また地理データ処理によってソフトウェアを理解し、新しいツールの開発も可能にする。 本書全体で解説するコマンドライン駆動のアプローチと、Chapter 11 で解説するプログラミングにより、ソフトウェアによって課された創造性の制約を取り除くことができる。 本書を読み、演習問題を解いた後は、R の 素晴らしい地理的機能によって開かれる可能性を強く理解し、地理データを使って現実世界の問題を解決する新しいスキル、地図と再現性のあるコードで自分の仕事を伝える力を身につけたと感じるはずである。 本書の最後までに、読者が現実の課題に取り組むためにスキルを応用し、地図とコードで作業をこなし、再現可能かつフリーソフトウェア活動に参加する準備ができることを期待している。

地理空間用のフリー&オープンソースソフトウェア (FOSS4G) はここ数十年の間に驚くほどのスピードで進歩している。 OSGeo のような組織のおかげで、応用地理技術はもはや高価なハードウェアやソフトウェアを持つ人だけのものではなくなり、誰でも高性能なジオコンピュテーション向けソフトウェアをダウンロードして実行することができるようになったのである。 QGIS などのオープンソースの地理情報システム (geographical information system, GIS) により、世界中で地理分析にアクセスできるようになった。 GIS プログラムは強力であるが、本書で解説するコマンドライン・インターフェース (CLI) よりも、グラフィカル・ユーザー・インターフェース (graphical user interface, GUI) を重視する傾向がある。 多くの GIS にみられる GUI 偏重は、完全な再現性のある作業を難しくするという、意図しない副作用がある。Chapter 10 で見るように、この問題は「ジオアルゴリズム」を呼び出すことで解決することができる。 大きく異なる二つのアプローチを単純に比較すると、Table 1.1 に示すようになる。

TABLE 1.1: ソフトウェアパッケージによる重点の違い (地理情報システム (GIS) の GUI と R の GUI)。
属性 デスクトップ GIS (GUI) R
主要分野 地理学 計算機学、統計学
焦点 グラフィカル コマンド
再現性 低い 高い

R だけがジオコンピュテーションのための CLI を提供する言語ではない。 Python、Julia、JavaScript など、強力なジオコンピュテーション機能を持つコマンド環境は他にも存在する。 興味があれば、他の言語を試してみたり、本書の例を他の言語で再現してみたりすることをお勧めする。おそらく、Geocomputation with Python という本も参考になるだろう。そのオープンアクセス版は geocompx.org でもホストされている。 しかし、R にはジオコンピュテーションに適したいくつかの利点がある。 R の空間関連はインストールが簡単で、そのコアパッケージは包括的でよくメンテナンスされている。想定外の事態が少ないため、動作しなくてイライラすることなく作業に集中できる。 R には、基本的なインストールに含まれる統計関数と、多くの最先端の手法を実装したメンテナンスの行き届いた数百ものパッケージが最初から含まれている。 R を使えば、驚くほど少ないコード行数で作業を開始することができる。また、優れた地図パッケージのおかげで高品質のインタラクティブ地図を公開することもできる。この点は、Chapter 9 で解説する。

本書を執筆する動機は、科学研究における再現性の重要性 (下記注参照) である。 再現性のある地理データ解析ワークフローをより身近なものにし、コマンドラインから利用できるオープンな地理空間ソフトウェアの力を実証することを目的としている。 R は、他の言語へのインターフェースを提供し (Eddelbuettel and Balamuta 2018)、多くの空間ソフトウェアライブラリにアクセスすることができる。これについては、Section 1.2 で簡単に説明し、Chapter 10 で実行してみたい。 しかし、ソフトウェアの詳細に触れる前に、一歩下がってジオコンピュテーションとは何かを考えてみる価値がある。

再現性はコマンドラインインターフェースの大きな利点だが、実際にはどのような意味があるのだろうか。 ここでは、次のように定義している。「一般にアクセス可能なコードを用いて、他の人が同じ結果を生成できるプロセス」

これは単純で簡単に思えるかもしれないが (Rのコードをスクリプトファイルで注意深く管理すれば) 、教育や科学的プロセスにとって深い意味を持つ (Pebesma, Nüst, and Bivand 2012)

1.1 ジオコンピュテーションとは?

ジオコンピューテーションとは、コマンドラインツールやスクリプトを用いた地理データ処理、分析、モデリング、可視化のための計算手法の応用と開発であり、パフォーマンス、再現性、モジュール性に重点を置いている。 この定義は、この言葉が辞書に載った 1996 年の最初の会議まで遡る、この言葉の短い歴史に基づき、本書の重要なアイデアの多くを包み込んでいる。1

ジオコンピュテーションを (当時) 一般的に使われていた「計量地理学」と区別したのは、その初期の提唱者が提唱した、「創造的・実験的」応用 (Longley et al. 1998) と新しいツールや手法の開発に重点を置いたことである (Openshaw and Abrahart 2000)。 この用語を提唱 (かつ、おそらく定義も) した Stan Openshaw によると、「ジオコンピュテーションは、様々な異なるタイプのジオデータを使用し、「科学的」アプローチという全体的な文脈の中で、関連するジオツールを開発することである」(Openshaw and Abrahart 2000)。 この初期の定義に基づき、R によるジオコンピューテーションは、データ分析やモデリングにとどまらず、学術的に興味深いだけでなく、有益な仕事のための新しいツールや手法の開発を含む。

しかし、私たちのアプローチは当初の定義とは一点異なり、再現性とコラボレーションに重点を置いている。 21世紀初頭は、まだ必要なハードウェア、ソフトウェア、データの入手が困難で、読者がコード例を再現することは非現実的だった。 それから20年、解析環境は急速に進展している。 RAM を十分に (少なくとも 8 GB 以上) 搭載したノートパソコンがあれば、一般に公開されているデータセットにジオコンピュテーション用のソフトウェアをインストール・実行し、また本書を再現することができるはずである。 1990年代から2000年代初頭にかけて、高性能なコンピュータが一般の人々にとって手の届かないものであったために存在したジオコンピュテーションに対する金銭的・ハード的な障害は、現在では取り除かれている。2 また、公的に入手できるデータセットが広く普及してきたことも、ジオコンピュテーションはより身近になってきた理由の一つである。この点については、Chapter 8 で扱う。 この分野の初期の作品とは異なり、本書で紹介するすべての研究は、本書と一緒に提供されるコードと spData のサンプルデータを使って再現可能である。spData などの R パッケージのインストールは Chapter 2 で解説する。

ジオコンピュテーションは、地理情報科学 (GIScience) 、ジオマティクス、ジオインフォマティクス、空間情報科学、地理情報工学 (Longley 2015)、空間データサイエンス (Spatial Data Science, SDS) といった他の用語と密接に関連している。 それぞれの用語は、起源や主な適用分野は異なるものの、GIS の影響を受けた「科学的」 (再現性と反証可能性を意味する) アプローチに重点を置いている点で共通している。 例えば、SDS は「データサイエンス」のスキルと大規模なデータセットを重視し、ジオインフォマティクスはデータ構造に焦点を当てる傾向がある。 しかし、用語間の違いよりも重複の方が大きいため、すべてを包含する大まかな同義語としてジオコンピュテーションを使用している。 これらはすべて、地理データを応用科学的な作業に利用することを目的としている。 しかし、この用語の初期の使用者とは異なり、私たちは「ジオコンピュテーション (Geocomputation) 」 (または Stan Openshaw が呼んだ「ジオコンピュテーション (GeoComputation、C が大文字になっている) 」) というまとまった学術分野があることを示そうとするものではない。

ジオコンピュテーションは最近の言葉であるが、古い考えに影響を受けている。 2000年以上の歴史を持つ地理学 の一部と見ることができる (Talbert 2014)。 また、1960年代に登場した Geographic Information Systems (GIS) (Neteler and Mitasova 2008) の延長線上にあるものでもある (Coppock and Rhind 1991)

地理学は、コンピュータが発明されるずっと以前から、人類と自然界との関係を説明し、影響を与える上で重要な役割を担ってきた。 1800年代初頭、Alexander von Humboldt が南米を旅したことが、この役割を物語っている。 その結果、自然地理学や植物地理学の伝統の基礎を築いただけでなく、自然界を保護するための政策への道も開いたのである (Wulf 2015)。 本書は、現代のコンピュータとオープンソースソフトウェアの力を活用し、「地理学の伝統」 (Livingstone 1992) に貢献することを目的としている。

本のタイトル案には Geography with RR for GIS があったが、これらは古い学問分野とリンクしていることが分かる。 それぞれに利点がある。 前者は、単なる空間データ以上のもので構成されているというメッセージを伝えている。 必然的に、非空間的な属性データと地理データが織り込まれる。Geography は、何かが地図上のどこにあるかということだけではない。 後者は、この本が GIS として R を使い、地理データの空間演算を行うための本であることを伝えている (Bivand, Pebesma, and Gómez-Rubio 2013)。 しかし、GIS という言葉には、R の最大の強みを伝えきれない意味を含んでいる (Table 1.1 参照)。 強みとはすなわち、地理データ処理、モデリング、可視化タスクをシームレスに切り替えることができるコンソールベースの機能である。 これに対し、ジオコンピューテーションという言葉は、再現可能で創造的なプログラミングを意味する。 もちろん、 (ジオコンピュテーション) アルゴリズムは、非常に複雑になり得る強力なツールである。 しかし、すべてのアルゴリズムは、より小さな部分から構成されている。 その基礎となる構造を学ぶことで、地理データの問題に対する独自の革新的な解決策を生み出す力を身につけることを目的としている。

1.2 なぜ R をジオコンピュテーションに使うのか?

初期の地理学者は、気圧計、コンパス、六分儀 などのさまざまな道具を使って、世界に関する知識を深めてきた (Wulf 2015)。 海上での経度計算が可能になったのは、1761年に発明されたマリン・クロノメーターからで、これにより船はより直進的な航路をとることができるようになった。

現在では、このような地理的なデータの不足は考えにくい。 すべてのスマートフォンに全地球測位 (GPS) 受信機が搭載され、人工衛星や半自動運転車、市民科学者に至るまで、数多くのセンサーが世界のあらゆる場所を絶え間なく測定している。 データの生成速度が圧倒的に速いのである。 例えば、自律走行車は 1 日あたりテラバイト級のデータを生成することができる (The Economist 2016)。 人工衛星からのリモートセンシングデータが膨大になり、対応するデータを 1 台のコンピュータで解析することが難しくなったため、 OpenEO のような取り組みが行われている。

この「ジオデータ革命」は、高性能なコンピュータハードウェアと、効率的でスケーラブルなソフトウェアに対する需要を喚起し、ノイズから信号を処理・抽出することで、世界を理解し、おそらく世界を変えることができる。 空間データベースは、膨大な地理データの保存と管理可能な部分集合の生成を可能にし、そこから知識を得るためのインターフェースは、今後の重要なツールになる。 R はそのようなツールの一つで、高度な分析、モデリング、可視化機能を備えている。 この文脈では、本書の焦点は言語そのものにあるわけではない (Wickham 2019 参照)。 その代わりに、私たちは R を世界を理解するための「商売道具」として使っている。Humboldt がその複雑さと相互関係のすべてにおいて自然を深く理解するために道具を使ったのと同じようにである (Wulf 2015 参照)。 プログラミングは還元主義的な活動に見えるが、R を使ったジオコンピュテーションを楽しむだけでなく、世界を理解するために教えることを目的としている。

R は、統計計算とグラフィックスのための、マルチプラットフォームなオープンソース言語・環境である (r-project.org/)。 R は、幅広いパッケージによって高度な地理空間統計学 、モデリング、可視化もサポートしている。 RStudioのような新しい統合開発環境 (integrated development environment、IDE) のおかげで、より多くの人が R を使えるようになった。特に、インタラクティブな視覚化専用のパネルがあることで地図の作成が容易になった。

R はの核は、オブジェクト指向の関数型プログラミング言語 (Wickham 2019)である。これに加えて、他のソフトウェアとの対話型インタフェースも設計されている (Chambers 2016)。 後者には、GIS ソフトウェア、「ジオライブラリ」、関数の宝庫への「ブリッジ」も多く含まれている (Chapter 10 を参照)。 そのため、C 言語、FORTRAN、Java などの (R と比較して) 低レベルな言語を習得する必要がなく、「ジオツール」を素早く作成するのに理想的である (Section 1.3 を参照)。 これは、GUI ベースの地理情報システムやプロプライエタリな地理情報システムが課す比喩的な「見えない壁」からの脱却のように感じられるだろう (GUI の定義については Table 1.1 を参照)。 さらに、R は他の言語へのアクセスを容易にしている。 例えば、パッケージの Rcpp は C++ の、reticulate は Python のコードを実行できるようにする。 つまり、R はさまざまな地理空間プログラムへの「橋渡し役」として使用できるのである (Section 1.3 参照)。

R の柔軟性と進化する地理的機能を示すもう一つの例は、インタラクティブな地図作成である。 Chapter 9 で見るように、R には「限られた対話型 (プロット) 機能しかない」 (Bivand, Pebesma, and Gómez-Rubio 2013) というのは、もはや真実ではない。 これは、Figure 1.1 を作成する以下のコードチャンクで実証されている (プロットを生成する関数は、Section 9.4 でカバーされている)。

library(leaflet)
popup = c("Robin", "Jakub", "Jannes")
leaflet() |>
  addProviderTiles("NASAGIBS.ViirsEarthAtNight2012") |>
  addMarkers(lng = c(-3, 23, 11),
             lat = c(52, 53, 49), 
             popup = popup)

FIGURE 1.1: 青いマーカーは著者の出身地を示している。ベースマップは、NASAが提供する夜の地球のタイル画像。オンライン版 (geocompr.robinlovelace.net) では、ズームインしたりポップアップをクリックするなどして、インタラクティブに楽しむことができる。

インタラクティブな地図としてならともかく、数年前に R を使って Figure 1.1 を作成するのは困難だっただろう。 これは R の柔軟性と、knitrleaflet などの開発のおかげで、他のソフトウェアへのインターフェースとして使用できることを示すもので、本書を通じて繰り返し出てくるテーマである。 そのため、R コードを使用することで、抽象的な概念だけでなく、現実の現象を表す再現性の高い事例を参考にしながらジオコンピュテーションの教育を行うことができる。

1.3 ジオコンピュテーションのためのソフトウェア

R は地理計算のための強力な言語であるが、地理データ解析のための他の多くの選択肢があり、何千もの地理関数を提供している。 地理計算のための他の言語を理解することは、特定のタスクに別のツールがより適切である場合を決定し、より広い地理空間生態系に R を配置するのに役立つ。 本節では、Chapter 10 に向けて、ジオコンピュテーションのための言語 C++JavaPython を簡単に紹介する。

R (と Python) の重要な特徴として、インタプリタ型言語であることが挙げられる。 REPL (Read-Eval-Print Loop) で対話的にプログラミングできるのがメリットである。 コンソールに入力されたコードは、コンパイルという中間段階を待たずに、即座に実行され、結果が表示される。 一方、C++ や Java などのコンパイルされた言語は、 (一度コンパイルされると) 動作が速くなる傾向がある。

C++ は、QGISGRASS GISSAGA などの多くの GIS パッケージの基礎を提供しているので、賢明な出発点であると言えるだろう。 よく書かれた C++ は非常に高速で、大規模な地理データセットを処理するようなパフォーマンスが重要なアプリケーションに適しているが、Python や R に比べて習得が困難である。 C++ は、Rcpp パッケージによってよりアクセスしやすくなり、R ユーザーのために C プログラミングへの良い「入り方」を提供している。 このような低レベルの言語を使いこなすことで、新しい高性能な「ジオアルゴリズム」を生み出す可能性や、GIS ソフトウェアの仕組みをより深く理解することができる (Chapter 11 を参照)。 しかし、R を使用してジオコンピュテーションを行う際には、必ずしも C++ を学ぶ必要はない。

Python は、特に GRASS GIS、SAGA、QGIS などの多くのデスクトップ GIS が Python API を提供しているので、ジオコンピュテーションには重要な言語である (Chapter 10 を参照)。 Python は、R と同様、データサイエンスのための有名なツールである。 両言語はオブジェクト指向であり、重複する部分が多いため、R から Python へのアクセスを容易にする reticulate パッケージや、オープンソースデータサイエンスエコシステム全体の利益のためにポータブルライブラリをサポートする Ursa Labs イニシアチブなどの取り組みに繋がっている。

実際には、R と Python のどちらにも強みがあり、どちらを使うかは、ある程度、応用や結果の伝達の領域よりは重要ではない。 どちらかを習得することで、もう一方を習得するためのスタートラインに立つことができるのである。 しかし、ジオコンピュテーションにおいては、Python よりも R の方が大きな利点がある。 R 言語自体の地理ラスタデータモデルのサポートが大幅に向上したこと (Chapter 2)、それに対応する可視化の可能性 (Chapter 2 と Chapter 9 参照) が含まれる。 同様に重要なこととして、R は空間統計 を含む統計のための比類ないサポートを持っており、何百ものパッケージ (Python の比ではない) が何千もの統計手法をサポートしている。

Python の大きな利点は、汎用プログラミング言語であることである。 デスクトップソフトウェア、コンピュータゲーム、Web サイト、データサイエンスなど、多くの領域で使用されている。 Python は、異なる (ジオコンピュテーション) コミュニティ間で唯一共有される言語であることが多く、多くの GIS プログラムをまとめる「接着剤」と見なすことができる。 QGIS や ArcMap を含む多くのジオアルゴリズムは、Python のコマンドラインからアクセスできるため、コマンドライン GIS のスターター言語として適している3

しかし、空間統計と予測モデリングでは、R は他の追随を許さない。 これは、R と Python のどちらかを選ばなければならないということではない。Python は、ほとんどの一般的な統計手法をサポートしており (ただし、空間統計の新しい開発は R の方が早くサポートする傾向がある) 、Python で学んだ多くの概念は R の世界にも適用することができる。 R と同様に、Python も地理データの解析と操作をサポートしており、shapelygeopandasrasterioxarray などのパッケージがある。

1.4 Rの空間エコシステム

R で地理データを扱う方法はたくさんあり、この分野では何十ものパッケージがある。4 本書では、この分野の最先端を学ぶと同時に、将来的にも通用する手法を確保するよう努めることとした。 ソフトウェア開発の多くの分野と同様に、R の空間エコシステムは急速に進化している (Figure 1.2)。 R はオープンソースであるため、Isaac Newton が 1675 で述べたように、「巨人の肩の上に立つ」ことによって、これらの開発は容易に過去の研究の上に構築することができるのである。 この方法は、コラボレーションを促進し、「車輪の再発明」を避けることができるという利点がある。 例えば、sf (Chapter 2 で取り上げている) というパッケージは、前身の sp の上に構築されたものである。

R-spatial の開発時間が急増し、R コンソーシアムから、ベクタ形状の保存とアクセスのためのオープンソースの標準とモデルであるシンプルフィーチャのサポートの開発に対する助成金が授与された。 その結果、sf パッケージ (Section 2.2.1) が誕生したのである。 複数の場所で sf への絶大な関心を反映している。 特に、長年にわたって蓄積された R-spatial の知恵を多く含むオープンアクセスのメールリストである R-sig-Geo Archives がそうである。

2013年初頭から現在までの、地理データを扱うための R パッケージのダウンロード数。y軸は、よく使われる cloud.r-project.org CRAN ミラーからの日次ダウンロードの平均数を91日間ローリングウィンドウ法で示している (対数スケール)。

FIGURE 1.2: 2013年初頭から現在までの、地理データを扱うための R パッケージのダウンロード数。y軸は、よく使われる cloud.r-project.org CRAN ミラーからの日次ダウンロードの平均数を91日間ローリングウィンドウ法で示している (対数スケール)。

データ処理パッケージ dplyr (2014年にリリース) に代表されるように、より広い R コミュニティのシフトが R の空間エコシステムのシフトに影響を与えたことは注目に値する。 dplyr2016年 の後半に tidyverse という「メタパッケージ」に配置され、スタイルを共有する他のパッケージ (例えば、ggplot2 など) と並び、「整えられた (tidy) データ」に重点を置いている。 ロング型データと直感的な名前の関数に焦点を当てた tidyverse アプローチは、絶大な人気を誇っている。 そのため、「整えられた地理的データ」が求められ、その一部を sf が担ってきている。 tidyverse の明らかな特徴として、パッケージが調和して動作する傾向がある。 同等の geoverse はないが、 r-spatial 組織でホストされているパッケージ間の調和を図る試みがあり、sf を使うパッケージが増えつつある (Table 1.2)。

TABLE 1.2: sf に依存するパッケージで、前月の 1 日あたりの平均ダウンロード数が多い上位 5 位。 2023-11-14 時点で、 526 件のパッケージが sf をインポートしている。
パッケージ ダウンロード数
r5r 4774
stars 1354
leafem 1013
spdep 881
tmap 873

並行して行われる開発群は、 rspatial パッケージ群に関連するものである。5 主なメンバーは、空間ラスタを扱う terra パッケージである (Section 2.3.2 を参照)。

1.5 R-spatial の歴史

最新の空間パッケージである sf を使うメリットはたくさんあるが、R の空間機能の歴史を知っておくことも重要である。多くの機能、ユースケース、教材は古いパッケージに含まれている。 古いものにも、見るところさえ分かれば、今でも十分役に立つ。

R の空間機能は、S 言語の初期の空間パッケージが起源である (Bivand and Gebhardt 2000)。 1990年代には、数多くの S スクリプトが開発され、空間統計のためのパッケージも数多く開発された。 2000 年までに、「点パターン解析、地球統計学、探索的空間データ解析、空間経済学」という様々な空間手法のための R パッケージが誕生した (Bivand and Neteler 2000)。 これらのうち、特に spatialsgeostatsplancs は CRAN でまだ利用可能である (B. S. Rowlingson and Diggle 1993; B. Rowlingson and Diggle 2017; Venables and Ripley 2002; Majure and Gebhardt 2016)

その後の R News (The R Journal の前身) の記事には、当時の R の空間統計ソフトウェアの概要が掲載されており、その多くは S/S-PLUS のために書かれた以前のコードに基づいていた (Ripley 2001)。 この概要では、akimageoR (Akima and Gebhardt 2016; Jr and Diggle 2016) などの空間平滑化や補間のパッケージ、splancs (B. Rowlingson and Diggle 2017)spatstat (Baddeley, Rubak, and Turner 2015) などの点パターン解析のパッケージについて説明した。

R News の次の号 (Volume 1/3) では、空間系パッケージに再びスポットライトを当て、splancs をより詳しく紹介し、空間統計に関する将来の展望を解説した (Bivand 2001)。 さらに、この問題では空間自己相関を検定するための 2 つのパッケージが紹介され、最終的には spdep (Bivand 2017) の一部となった。 特に、空間インターフェースの標準化、GIS とのデータ交換の効率的な仕組み、座標参照系 (coordinate reference systems, CRS) などの空間メタデータの取り扱いの必要性について言及している。

maptools (Nicholas Lewin-Koh 作成; Bivand and Lewin-Koh (2017)) もこの時の重要なパッケージである。 当初 maptoolsshapelib のラッパーを含んでいるだけで、ESRI Shapefiles をジオメトリのネストされたリストに読み込むことを許可していた。 対応する、今では廃止されたS3クラス の “Map” は、このリストを属性データフレームと一緒に保存していた。 それにもかかわらず、“Map” クラス表現に関する作業は、CRAN で出版される前の sp に直接反映されたので重要であった。

2003年、Roger Bivand は空間パッケージの拡張レビューを発表した。 「GDAL が提供するデータオブジェクト」をサポートするクラスシステムを提案し、「基本的な」点、線、ポリゴン、ラスタタイプを含む。 さらに、外部ライブラリへのインタフェースは、モジュール化された R パッケージの基礎となるべきであると提言している (Bivand 2003)。 これらのアイデアは、rgdalsp というパッケージで、かなりの部分実現されている。 これらは、2008年に初版が発行された Applied Spatial Data Analysis with R (ASDAR) (Bivand, Pebesma, and Gómez-Rubio 2013) で説明されているように、R による空間データ解析の基礎を提供するものであった。 10年後、R の空間機能は大幅に進化したが、Bivand (2003) で示されたアイデアの上に成り立っていることに変わりはない。 例えば、GDAL と PROJ のインターフェースは、R の高性能な地理データ入出力と CRS 変換機能を依然として支えている (それぞれ、Chapter 7 および Chapter 8 を参照)。

2003 年にリリースされた rgdal は、R に GDAL バインディングを提供し、これまで利用できなかった地理データ形式からデータをインポートする機能を大幅に向上させることとした。 初期リリースではラスタドライバのみをサポートしていたが、その後の機能拡張により、座標参照系 (PROJ ライブラリ経由) 、再投影、ベクタファイル形式のインポート (ファイル形式については Chapter 8 を参照) をサポートするようになった。 これらの追加機能の多くは、Barry Rowlingson によって開発され、2006年に rgdal コードベースでリリースされた (コンテキストについては、 B. Rowlingson et al. (2003)R-help email list を参照)。

2005年にリリースされた sp は、R の空間オブジェクトと非空間オブジェクトの区別ができない点を克服した (Pebesma and Bivand 2005)sp は 2003年にウィーンで開かれたワークショップから発展し、当初は SourceForge でホストされていたが、R-Forge、GitHub へと移行した。 2005年以前は、地理座標は一般的に他の数値と同様に扱われていた。 点、線、ポリゴン、グリッド、属性データをサポートするクラスと汎用メソッドにより、sp はこれを変更した。

sp は、S4 クラスシステムを使用して、バウンディングボックス、座標参照系、属性などの情報を Spatial オブジェクトのスロットに格納する。 データ操作で地理データを扱えるようにする (Section 2.2.2 参照)。 さらに、sp では、地理データのための summary()plot() などの汎用的なメソッドが用意されている。 その後の 10年間で sp クラスは R の地理データ用として急速に普及し、これに依存するパッケージの数は2008年の約 20 から 2013 年には 100 以上に増加した (Bivand, Pebesma, and Gómez-Rubio 2013)。 2019年までに sp に依存するパッケージは 500 を超えたが、sf やその他のパッケージに移行するためその数は減少している。 sp を使用する主な R パッケージには、空間・時空間地球統計学の gstat 、球面三角法の geosphere などがある (Pebesma and Graeler 2023; Calenge 2006; Hijmans 2016)

rgdalsp は空間に関する多くの問題を解決したが、2010年の Google Summer of Code プロジェクト ((Bivand and Rundel 2023)) で rgeos が開発されるまで、sp オブジェクトでジオメトリ操作を行うことができなかった。 gIntersection() などの機能により、地理的なオブジェクト間の空間的な関係を見つけたり、その形状を変更したりすることが可能になった (sfによる幾何学的な操作の詳細については、Chapter 5 を参照)。

sp エコシステムの限界は、ラスタデータのサポートが限定的であることであった。 これを克服したのが、2010年に初めてリリースされた raster である (Hijmans 2023b)。 Section 2.3 にあるように、raster クラスシステムと関数によって、さまざまなラスタ操作が可能になり、現在では terra パッケージに実装されている。 rasterterra の重要な機能は、RAM に収まらないほど大きなデータセットを扱うことができることであり、ディスク外操作もサポートしている。 raster および terra は、Section 4.3.2 で説明されているように、マップ代数もサポートしている。

このようなクラスシステムや手法の開発と並行して、専用の GIS ソフトのインターフェースとして R がサポートされるようになった。 GRASS (Bivand 2000) とそれに続くパッケージ spgrass6rgrass7rgrass (それぞれ GRASS GIS 6 と 7 と 7 + 8 に対応) は、この方向性の顕著な例であった (Bivand 2016a, 2016b, 2023)。 R と GIS の橋渡しの例としては、他に RSAGA (Brenning, Bangs, and Becker 2022, first published in 2008)RPyGeo (Brenning 2012a、2008 年に初登場)RQGIS (Muenchow, Schratz, and Brenning 2017、2016 年に初登場)qgisprocess がある (Chapter 10 参照)。

R-spatial の開発の大部分は解析と地理的な操作に集中しており、当初は可視化には焦点が当てられていなかった。 base と lattice の両方のプロット方式で地図を作る方法を提供していた sp であるが、高度な地図作成機能への要望が高まっていた。 2009 年にリリースされた RgoogleMaps は、Google Maps や OpenStreetMap (Loecher and Ropkins 2015) などのオンラインサービスの「ベースマップ」タイルの上に R 空間データを重ね合わせることができる。 その後、ggplot2 (Kahle and Wickham 2013) に同様の「ベースマップ」タイル機能を追加した ggmap パッケージがリリースされた。 gpmapggplot2 で地図を作ることを容易にしたが、fortify 空間オブジェクトをロング形式のデータフレームに変換する必要があるため、その実用性は限られていた。 これは点に対してはうまくいくが、線やポリゴンに対しては計算効率が悪く、各座標 (頂点) が行に変換されるため、複雑な形状を表現するためには巨大なデータフレームが必要となるのである。 地理的な可視化はベクタデータを中心に行われる傾向があるが、ラスタの可視化は raster でサポートされており、空間と時間のデータの可視化に関する書籍 (Lamigueiro 2018) で紹介されている rasterVis のリリースで盛り上がりを見せた。 それ以来、R での地図作成は話題となり、Chapter 9 で強調されているように、tmapleafletrayshadermapviewなどの専用パッケージが人気を博している。

Geocomputation with R 第 1 版が出版された2018年以降、地理系 R パッケージの開発が加速している。 raster パッケージの後継である terra は、2020年に初めてリリースされ、ラスタデータセットを扱う R ユーザーにいくつかの利点をもたらしている [@-terra]。Section 2.3 で説明されているように、前任者よりも高速でより分かりやすいユーザーインターフェースを持っている。

2021年半ば、sf パッケージに球面幾何学計算を取り入れるという大幅な (場合によっては破たんする) 変更が行われた。 それ以来、地理的 CRS を持つデータに対する多くの空間演算は、Section 2.2.9 で説明されているように、バックエンドとして S2 球形ジオメトリエンジンを使うのがデフォルトになっている。 また、2018年以降の R で地理データを表現し作業する方法として、starslidR パッケージが追加されている。 sf と密接に統合されている stars は、ラスタおよびベクタデータキューブを処理する (Pebesma 2021)。 空中の LiDAR (Light Detection and Ranging) 点群を lidR 処理する (Roussel et al. 2020)

この近代化には、新しい技術や標準の出現、R環境以外での空間ソフトウェア開発による影響など、いくつかの動機があった (Bivand 2021)。 R 空間パッケージを含むほとんどの空間ソフトウェアに影響を与える最も重要な外部要因は、2018年に始まった PROJ ライブラリ の多くの破壊的な変更を含む大規模なアップデートであった。 最も重要なのは、これらの変更により、座標参照系の「proj-string」表現が、Section 2.4 と Chapter 7 で説明されているように、「Well Known Text」に置き換えられなければならなくなったことである。

2018年以降、R による空間可視化ツールの進展は、いくつかの要因が関係している。 まず、新しいタイプの空間プロットが開発され、レイトレーシングと複数のヒルシェード手法を組み合わせて 2D および 3D のデータ可視化を行う rayshader パッケージが提供された (Morgan-Wall 2021)。 第二に、ggplot2 は、スケールバーや北矢印などの空間可視化要素を追加する ggspatial パッケージ (Dunnington 2021) と、スムーズでカスタマイズ可能な空間アニメーションを可能にする gganimate パッケージ (Pedersen and Robinson 2020) など、新しく空間機能が追加された。 第三は、大規模な空間データの可視化性能の向上である。 特に、tmap におけるダウンスケールしたラスタの自動プロットや、mapview パッケージの高性能インタラクティブレンダリングプラットフォーム ("leafgl""mapdeck" など) の使用可能性に関連している。 最後に、既存のマッピングツールの中には、依存関係の最小化、ユーザーインターフェースの改善、拡張機能の作成が容易になるように書き直されたものがある。 これには mapsf パッケージ (cartography の後継) (Giraud 2021)tmap パッケージのバージョン 4 が含まれ、内部コードの大部分が改訂された。

2021 年後半、Roger Bivand が R-sig-Geo mailing list において rgdalrgeosmaptools を引退させる予定であることが発表された。 2023 年にこれらのパッケージが引退したことは、パッケージを利用する作業に大きな影響を与えただけでなく、これらのパケージに依存しているパッケージにも影響を与えた。 そこで、Bivand は、本書の次の章で説明するように sfterra などより現代的なツールへの移行を提案した。

1.6 演習

E1. GIS、GDS、ジオコンピュテーションという用語について考察しなさい。あなたが行おうとしている内容は、どれが最も当てはまるか、理由とともに説明しなさい。

E2. QGIS のようなグラフィカルユーザーインターフェース (GUI) ではなく、R のようにスクリプトでジオコンピュテーションを行う理由を 3 つ答えなさい。

E3. 2000年に、Stan Openshaw が、ジオコンピュテーションは「便利で有益な実務」な面があると述べた。現実の課題と、地理データの解析、可視化、モデル化から得られるエビデンスから得られる解決策の例を考えなさい。紙と鉛筆 (またはコンピュータ) で、入力と出力を描き、ジオコンピュテーションがどのように役に立つかを示しなさい。