Как отфильтровать объект sf по широте? - PullRequest
0 голосов
/ 11 июня 2019

Данные

У меня есть шейп-файл для границы провинции Онтарио, который я прочитал следующим образом:

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

Это может быть построено следующим образом:

enter image description here

Вопрос

Я хочу сохранить данные ontario только для latitude < 51. Но так как это sf объект, dplyr::filter(latitude < 51) не работает. Я знаю, что могу извлечь координаты с помощью st_coordinates(), но как я могу присоединить их к данным, чтобы отфильтровать большую высоту?
В качестве альтернативы, есть ли в * 1021 функция, которую я мог бы использовать для фильтрации? Я посмотрел на помощь, но пока не смог найти ничего подходящего.

1 Ответ

2 голосов
/ 11 июня 2019

Давайте возьмем Канаду из данных GADM:

library(raster)
library(sf)
cdn = getData("GADM",country="can",level=1)

это должен быть Онтарио:

ont = cdn[9,]
ont$NAME_1

преобразовать в sf объект:

ont = st_as_sf(ont)

Теперь к делу - обрезать до 51 градуса северной широты:

ont_south = st_crop(ont, xmin=-180, xmax=180, ymin=-90, ymax=51)
plot(ont_south$geometry)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...