Skip to content

Commit

Permalink
10 November 2023 update
Browse files Browse the repository at this point in the history
  • Loading branch information
babayoshihiko committed Nov 10, 2023
1 parent 2b59459 commit 59e16e5
Show file tree
Hide file tree
Showing 30 changed files with 1,005 additions and 1,259 deletions.
73 changes: 39 additions & 34 deletions 01-introduction-ja.Rmd

Large diffs are not rendered by default.

227 changes: 118 additions & 109 deletions 02-spatial-data-ja.Rmd

Large diffs are not rendered by default.

8 changes: 5 additions & 3 deletions 03-attribute-operations-ja.Rmd
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ library(dplyr) # データフレーム操作用 tidyverseパッケージ
- この章は **spData** に依存している。コード例で使用されるデータセットをロードする。

```{r 03-attribute-operations-2, results='hide'}
#| message: FALSE
#| results: hide
library(spData) # Chapter 2 で紹介した空間データパッケージ
```

Expand Down Expand Up @@ -320,7 +322,7 @@ knitr::kable(tibble(Symbol = operators, Name = operators_exp),
### パイプを使ったコマンドの連鎖 {#chaining-commands-with-pipes}

\index{pipe operator}
**dplyr** 関数を使用するワークフローの鍵は、[パイプ](http://r4ds.had.co.nz/pipes.html) 演算子 `%>%` (R `4.1.0` 以降では ネイティブパイプ `|>`) で、これは Unix パイプ `|` [@grolemund_r_2016] から名前を取ったものである。
**dplyr** 関数を使用するワークフローの鍵は、[パイプ](https://r4ds.had.co.nz/pipes.html) 演算子 `%>%` (R `4.1.0` 以降では ネイティブパイプ `|>`) で、これは Unix パイプ `|` [@grolemund_r_2016] から名前を取ったものである。
パイプは、直前の関数の出力が次の関数の第1引数になるため、表現力豊かなコードを実現する。
これは、`world` データセットからアジアの国だけがフィルタされ、次にオブジェクトが列 (`name_long``continent`) と最初の 5 行でサブセットされる様子を示している (結果は示していない)。

Expand Down Expand Up @@ -433,15 +435,15 @@ knitr::kable(
```

```{block2 03-attribute-operations-31, type='rmdnote'}
詳細は、ヘルプページ (`?summary`と`vignette(package = "dplyr")`からアクセス)、および [R for Data Science](http://r4ds.had.co.nz/transform.html#grouped-summaries-with-summarize) Chapter 5。
詳細は、ヘルプページ (`?summary`と`vignette(package = "dplyr")`からアクセス)、および [R for Data Science](https://r4ds.had.co.nz/transform.html#grouped-summaries-with-summarize) Chapter 5。
```

### ベクタ属性の結合 {#vector-attribute-joining}

異なるソースからのデータを組み合わせることは、データ作成において一般的な作業である。
結合は、共有された「キー」変数に基づいてテーブルを結合することによって行われる。
**dplyr** には、`left_join()``inner_join()` など、複数の結合関数がある。完全なリストは、`vignette("two-table")`を参照 (訳注:[日本語版](https://www.uclmail.net/users/babayoshihiko/R/index.html))。
これらの関数名は、データベース言語 [SQL](http://r4ds.had.co.nz/relational-data.html) [@grolemund_r_2016, Chapter 13] で使われている慣例に従っている。これらを使って、非空間データセットと `sf` オブジェクトを結合することが、このセクションの焦点である。
これらの関数名は、データベース言語 [SQL](https://r4ds.had.co.nz/relational-data.html) [@grolemund_r_2016, Chapter 13] で使われている慣例に従っている。これらを使って、非空間データセットと `sf` オブジェクトを結合することが、このセクションの焦点である。
**dplyr** の join 関数は、データフレームと `sf` オブジェクトで同じように動作する。唯一の重要な違いは、`geometry` リスト列である。
データ結合の結果は、`sf` または `data.frame` オブジェクトのいずれかになる。
空間データに対する最も一般的な属性結合は、第1引数として `sf` オブジェクトを取り、第2引数として指定された `data.frame` から列を追加するものである。
Expand Down
2 changes: 1 addition & 1 deletion 04-spatial-operations-ja.Rmd
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,7 @@ Figure \@ref(fig:relations) の3番目と4番目のペア(左から右、そ
\index{topological relations}

```{r relations, echo=FALSE, fig.cap="Egenhofer and Herring (1990)の Figure 1 と Figure 2 を参考にした、ベクトル幾何学間のトポロジー関係。関数(x, y)が真となる関係が、各ジオメトリのペアについて印刷されており、xはピンク、yは青で表されている。各ペアの空間的関係の性質は、Dimensionally Extended 9-Intersection Model 文字列で記述されている。", fig.show='hold', message=FALSE, fig.asp=0.66, warning=FALSE}
# source("https://github.com/Robinlovelace/geocompr/raw/c4-v2-updates-rl/code/de_9im.R")
# source("https://github.com/Robinlovelace/geocompr/raw/main/code/de_9im.R")
source("code/de_9im.R")
library(sf)
xy2sfc = function(x, y) st_sfc(st_polygon(list(cbind(x, y))))
Expand Down
7 changes: 3 additions & 4 deletions 05-geometry-operations-ja.Rmd
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ Figure \@ref(fig:seine-simp) は、セーヌ川とその支流を表すジオメ
seine_simp = st_simplify(seine, dTolerance = 2000) # 2000 m
```

```{r seine-simp, echo=FALSE, fig.cap="seine のオリジナルと簡略化した形状の比較。", warning=FALSE, fig.scap="Simplification in action.", message=FALSE}
```{r seine-simp, echo=FALSE, fig.cap="seine のオリジナルと簡略化した形状の比較。", warning=FALSE, fig.scap="Simplification in action.", message=FALSE, fig.asp=0.5}
library(tmap)
p_simp1 = tm_shape(seine) + tm_lines() +
tm_title("オリジナルデータ") + tm_layout(fontfamily = "HiraginoSans-W3")
Expand All @@ -78,7 +78,6 @@ Chapter \@ref(reproj-geo-data) で示したように、GEOS はデータが投

```{r 05-geometry-operations-4}
us_states2163 = st_transform(us_states, "EPSG:2163")
us_states2163 = us_states2163
```

`st_simplify()` は、投影されたポリゴンでも同様に機能する。
Expand Down Expand Up @@ -365,7 +364,7 @@ plot(x_and_y, col = "lightgrey", border = "grey", add = TRUE) # 範囲を inters
par(op)
```

次のコードチャンクは、`x``y` を表すベン図のすべての組み合わせに対して、これがどのように機能するかを示している。これは、書籍 *R for Data Science*[Figure 5.1](http://r4ds.had.co.nz/transform.html#logical-operators) から着想を得ている [@grolemund_r_2016]
次のコードチャンクは、`x``y` を表すベン図のすべての組み合わせに対して、これがどのように機能するかを示している。これは、書籍 *R for Data Science*[Figure 5.1](https://r4ds.had.co.nz/transform.html#logical-operators) から着想を得ている [@grolemund_r_2016]

```{r venn-clip, echo=FALSE, fig.cap="論理演算子の空間的等価性。", warning=FALSE}
source("code/05-venn-clip.R")
Expand Down Expand Up @@ -461,7 +460,7 @@ regions2 = us_states |>
# summarize(africa[buff, "pop"], pop = sum(pop, na.rm = TRUE))
```

```{r us-regions, fig.cap="連続したポリゴンに対する空間的な集計。アメリカの州の人口を地域に集計し、人口を色で表した。この操作により、州間の境界が自動的に解消されることに注意。", echo=FALSE, warning=FALSE, fig.asp=0.2, out.width="100%", fig.scap="Spatial aggregation on contiguous polygons."}
```{r us-regions, fig.cap="連続したポリゴンに対する空間的な集計。アメリカの州の人口を地域に集計し、人口を色で表した。この操作により、州間の境界が自動的に解消されることに注意。", echo=FALSE, warning=FALSE, out.width="100%", fig.scap="Spatial aggregation on contiguous polygons."}
source("code/05-us-regions.R", print.eval = TRUE)
```

Expand Down
12 changes: 7 additions & 5 deletions 06-raster-vector-ja.Rmd
Original file line number Diff line number Diff line change
Expand Up @@ -74,33 +74,35 @@ srtm_inv_masked = mask(srtm, zion, inverse = TRUE)
```

```{r cropmask, echo = FALSE, fig.cap="ラスタクロップ、ラスタマスクの説明図。", fig.asp=0.36, fig.width = 10, warning=FALSE}
library(tmap)
#| message: FALSE
#| results: hide
library(tmap) # 3.99.9000 は、タイトルのフォント指定ができないようです。
library(rcartocolor)
terrain_colors = carto_pal(7, "Geyser")
pz1 = tm_shape(srtm) +
tm_raster(col.scale = tm_scale_continuous(values = terrain_colors)) +
tm_shape(zion) +
tm_borders(lwd = 2) +
tm_title("A. オリジナル") +
tm_layout(inner.margins = 0, fontfamily = "HiraginoSans-W3")
tm_layout(inner.margins = 0, title.fontfamily = "HiraginoSans-W3")
pz2 = tm_shape(srtm_cropped) +
tm_raster(col.scale = tm_scale_continuous(values = terrain_colors)) +
tm_shape(zion) +
tm_borders(lwd = 2) +
tm_title("B. 切り落とし (crop)") +
tm_layout(inner.margins = 0, fontfamily = "HiraginoSans-W3")
tm_layout(inner.margins = 0, title.fontfamily = "HiraginoSans-W3")
pz3 = tm_shape(srtm_masked) +
tm_raster(col.scale = tm_scale_continuous(values = terrain_colors)) +
tm_shape(zion) +
tm_borders(lwd = 2) +
tm_title("C. マスク") +
tm_layout(inner.margins = 0, fontfamily = "HiraginoSans-W3")
tm_layout(inner.margins = 0, legend.title.fontfamily = "HiraginoSans-W3")
pz4 = tm_shape(srtm_inv_masked) +
tm_raster(col.scale = tm_scale_continuous(values = terrain_colors)) +
tm_shape(zion) +
tm_borders(lwd = 2) +
tm_title("D. Inverse マスク") +
tm_layout(inner.margins = 0, fontfamily = "HiraginoSans-W3")
tm_layout(inner.margins = 0, text.fontfamily = "HiraginoSans-W3")
tmap_arrange(pz1, pz2, pz3, pz4, ncol = 4, asp = NA)
```

Expand Down
10 changes: 6 additions & 4 deletions 07-reproj-ja.Rmd
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ st_crs("EPSG:4326")
\index{CRS!SRID}
コマンドの出力は、CRS 識別子 (空間参照識別子または Spatial Reference Identifier [SRID](https://postgis.net/workshops/postgis-intro/projection.html) とも呼ばれる) がどのように機能するかを示している。これは単にルックアップであり、CRS のより完全な WKT 表現に関連する一意の識別子を提供するものである。
このことは、識別子と CRS の長い WKT 表現との間にミスマッチがある場合はどうなるのか、という問題を提起している。
この点、@opengeospatialconsortium_wellknown_2019 は明確で、冗長な WKT 表現が[識別子](https://docs.opengeospatial.org/is/18-010r7/18-010r7.html#37)より優先される。
この点、@opengeospatialconsortium_wellknown_2019 は明確で、冗長な WKT 表現が[識別子](https://docs.ogc.org/is/18-010r7/18-010r7.html#37)より優先される。

> 引用された識別子の属性や値が、WKT 記述で明示的に与えられた属性や値と矛盾する場合、 WKT の値が優先されるものとする。
Expand Down Expand Up @@ -336,6 +336,8 @@ london_buff_projected = st_buffer(london_proj, 100000)
先に作成した CRS を<u>持つ</u> 3 つの `london_buff*` オブジェクト (`london_buff_s2``london_buff_lonlat``london_buff_projected`)の形状を Figure \@ref(fig:crs-buf) に示す。

```{r crs-buf-old, include=FALSE, eval=FALSE}
#| message: FALSE
#| results: hide
uk = rnaturalearth::ne_countries(scale = 50) |>
st_as_sf() |>
filter(grepl(pattern = "United Kingdom|Ire", x = name_long))
Expand Down Expand Up @@ -452,7 +454,7 @@ WGS84 は世界で最も一般的な CRS なので、その EPSG コード 4326
\index{UTM}
一般的に使われているデフォルトは Universal Transverse Mercator ([UTM](https://en.wikipedia.org/wiki/Universal_Transverse_Mercator_coordinate_system) [日本語](https://ja.wikipedia.org/w/index.php?curid=118035)) で、地球を縦 60 個のくさびと横 20 個の緯度に分割した CRS のセットである。
UTM CRS で使用されている横メルカトル図法は等角 (conformal) であるが、UTM ゾーンの中心から離れるにつれて面積や距離の歪みがひどくなる。
そのため、GIS ソフトウェア Manifold のドキュメントでは、UTM ゾーンを使用するプロジェクトの縦断範囲を中心子午線から6度までに制限することを提案している (出典: [manifold.net](http://www.manifold.net/doc/mfd9/universal_transverse_mercator_projection.htm))。
そのため、GIS ソフトウェア Manifold のドキュメントでは、UTM ゾーンを使用するプロジェクトの縦断範囲を中心子午線から6度までに制限することを提案している (出典: [manifold.net](https://manifold.net/doc/mfd9/universal_transverse_mercator_projection.htm))。
そのため、UTM は比較的狭い範囲での角度保存を重視する場合にのみ使用することを勧める。

地球上のほとんどの場所には UTM コードがあり、例えば「60H」 は R が発明されたニュージーランド北部を指している。
Expand Down Expand Up @@ -687,7 +689,7 @@ unique(cat_raster)
カテゴリ別ラスタを再投影する場合、推定値は元のラスタと同じでなければならない。
これは、各新規セルの値を入力ラスタの最も近いセル (中心) の値に設定する最近傍法 (`near`) を使って行うことができる。
例えば、ウェブマッピングに適した地理的 CRS である WGS84 に `cat_raster` を再投影している。
まず、この CRS の PROJ 定義を取得する。これは、例えば、 [http://spatialreference.org](http://spatialreference.org/ref/epsg/wgs-84/) のウェブページを使用して行うことができる。
まず、この CRS の PROJ 定義を取得する。これは、例えば、 [https://spatialreference.org](https://spatialreference.org/ref/epsg/wgs-84/) のウェブページを使用して行うことができる。
最後のステップは、`project()` 関数でラスタを再投影することである。カテゴリデータの場合は、最近傍法 (`near`) を使用する。

```{r 06-reproj-31}
Expand Down Expand Up @@ -839,7 +841,7 @@ tm_shape(world_mollweide_gr) +
```

世界地図を作成する際、すべての空間特性 (面積、方向、距離) に対して歪みを最小化することが望まれることが多い。
これを実現するための代表的な投影法として、Figure \@ref(fig:wintriproj) に示される [ヴィンケル図法 (第 3 図法)](http://www.winkel.org/other/Winkel%20Tripel%20Projections.htm) (Winkel Tripel Projections) がある。^[
これを実現するための代表的な投影法として、Figure \@ref(fig:wintriproj) に示される [ヴィンケル図法 (第 3 図法)](https://www.winkel.org/other/Winkel%20Tripel%20Projections.htm) (Winkel Tripel Projections) がある。^[
この投影図は、ナショナルジオグラフィック協会などで使用されている。
]
結果は、以下のコマンドで作成された。
Expand Down
Loading

0 comments on commit 59e16e5

Please sign in to comment.