R에서 SF 맵 자르기

Aug 20 2020

이미지에서 볼 수 있듯이 이베리아 반도의 모든 강을 플로팅하려고하지만 shapefile에는 카나리아 제도와 북아프리카에 대한 정보가 포함되어 있습니다. 그것을 플롯하기 위해 사용했습니다.

library(sf)
library(tidyverse)
rios <- st_read("/Users/JMFR/Downloads/BCN500/BCN500_0301L_HIDROGRAFIA.shp")
ggplot() +
  borders("world", c("spain", "portugal"), fill = "lightsteelblue") +
  geom_sf(data = rios)

쉐이프 파일은 다음에서 다운로드 할 수 있습니다. https://www.dropbox.com/s/gqoz9xppf4bjwt2/bcn500_0301l_hidrografia.shp?dl=0

모든 북아프리카 정보를 삭제할 수 있습니다.

rios <- rios %>%
  drop_na()

나는 사용하려고 노력했다

rios <- st_crop(rios, c(xmin= -9.80, ymin = 27.68933, xmax = 4.837648, ymax = 35.95))

그러나 내가 얻은 것은 플롯에서 알 수 있듯이 북아프리카에서 몇 개의 강이었습니다.

하지만 카나리아 제도에서 모든 정보를 삭제하는 방법을 모르겠습니다. 내 최종 목표는 위도 북쪽의이 음모입니다. 35.95에서 긴 -9.80까지이 이미지와 같은 것을 얻을 수 있으므로 빨간색 사각형에서와 동일합니다).

어떤 제안?

답변

2 JonasV Aug 20 2020 at 20:16

귀하의 자르기 정도는, 특별히 yminymax잘못된 것입니다. 코드에서 당신은 아프리카 부분으로 만 잘린 것을 보여주었습니다. 이것은 이베리아 반도까지자를 것입니다.

rios <- st_crop(rios, c(xmin= -9.80, ymin = 36, xmax = 4.837648, ymax = 44))
2 ElioDiaz Aug 21 2020 at 04:55

보시다시피 자르기는 기능을 사각형 경계 상자로 자릅니다. st_intersection클리핑 레이어의 경계를 따라 클립을 만듭니다. 귀하의 경우에는 섬을 필터링 한 다음 교차합니다.

library(ggplot2)
library(raster)
library(sf)
library(dplyr)
esp = getData(country = "ESP", level = 1)
esp = esp %>% st_as_sf() %>% filter(!NAME_1 %in% c("Islas Canarias", "Islas Baleares"))
rios = st_read("/Users/JMFR/Downloads/BCN500/BCN500_0301L_HIDROGRAFIA.shp")
rios = st_intersection(rios, esp)