#r #crop #sf #sp
Вопрос:
Приведенный ниже код R работал на более ранней версии R и sf, но не работает на другом ноутбуке, на котором я недавно загрузил R, RStudio и необходимые пакеты. Использование функции «st_crop» для карты мира (объекта sf) приводит к созданию карты, на которой есть только горизонтальные линии, ведущие к северному полюсу. Я смог обрезать объект только путем его первого преобразования в «Пространственный формат» и обрезки с помощью функции «обрезка» в пакете sp. Есть ли ошибка, или я делаю здесь что-то не так?
Версии
R 4.1.0 sf 1.0.3 rnaturalearth 0.1.0 dplyr 1.0.7
Вот воспроизводимый код
library(sp)
library(sf)
library(dplyr)
library(rnaturalearth)
library(raster)
library(ggplot2)
# World map (sf object)
world_sf <- ne_countries(scale = 10, type = "countries", returnclass = "sf") %>%
filter(!(admin == "Antarctica"))
#This code does NOT work
ext_world1 <- c(xmin = -165, xmax = 175, ymin= -59.47275, ymax = 83.6341)
world_sf1 <- st_crop(world_sf, ext_world1)
ggplot() geom_sf(data = world_sf1, color="gray20", fill = "gray85", lwd = 0.3)
# This code produces the expected result
ext_world2 <- as(raster::extent(-165, 175, -59.47275, 83.6341), "SpatialPolygons")
world_sp <- crop(as_Spatial(world_sf), ext_world2)
world_sf2 <- st_as_sf(world_sp)
ggplot() geom_sf(data = world_sf2, color="gray20", fill = "gray85", lwd = 0.3)
Ответ №1:
st_crop()
работает, но вам нужно убедиться, что вы используете правильную систему координат. Попробуй это…
world_sf_4326 <- ne_countries(type = "countries", returnclass = "sf") %>%
filter(!(admin == "Antarctica")) %>%
st_transform(crs = 4326)
st_crs(world_sf_4326)