@@ -39,16 +39,16 @@ Section \@ref(raster-vector) では、ベクタオブジェクトとラスタオ
3939
4040## ベクタデータに対するジオメトリ操作 {#geo-vec}
4141
42- ここでは、ベクタ (` sf ` ) オブジェクトのジオメトリを何らかの方法で変更する操作について説明する 。
42+ ここでは、ベクタ (` sf ` ) オブジェクトのジオメトリを変更する操作について説明する 。
4343前の章 (Section \@ ref(spatial-vec)) で紹介した空間データ操作よりも高度なもので、ここではジオメトリを掘り下げていくことがある。
4444このセクションで説明する関数は、クラス ` sf ` のオブジェクトに加えて、クラス ` sfc ` のオブジェクトにも作用する。
4545
4646### 簡略化 {#simplification}
4747
4848\index{べくた@ベクタ!かんりゃくか@簡略化}
4949簡略化とは、通常、縮尺の小さい地図で使用するために、ベクタオブジェクト (線やポリゴン) を一般化する処理のことである。
50- オブジェクトを単純化するもう一つの理由は、それらが消費するメモリ 、ハードディスク容量、ネットワーク帯域幅の量を減らすためである。
51- インタラクティブ地図として公開する前に、複雑な形状を簡略化することが賢明だろう 。
50+ オブジェクトを単純化するもう一つの理由は、消費するメモリ 、ハードディスク容量、ネットワーク帯域幅の量を減らすためである。
51+ インタラクティブ地図として公開する前に複雑な形状を簡略化することも賢明だろう 。
5252** sf** パッケージは ` st_simplify() ` を提供する。これは Douglas-Peucker アルゴリズムの実装を使用して、頂点数を削減するものである。
5353` st_simplify() ` は、` dTolerance ` を使用することで、一般化のレベルを地図で使われている単位で制御することができる [ 詳細は @douglas_algorithms_1973] 。
5454Figure \@ ref(fig: seine-simp ) は、セーヌ川とその支流を表すジオメトリ ` LINESTRING ` を簡略化したものである。
@@ -67,8 +67,8 @@ p_simp2 = tm_shape(seine_simp) + tm_lines() +
6767tmap_arrange(p_simp1, p_simp2, ncol = 2)
6868```
6969
70- ここでできた ` seine_simp ` オブジェクトは、元の ` seine ` のコピーであるが、頂点の数は少なくなっている 。
71- これは明らかで、以下の検証のように、結果は視覚的にシンプルになり (Figure \@ ref(fig: seine-simp )、右)、元のオブジェクトよりもメモリ消費が少ない。
70+ ここでできた ` seine_simp ` オブジェクトは、元の ` seine ` の頂点の数は少なくしたコピーである 。
71+ これは明らかで、以下の検証のように、結果は視覚的に簡略化され (Figure \@ ref(fig: seine-simp )、右)、元のオブジェクトよりもメモリ消費が少ない。
7272
7373``` {r 05-geometry-operations-3}
7474object.size(seine)
@@ -84,8 +84,8 @@ us_states_simp1 = st_simplify(us_states, dTolerance = 100000) # 100 km
8484```
8585
8686` st_simplify() ` の制限として、ジオメトリ単位でオブジェクトを簡略化することが挙げられる。
87- このため、「トポロジー」が失われ、Figure \@ ref(fig: us-simp ) (パネル右上) に示すような、重なり合った「穴のあいた」面単位になってしまうのである 。
88- ** rmapshaper** の ` ms_simplify() ` が代替となる 。
87+ このため、「トポロジー」が失われ、Figure \@ ref(fig: us-simp ) (パネル右上) に示すような、重なり合ったり隙間ができたりする 。
88+ ** rmapshaper** の ` ms_simplify() ` を使えば、この問題は解決できる 。
8989デフォルトでは、Douglas-Peucker アルゴリズムのいくつかの制限を克服した Visvalingam アルゴリズムが使用される [ @visvalingam_line_1993] 。
9090<!-- https://bost.ocks.org/mike/simplify/ -->
9191次のコードチャンクは、この関数を使用して、` us_states ` を簡略化している。
@@ -314,13 +314,13 @@ st_crs(nz_scale) = st_crs(nz_sfc)
314314st_crs(nz_rotate) = st_crs(nz_sfc)
315315p_at1 = tm_shape(nz_sfc) + tm_polygons() +
316316 tm_shape(nz_shift) + tm_polygons(col = "red") +
317- tm_title("シフト") + tm_layout(fontfamily = "Noto Sans CJK JP")
317+ tm_title("シフト") + tm_layout(text. fontfamily = "Noto Sans CJK JP")
318318p_at2 = tm_shape(nz_sfc) + tm_polygons() +
319319 tm_shape(nz_scale) + tm_polygons(col = "red") +
320- tm_title("拡大縮小") + tm_layout(fontfamily = "Noto Sans CJK JP")
320+ tm_title("拡大縮小") + tm_layout(text. fontfamily = "Noto Sans CJK JP")
321321p_at3 = tm_shape(nz_sfc) + tm_polygons() +
322322 tm_shape(nz_rotate) + tm_polygons(col = "red") +
323- tm_title("回転") + tm_layout(fontfamily = "Noto Sans CJK JP")
323+ tm_title("回転") + tm_layout(text. fontfamily = "Noto Sans CJK JP")
324324tmap_arrange(p_at1, p_at2, p_at3, ncol = 3)
325325```
326326
@@ -433,11 +433,11 @@ x_and_y = st_intersection(x, y)
433433結果は (属性名の表面的な違いを除いて) 同じだが、実装は大きく異なる。
434434
435435``` {r 05-geometry-operations-21}
436- # way #1
436+ # 方法 #1
437437p_xy1 = p[x_and_y]
438- # way #2
438+ # 方法 #2
439439p_xy2 = st_intersection(p, x_and_y)
440- # way #3
440+ # 方法 #3
441441sel_p_xy = st_intersects(p, x, sparse = FALSE)[, 1] &
442442 st_intersects(p, y, sparse = FALSE)[, 1]
443443p_xy3 = p[sel_p_xy]
@@ -457,8 +457,8 @@ pmulti = st_multipoint(pmat)
457457box = st_convex_hull(pmulti)
458458```
459459
460- 上記の例は、応用というより教育的な目的で作成されたものであり、R で地理的ベクタオブジェクトを扱うための理解を深めるために結果を再現することを勧める。しかし、これは、どの実装を使うべきかという重要な問題を提起している 。
461- 一般に、上記の最初のアプローチのような簡潔な実装が好まれる 。
460+ 上記の例は、応用というより教育的な目的で作成されたものであり、どの実装を使うべきかという重要な問題を提起している。 R で地理的ベクタオブジェクトを扱うための理解を深めるために結果を再現することを勧める。
461+ 一般には、最初の方法が簡潔で、実装する際に好まれる 。
462462Chapter \@ ref(algorithms) では、同じ技術やアルゴリズムの異なる実装を選択する問題に戻る。
463463
464464### ジオメトリ結合 {#geometry-unions}
@@ -916,23 +916,23 @@ library(tmap)
916916tm1 = tm_shape(dem) +
917917 tm_raster(col.scale = tm_scale(breaks = seq(200, 1100, by = 150))) +
918918 tm_title("オリジナル") +
919- tm_layout(frame = FALSE, legend.show = FALSE, fontfamily = "Noto Sans CJK JP")
919+ tm_layout(frame = FALSE, legend.show = FALSE, text. fontfamily = "Noto Sans CJK JP")
920920tm2 = tm_shape(dem_resampl1) +
921921 tm_raster(col.scale = tm_scale(breaks = seq(200, 1100, by = 150))) +
922922 tm_title("最近傍 (near)") +
923- tm_layout(frame = FALSE, legend.show = FALSE, fontfamily = "Noto Sans CJK JP")
923+ tm_layout(frame = FALSE, legend.show = FALSE, text. fontfamily = "Noto Sans CJK JP")
924924tm3 = tm_shape(dem_resampl2) +
925925 tm_raster(col.scale = tm_scale(breaks = seq(200, 1100, by = 150))) +
926926 tm_title("双一次補間 (bilinear)") +
927- tm_layout(frame = FALSE, legend.show = FALSE, fontfamily = "Noto Sans CJK JP")
927+ tm_layout(frame = FALSE, legend.show = FALSE, text. fontfamily = "Noto Sans CJK JP")
928928tm4 = tm_shape(dem_resampl3) +
929929 tm_raster(col.scale = tm_scale(breaks = seq(200, 1100, by = 150))) +
930930 tm_title("三次補間 (cubic)") +
931- tm_layout(frame = FALSE, legend.show = FALSE, fontfamily = "Noto Sans CJK JP")
931+ tm_layout(frame = FALSE, legend.show = FALSE, text. fontfamily = "Noto Sans CJK JP")
932932tm5 = tm_shape(dem_resampl4) +
933933 tm_raster(col.scale = tm_scale(breaks = seq(200, 1100, by = 150))) +
934934 tm_title("三次スプライン補間 (cubicspline)") +
935- tm_layout(frame = FALSE, legend.show = FALSE, fontfamily = "Noto Sans CJK JP")
935+ tm_layout(frame = FALSE, legend.show = FALSE, text. fontfamily = "Noto Sans CJK JP")
936936tm6 = tm_shape(dem_resampl5) +
937937 tm_raster(col.scale = tm_scale(breaks = seq(200, 1100, by = 150))) +
938938 tm_title("lanczos") +
0 commit comments