Speaking Simple Features

Michael Sumner

2017-05-06

Simple features

In simple features, we can put more information on the coordinates in the form of either ‘Z’ or ‘M’, or both.

Maunga Whau traversal

This epic journey takes us to the top of a volcano.

library(raster)
## Loading required package: sp
data("volcano")

## prepared with dput(lapply(locator(), round, 3))
xy_traverse <- do.call(cbind, structure(list(x = c(0.161, 0.186, 0.202, 0.228, 0.252, 0.27, 
0.285, 0.292, 0.309, 0.349, 0.382, 0.41, 0.446, 0.479, 0.552, 
0.607, 0.614, 0.591, 0.55, 0.506, 0.471, 0.45, 0.405, 0.387, 
0.375, 0.359, 0.343, 0.342, 0.344, 0.324, 0.262, 0.246, 0.22, 
0.206, 0.206), y = c(0, 0.029, 0.037, 0.053, 0.053, 0.06, 0.094, 
0.121, 0.155, 0.2, 0.219, 0.245, 0.264, 0.274, 0.286, 0.317, 
0.349, 0.384, 0.406, 0.423, 0.427, 0.445, 0.48, 0.496, 0.515, 
0.537, 0.584, 0.625, 0.661, 0.698, 0.698, 0.682, 0.631, 0.563, 
0.545)), .Names = c("x", "y")))

rastergrid <- raster(t(volcano[,ncol(volcano):1 ]))

zz <- extract(rastergrid, xy_traverse)
plot(rastergrid, col = viridis::viridis(10))
lines(xy_traverse[, 1:2])

plot(zz, type = "l")

Having done all of this work, we write a nice compact report.

library(sf)
## Linking to GEOS 3.5.1, GDAL 2.1.2, proj.4 4.9.3
report <- st_sf(name = "epic traverse", st_sfc(st_linestring(cbind(xy_traverse, zz))))

plot(report)

print(report)
## Simple feature collection with 1 feature and 1 field
## geometry type:  LINESTRING
## dimension:      XYZ
## bbox:           xmin: 0.161 ymin: 0 xmax: 0.614 ymax: 0.698
## epsg (SRID):    NA
## proj4string:    NA
##            name st_sfc.st_linestring.cbind.xy_traverse..zz...
## 1 epic traverse                LINESTRINGZ(0.161 0 114, 0....

What is the relational structure of this object?

TBD

library(spbabel)
map_table(report, v_atts = c("x_", "y_", "z_"))
## $o
## # A tibble: 1 × 3
##            name st_sfc.st_linestring.cbind.xy_traverse..zz...    object_
## *        <fctr>                              <simple_feature>      <chr>
## 1 epic traverse                             <LINESTRINGZ(...> tC714tyqJ8
## 
## $b
## # A tibble: 1 × 1
##      object_
##        <chr>
## 1 tC714tyqJ8
## 
## $bXv
## # A tibble: 35 × 2
##    order_    vertex_
##     <int>      <chr>
##  1      1 331cUs8W6X
##  2      2 6WgSvtHBMh
##  3      3 BhipHifOe8
##  4      4 S7xBU8Brro
##  5      5 FXdTs0hd65
##  6      6 kv5mRP20t2
##  7      7 FjhjmRxZW3
##  8      8 KcjPd8Xz6P
##  9      9 0zb2xo5rcK
## 10     10 m7EKu8DBUZ
## # ... with 25 more rows
## 
## $v
## # A tibble: 35 × 4
##       x_    y_    z_    vertex_
##    <dbl> <dbl> <dbl>      <chr>
##  1 0.161 0.000   114 331cUs8W6X
##  2 0.186 0.029   120 6WgSvtHBMh
##  3 0.202 0.037   122 BhipHifOe8
##  4 0.228 0.053   128 S7xBU8Brro
##  5 0.252 0.053   130 FXdTs0hd65
##  6 0.270 0.060   132 kv5mRP20t2
##  7 0.285 0.094   138 FjhjmRxZW3
##  8 0.292 0.121   142 KcjPd8Xz6P
##  9 0.309 0.155   146 0zb2xo5rcK
## 10 0.349 0.200   146 m7EKu8DBUZ
## # ... with 25 more rows
## 
## attr(,"class")
## [1] "map_table" "list"