Skip to content

Commit

Permalink
chapters
Browse files Browse the repository at this point in the history
  • Loading branch information
babayoshihiko committed Jun 11, 2024
1 parent 5632742 commit 5bea13c
Show file tree
Hide file tree
Showing 15 changed files with 100 additions and 107 deletions.
19 changes: 7 additions & 12 deletions 01-introduction-ja.Rmd
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,9 @@ source("code/before_script.R")
地理データの読み書きと何らかの処理、静的およびインタラクティブな地図の作成、実世界の問題を解決するためのジオコンピュテーション\index{じおこんぴゅてーしょん@ジオコンピュテーション} の適用、地理現象のモデリングなど、交通や環境系など多様な空間スキルを教える。
本書は、様々な地理的操作をどのようにリンクさせることができるかを、文章に挟まれた再現可能な「コードチャンク」で示す。このことにより、透明性のある、したがって科学的なワークフローも教えてくれる。

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

地理空間用のフリー&オープンソースソフトウェア (FOSS4G\index{FOSS4G}) はここ数十年の間に驚くほどのスピードで進歩している。
OSGeo のような組織のおかげで、応用地理技術はもはや高価なハードウェアやソフトウェアを持つ人だけのものではなくなり、誰でも高性能なジオコンピュテーション向けソフトウェアをダウンロードして実行することができるようになったのである。
Expand All @@ -35,12 +34,8 @@ knitr::kable(x = d,
```

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

本書を執筆する動機は、科学研究における再現性の重要性\index{さいげんせい@再現性} (下記注参照) である。
再現性のある地理データ解析\index{ちりでーたかいせき@地理データ解析}ワークフローをより身近なものにし、コマンドラインから利用できるオープンな地理空間ソフトウェアの力を実証することを目的としている。
Expand Down Expand Up @@ -90,9 +85,9 @@ R とコードエディタのインストール方法は、Chapter \@ref(spatial
また、1960年代に登場した *Geographic Information Systems* (GIS\index{GIS}) [@neteler_open_2008] の延長線上にあるものでもある [@coppock_history_1991]

地理学\index{ちりがく@地理学}は、コンピュータが発明されるずっと以前から、人類と自然界との関係を説明し、影響を与える上で重要な役割を担ってきた。
1800年代初頭、Alexander von Humboldt\index{von Humboldt} が南米を旅したことが、この役割を物語っている
その結果、自然地理学や植物地理学の伝統の基礎を築いただけでなく、自然界を保護するための政策への道も開いたのである [@wulf_invention_2015]
本書は、現代のコンピュータとオープンソースソフトウェアの力を活用し、「地理学の伝統」 [@livingstone_geographical_1992] に貢献することを目的としている。
著名な探検家・地理学者であり博識であった Alexander von Humboldt\index{von Humboldt} (彼の名前を冠した種、地物、大学などがある) が、この役割を以下のように説明している
1800年代初めに南米を旅行した際に自然地理学や植物地理学の伝統の基礎を築いただけでなく、自然界を保護するための政策への道も開いたのである [@wulf_invention_2015]
本書は、現代のコンピュータとオープンソースソフトウェアの力を活用し、進化し続ける「地理学の伝統」 [@livingstone_geographical_1992] に貢献することを目的としている。

本のタイトル案には *Geography with R**R for GIS* があったが、これらは古い学問分野とリンクしていることが分かる。
それぞれに利点がある。
Expand Down
16 changes: 8 additions & 8 deletions 02-spatial-data-ja.Rmd
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ R のスクリプト、出力、その他ジオコンピュテーションに関
また、学習をサポートするため、[ソースコード](https://github.com/geocompx/geocompr)[ダウンロード](https://github.com/geocompx/geocompr/archive/refs/heads/main.zip) または[クローン](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository)しておくと良い。
R コードを書く/実行する/テストする際には、 [RStudio](https://posit.co/download/rstudio-desktop/#download) (ほとんどの人に推奨)\index{RStudio} または [VS Code](https://github.com/REditorSupport/vscode-R)\index{VS Code} などの統合開発環境 (integrated development environment, IDE) をインストールすることを強く勧める。

R を初めて使う方は、R のコードを使ったジオコンピュテーションに入る前に、Garrett Grolemund の [Hands on Programming with R](https://rstudio-education.github.io/hopr/starting.html)Claudia Engel の [Introduction to R](https://cengel.github.io/R-intro/) などの R 入門リソースに従うことを勧める。
R を初めて使う方は、R のコードを使ったジオコンピュテーションに入る前に、Garrett Grolemund の [Hands on Programming with R](https://rstudio-education.github.io/hopr/starting.html)[Introduction to R](https://cengel.github.io/R-intro/) などの R 入門リソースに従うことを勧める。
これらのリソースには R のインストール方法が詳細に書かれており、[Comprehensive R Archive Network (CRAN)](https://cran.r-project.org/) から最新バージョンをダウンロードすることも書かれている。
下記の注記は、Mac と Linux について、ジオコンピュテーションするために R をインストールするための情報がある。
作業内容を整理し (例: RStudio プロジェクト)、スクリプトに `chapter-02-notes.R` などのわかりやすい名前を付けて、学習しながらコードを記録するとよい。
Expand Down Expand Up @@ -126,13 +126,13 @@ source("https://github.com/geocompx/geocompr/raw/main/code/02-vectorplots.R") #
```

```{r vectorplots, fig.cap="原点 (青丸) を基準にロンドン (赤 X) の位置を表したベクトル (点) データの図解。左図は、緯度経度 0° を原点とする地理的な CRS。右図は、South West Peninsula の西側の海を原点とする投影 CRS を表している。", out.width="49%", fig.show='hold', echo=FALSE, fig.scap="Illustration of vector (point) data."}
knitr::include_graphics(c("figures/vector_lonlat.png", "figures/vector_projected.png"))
knitr::include_graphics(c("images/vector_lonlat.png", "images/vector_projected.png"))
```

**sf** パッケージは、地理ベクタデータ用のクラスと、以下に説明する地理計算のための重要な低レベルライブラリへのコマンドラインインターフェースを一貫した方法で提供する。

- [GDAL](https://gdal.org/)\index{GDAL} は、Chapter \@ref(read-write) でカバーされる広範な地理データ形式の読み取り、書き込み、操作のためのものである。
- [PROJ](https://proj.org/) は、 Chapter \@ref(reproj-geo-data) で扱う内容の根幹をなす座標系変換のための強力なライブラリ。
- [PROJ](https://proj.org/) は、Chapter \@ref(reproj-geo-data) で扱う内容の根幹をなす座標系変換のための強力なライブラリ。
- [GEOS](https://libgeos.org/)\index{GEOS} は、投影型 CRS を持つデータに対してバッファや重心の計算などの操作を行う平面ジオメトリエンジン、Chapter \@ref(geometry-operations) でカバーする。
- [S2](https://s2geometry.io/) は、Google が開発した C++ で書かれた球面幾何学エンジンである。[**s2**](https://r-spatial.github.io/s2/) パッケージ経由で、この章の Section \@ref(s2) と Chapter \@ref(reproj-geo-data) でカバーする。

Expand All @@ -158,7 +158,7 @@ OGC 標準の完全版には、「サーフェス (surface)」や「カーブ (c
]

```{r sf-ogc, fig.cap="sf が完全にサポートするシンプルフィーチャ型", out.width="60%", echo=FALSE}
knitr::include_graphics("figures/sf-classes.png")
knitr::include_graphics("images/sf-classes.png")
```

**sf** は、点、線、ポリゴン、およびそれらの「複合」バージョン (同じ種類のフィーチャをまとめて 1 つのフィーチャとするもの) という一般的なベクタフィーチャのタイプをすべて表現できる (ラスタデータクラスは **sf** ではサポートされていない)。
Expand Down Expand Up @@ -473,7 +473,7 @@ Figure \@ref(fig:02-sfdiagram) は sf オブジェクトの作成方法を示し

```{r 02-sfdiagram, fig.cap="sf オブジェクトの構成。", echo=FALSE}
# source("code/02-sfdiagram.R")
knitr::include_graphics("figures/02-sfdiagram.png")
knitr::include_graphics("images/02-sfdiagram.png")
```

フィーチャ以外の属性は、フィーチャの名称や、測定値、グループなどの属性を表す。
Expand Down Expand Up @@ -811,7 +811,7 @@ S2 ジオメトリエンジンはデフォルトでオンになっている。
sf_use_s2()
```

ジオメトリエンジンをオフにした結果の例を以下に示す。この章で作成した `india` オブジェクトの周りにバッファを作成する (S2 をオフにしたときに発せられる警告に注意) (Figure \ref(fig:s2example))。
ジオメトリエンジンをオフにした結果の例を以下に示す。この章で作成した `india` オブジェクトの周りにバッファを作成する (S2 をオフにしたときに発せられる警告に注意) (Figure \@ref(fig:s2example))。

```{r}
india_buffer_with_s2 = st_buffer(india, 1) # 1 メートル
Expand Down Expand Up @@ -1086,7 +1086,7 @@ Figure \@ref(fig:datum-fig) の二つの測地系は、ジオイド (地球平
(ref:datum-fig) ジオイドの上に表示された地心座標系およびローカル測地系データ (フォールスカラーと、スケールファクター1万による垂直方向の誇張)。ジオイドの画像は @essd-11-647-2019 の作品から流用したものである。

```{r datum-fig, echo=FALSE, message=FALSE, fig.cap="(ref:datum-fig)", fig.scap="Geocentric and local geodetic datums on a geoid."}
knitr::include_graphics("figures/02_datum_fig.png")
knitr::include_graphics("images/02_datum_fig.png")
```

### 投影座標参照系 {#projected-coordinate-reference-systems}
Expand Down Expand Up @@ -1122,7 +1122,7 @@ Chapter \@ref(reproj-geo-data) では、CRS について説明し、ある CRS

```{r vector-crs, echo=FALSE, fig.cap="ベクタデータ型の地理座標系 (WGS 84、左) と投影座標系 (NAD83 / UTMゾーン12N、右) の例。", message=FALSE, fig.asp=0.56, fig.scap="Examples of geographic and projected CRSs (vector data)."}
# source("https://github.com/geocompx/geocompr/raw/main/code/02-vector-crs.R")
knitr::include_graphics("figures/02_vector_crs.png")
knitr::include_graphics("images/02_vector_crs.png")
```

## 単位 {#units}
Expand Down
14 changes: 4 additions & 10 deletions 04-spatial-operations-ja.Rmd
Original file line number Diff line number Diff line change
Expand Up @@ -197,11 +197,6 @@ polygon_sfc = st_sfc(st_polygon(list(polygon_matrix)))
関数 `st_as_sf()` と引数 `coords` を使って、座標を表す列を含むデータフレームから、点を含む `sf` オブジェクトに効率的に変換していることに注目してみよう。

```{r}
line_sfc = st_sfc(st_linestring(cbind(
x = c(0.4, 1),
y = c(0.2, 0.5)
)))
# create points
point_df = data.frame(
x = c(0.2, 0.7, 0.4),
y = c(0.1, 0.2, 0.8)
Expand All @@ -212,7 +207,6 @@ point_sf = st_as_sf(point_df, coords = c("x", "y"))
```{r relation-objects, echo=FALSE, fig.cap="点、線、ポリゴンのオブジェクトを配置し、トポロジー関係を表現。", fig.asp=1, out.width="50%", fig.scap="Demonstration of topological relations."}
par(pty = "s")
plot(polygon_sfc, border = "red", col = "gray", axes = TRUE)
plot(line_sfc, lwd = 5, add = TRUE)
plot(point_sf, add = TRUE, lab = 1:4, cex = 2)
text(point_df[, 1] + 0.02, point_df[, 2] + 0.04, 1:3, cex = 1.3)
```
Expand Down Expand Up @@ -686,7 +680,7 @@ sum(st_coordinates(cycle_hire)[, 1] %in% st_coordinates(cycle_hire_osm)[, 1])

```{r cycle-hire, fig.cap="公式データ (青) とOpenStreetMapのデータ (赤) に基づく、ロンドンにおける自転車レンタルポイントの空間分布。", echo=FALSE, warning=FALSE, fig.scap="The spatial distribution of cycle hire points in London."}
if (knitr::is_latex_output()){
knitr::include_graphics("figures/cycle-hire-1.png")
knitr::include_graphics("images/cycle-hire-1.png")
} else if (knitr::is_html_output()){
# library(tmap)
# osm_tiles = tmaptools::read_osm(tmaptools::bb(cycle_hire, ext = 1.3), type = "https://korona.geog.uni-heidelberg.de/tiles/roadsg/x={x}&y={y}&z={z}")
Expand Down Expand Up @@ -862,7 +856,7 @@ elev[clip]
これは、Figure \@ref(fig:raster-subset) に示すように、2 番目のラスタ (ここでは `clip`) の範囲内にある最初のラスタオブジェクト (この場合は `elev`) の値を取得することになる。

```{r raster-subset, echo = FALSE, fig.cap = "元のラスタ (左)。ラスタマスク (中)。ラスタをマスクした出力 (右)。", fig.scap="Subsetting raster values."}
knitr::include_graphics("figures/04_raster_subset.png")
knitr::include_graphics("images/04_raster_subset.png")
```

上記の例では、特定のセルの値を返したが、多くの場合、ラスタデータセットの部分集合操作による空間出力が必要である。
Expand Down Expand Up @@ -956,7 +950,7 @@ elev > 5
```

```{r 04-local-operations, echo=FALSE, fig.cap="elev ラスタオブジェクトのさまざまなローカル操作の例: 2つのラスタの加算、二乗、対数変換の適用、論理演算の実行。"}
knitr::include_graphics("figures/04-local-operations.png")
knitr::include_graphics("images/04-local-operations.png")
```

ローカル演算のもう一つの良い例は、デジタル標高モデルを低標高 (クラス 1)、中標高 (クラス 2)、高標高 (クラス 3) にグループ化するように、数値の間隔をグループに分類することである。
Expand Down Expand Up @@ -1067,7 +1061,7 @@ r_focal = focal(elev, w = matrix(1, nrow = 3, ncol = 3), fun = min)
この関数は、例えば、プロセス中の NA を削除すべきか (`na.rm = TRUE`)、しないか (`na.rm = FALSE`) などの追加引数も受け付ける。

```{r focal-example, echo = FALSE, fig.cap = "焦点演算による入力ラスタ (左) と出力ラスタ (右) -3×3の移動窓で最小値を求める。", fig.scap="Illustration of a focal operation."}
knitr::include_graphics("figures/04_focal_example.png")
knitr::include_graphics("images/04_focal_example.png")
```

期待通りの出力が得られるかどうか、すぐに確認することができる。
Expand Down
2 changes: 1 addition & 1 deletion 05-geometry-operations-ja.Rmd
Original file line number Diff line number Diff line change
Expand Up @@ -538,7 +538,7 @@ p_sc1 = tm_shape(st_sfc(multipoint, crs = "+proj=merc")) + tm_symbols(shape = 1,
p_sc2 = tm_shape(st_sfc(linestring, crs = "+proj=merc")) + tm_lines() +
tm_title("複合線") +
tm_layout(inner.margins = c(0.15, 0.05, 0.15, 0.05))
p_sc3 = tm_shape(st_sfc(polyg, crs = "+proj=merc")) + tm_polygons(border.col = "black") +
p_sc3 = tm_shape(st_sfc(polyg, crs = "+proj=merc")) + tm_polygons(col = "black") +
tm_title("ポリゴン") +
tm_layout(inner.margins = c(0.15, 0.05, 0.15, 0.05))
tmap_arrange(p_sc1, p_sc2, p_sc3, ncol = 3)
Expand Down
2 changes: 1 addition & 1 deletion 06-raster-vector-ja.Rmd
Original file line number Diff line number Diff line change
Expand Up @@ -469,7 +469,7 @@ Figure \@ref(fig:contour-tmap) に示すように、等値線 (isoline) には
# plot(dem, col = terrain.colors(25), alpha = 0.5, legend = FALSE, add = TRUE)
# # add contour lines
# contour(dem, col = "white", add = TRUE)
knitr::include_graphics("figures/06-contour-tmap.png")
knitr::include_graphics("images/06-contour-tmap.png")
```

\index{くうかんべくたか@空間ベクタ化!ぽりごん@ポリゴン}
Expand Down
Loading

0 comments on commit 5bea13c

Please sign in to comment.