функция st_crop работает неправильно — создает карту с горизонтальными линиями на северном полюсе

#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)