kh-blog

統計とかGISとかのメモ

sf 3.4

今話題のsfパッケージ、まさか知らない人はいないでしょう??
今回はじめて使いましたので、簡単にメモ。

library(dplyr)
## Warning: パッケージ 'dplyr' はバージョン 3.4.2 の R の下で造られました
## 
##  次のパッケージを付け加えます: 'dplyr'
##  以下のオブジェクトは 'package:stats' からマスクされています: 
## 
##      filter, lag
##  以下のオブジェクトは 'package:base' からマスクされています: 
## 
##      intersect, setdiff, setequal, union
library(sf)
## Warning: パッケージ 'sf' はバージョン 3.4.4 の R の下で造られました
## Linking to GEOS 3.6.1, GDAL 2.1.3, PROJ 4.9.3

Shapeファイルからの読み込みの例が多かったので、
data.frameから作る場合をやってみます。 irisに適当に座標をつけます。
この場合はst_as_sf()で簡単に作ることができます。 SP*オブジェクトよりもスッキリしてる気がします。

iris_sf_wgs <- iris %>% 
  mutate(x = rnorm(dim(iris)[1],140,1),
         y = rnorm(dim(iris)[1],35,1)) %>% 
  st_as_sf(coords = c("x","y"),
           crs = 4326)
iris_sf_wgs %>% 
  head()
## Simple feature collection with 6 features and 5 fields
## geometry type:  POINT
## dimension:      XY
## bbox:           xmin: 138.3046 ymin: 33.53104 xmax: 141.2912 ymax: 35.23003
## epsg (SRID):    4326
## proj4string:    +proj=longlat +datum=WGS84 +no_defs
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1          5.1         3.5          1.4         0.2  setosa
## 2          4.9         3.0          1.4         0.2  setosa
## 3          4.7         3.2          1.3         0.2  setosa
## 4          4.6         3.1          1.5         0.2  setosa
## 5          5.0         3.6          1.4         0.2  setosa
## 6          5.4         3.9          1.7         0.4  setosa
##                    geometry
## 1 POINT (140.3085 33.53104)
## 2  POINT (140.6285 34.3082)
## 3 POINT (139.1832 34.60905)
## 4 POINT (138.3046 34.79331)
## 5 POINT (141.2912 34.66879)
## 6 POINT (139.8825 35.23003)

geometryに座標が入りました。postGISみたいなやつですね。 投影変換はst_transformです。crsに直接EPSGコードをぶち込めます。

iris_sf_wgs %>% 
  st_transform(crs = 32654) %>% 
  head()
## Simple feature collection with 6 features and 5 fields
## geometry type:  POINT
## dimension:      XY
## bbox:           xmin: 253387.4 ymin: 3710374 xmax: 526682.7 ymax: 3899125
## epsg (SRID):    32654
## proj4string:    +proj=utm +zone=54 +datum=WGS84 +units=m +no_defs
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1          5.1         3.5          1.4         0.2  setosa
## 2          4.9         3.0          1.4         0.2  setosa
## 3          4.7         3.2          1.3         0.2  setosa
## 4          4.6         3.1          1.5         0.2  setosa
## 5          5.0         3.6          1.4         0.2  setosa
## 6          5.4         3.9          1.7         0.4  setosa
##                   geometry
## 1 POINT (435796.6 3710374)
## 2 POINT (465816.2 3796392)
## 3 POINT (333421.1 3831190)
## 4 POINT (253387.4 3853434)
## 5 POINT (526682.7 3836353)
## 6 POINT (398313.7 3899125)

plotでの描画はこの通り。

plot(iris_sf_wgs %>% select(Species))

ggplotで扱うにはまだ開発中であるgeom_sfがあります。

Happy mapping!


Share