メモ:sfでMULTIPOINTとかMULTIPOLYGONとかから要素をひとつだけ取り出したいときはとりあえずsfcにしてMULTIじゃないやつにcastする
sfにまだ慣れてないので思いつかないけど、もっといい方法があるのかも。
参考:
Simple Features for Rのvignetteに載ってるMULTIPOINTなsfg(simple feature geometry)の例。ここから1つめの点だけを取り出すことを考える。
library(sf) #> Linking to GEOS 3.6.1, GDAL 2.2.0, proj.4 4.9.3 points_df <- rbind(c(3.2,4), c(3,4.6), c(3.8,4.4), c(3.5,3.8), c(3.4,3.6), c(3.9,4.5)) (multipoint_sfg <- st_multipoint(points_df)) #> MULTIPOINT (3.2 4, 3 4.6, 3.8 4.4, 3.5 3.8, 3.4 3.6, 3.9 4.5)
ここで思いつくのは、単一のMULTIPOINTをPOINTのリストに変換することだが、それにはまずst_sfc()
でsfc(simple feature geometry list-column)にしてからst_cast()
でPOINTにする。
(points_sfc <- st_cast(st_sfc(multipoint_sfg), to = "POINT")) #> Geometry set for 6 features #> geometry type: POINT #> dimension: XY #> bbox: xmin: 3 ymin: 3.6 xmax: 3.9 ymax: 4.6 #> epsg (SRID): NA #> proj4string: NA #> First 5 geometries: #> POINT (3.2 4) #> POINT (3 4.6) #> POINT (3.8 4.4) #> POINT (3.5 3.8) #> POINT (3.4 3.6)
この状態で、[
でサブセットすればsfcになり、[[
でサブセットすればsfgになる。
[
の場合:
(first_point_sfc <- points_sfc[1]) #> Geometry set for 1 feature #> geometry type: POINT #> dimension: XY #> bbox: xmin: 3.2 ymin: 4 xmax: 3.2 ymax: 4 #> epsg (SRID): NA #> proj4string: NA #> POINT (3.2 4) class(first_point_sfc) #> [1] "sfc_POINT" "sfc"
[[
の場合:
(first_point_sfg <- points_sfc[[1]]) #> POINT (3.2 4) class(first_point_sfg) #> [1] "XY" "POINT" "sfg"