For a better version of the sf vignettes see https://r-spatial.github.io/sf/articles/
この vignette は、これまでの vignette では出てこなかった、「よくある質問」に分類されるかどうかもわからないような事柄を記述しています。読者は、この vignette に(他の vignette と同様に)エントリーをすることが推奨されます。
EPSGは、IOGP(International Association of Oil &Gass Producers)によって維持されている、よく理解されている空間参照系の登録簿を意味します。例えば、“EPSG:4326”は、EPSG当局によって管理されているIDが4326の空間参照系を表しています。EPSGレジストリのウェブサイトは、epsg.orgドメインにあります。
sf
は、セカンダリ・ジオメトリ列をどう扱うの?sf
オブジェクトは複数のジオメトリリストカラムを持つことができますが、常に 1 つのジオメトリカラムだけが active とみなされ、 st_geometry
によって返されます。 複数のジオメトリ列がある場合、デフォルトの print
メソッドはどれがアクティブであるかを報告します
library(sf)
## Linking to GEOS 3.10.3, GDAL 3.5.1, PROJ 7.2.1; sf_use_s2() is TRUE
demo(nc, ask = FALSE, echo = FALSE)
$geom2 = st_centroid(st_geometry(nc))
ncprint(nc, n = 2)
## Simple feature collection with 100 features and 14 fields
## Attribute-geometry relationship: 0 constant, 8 aggregate, 6 identity, 1 NA's
## Active geometry column: geom
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: -84.32385 ymin: 33.88199 xmax: -75.45698 ymax: 36.58965
## Geodetic CRS: NAD27
## First 2 features:
## AREA PERIMETER CNTY_ CNTY_ID NAME FIPS FIPSNO CRESS_ID BIR74 SID74
## 1 0.114 1.442 1825 1825 Ashe 37009 37009 5 1091 1
## 2 0.061 1.231 1827 1827 Alleghany 37005 37005 3 487 0
## NWBIR74 BIR79 SID79 NWBIR79 geom
## 1 10 1364 0 19 MULTIPOLYGON (((-81.47276 3...
## 2 10 542 3 12 MULTIPOLYGON (((-81.23989 3...
## geom2
## 1 POINT (-81.49823 36.4314)
## 2 POINT (-81.12513 36.49111)
以下のように、st_geometry<-
または st_set_geometry
を使用することで、アクティブなジオメトリを切り替えることができます
plot(st_geometry(nc))
st_geometry(nc) <- "geom2"
plot(st_geometry(nc))
st_simplify
は、トポロジーを保持しますか?st_simplify
はトポロジーを保持する関数ですが、個々のフィーチャのジオメトリーレベルでこれを行います。つまり、簡単に言うと、この関数を適用した後でも、ポリゴンはポリゴンのままです。しかし、2 つのフィーチャの境界が長く共有されている場合、オブジェクトに st_simplify
を適用しても、結果のオブジェクトでこれら 2 つのポリゴンがまだ同じ境界を共有していることは保証されません。
sf
オブジェクトには効かないのはなぜですか?効いています!しかし、多くの開発者は、パッケージを読み込まず、すべての関数を sf::
という接頭辞で指定するスクリプトを書きたがります、例えば
= sf::st_intersects(sf1, sf2) i
これは sf
オブジェクトに対する select
のような dplyr
のジェネリックが必要になった瞬間まで動作します。 dplyr::select
(パッケージ sf
内を検索しなければならないことがわからない) と sf::select
(これは存在しない) を呼ぶべきでしょうか? どちらもうまくいきません。この場合、例えば単純に sf
をロードする必要があります。
library(sf)
sf
で使用される幾何学計算ルーチンのほとんど (すべてではありません) は GEOS ライブラリからきています。このライブラリは、2次元の平らなユークリッド空間での座標を考えています。緯度経度データでは、これは当てはまりません。簡単な例として、北極を囲む多角形がありますが、これは北極を含むべきものです。
= st_sfc(st_polygon(list(rbind(c(0,80), c(120,80), c(240,80), c(0,80)))),
polygon crs = 4326)
= st_sfc(st_point(c(0,90)), crs = 4326)
pole st_intersects(polygon, pole)
## Sparse geometry binary predicate list of length 1, where the predicate
## was `intersects'
## 1: 1
となり、間違った結果(交差点がない)になります。
上記と同様、重心は平坦な2次元空間を想定して計算されます。
st_centroid(polygon)[[1]]
## POINT (0 90)
ここは、重心が極であるべき場所です。
このメッセージは、sf
が距離の値を度単位で与えられると仮定していることを示します。このメッセージを避けるには、正しい単位を持つ値を渡してください。
= st_sfc(st_point(c(0,0)), crs = 4326)
pt = st_buffer(polygon, 1)
buf = st_buffer(polygon, units::set_units(1, degree)) buf