如何按纬度过滤 sf 对象?

uma*_*ani 1 r r-sf

数据

我有一个安大略省边界的形状文件,我阅读如下:

library(sf)
library(here)
ontario <- sf::st_read(here::here("data", "messy_data", "Ontario.shp"), quiet = TRUE) %>%
  st_transform(4326)
Run Code Online (Sandbox Code Playgroud)

它可以绘制如下:

在此处输入图片说明

我想保持ontario数据仅供latitude < 51。但是因为它是一个sf对象,dplyr::filter(latitude < 51)所以不起作用。我知道我可以用 提取坐标st_coordinates(),但是如何将它们连接回数据以过滤掉更高的高度?
或者,是否有任何功能sf可以用来进行过滤?我查看了帮助,但到目前为止找不到任何相关内容。

Spa*_*man 6

让我们从 GADM 数据中获取加拿大:

library(raster)
library(sf)
cdn = getData("GADM",country="can",level=1)
Run Code Online (Sandbox Code Playgroud)

这应该是安大略省:

ont = cdn[9,]
ont$NAME_1
Run Code Online (Sandbox Code Playgroud)

转换为sf对象:

ont = st_as_sf(ont)
Run Code Online (Sandbox Code Playgroud)

现在开始营业 - 裁剪到北纬 51 度:

ont_south = st_crop(ont, xmin=-180, xmax=180, ymin=-90, ymax=51)
plot(ont_south$geometry)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明