Cortando mapa sf em R

Aug 20 2020

Estou tentando traçar todos os rios da Península Ibérica como pode ser visto na imagem, mas o shapefile inclui as Ilhas Canárias e informações sobre o norte da África. Para plotar eu usei:

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)

O arquivo de forma pode ser baixado dehttps://www.dropbox.com/s/gqoz9xppf4bjwt2/bcn500_0301l_hidrografia.shp?dl=0

Posso excluir todas as informações do norte da África com

rios <- rios %>%
  drop_na()

eu tentei usar

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

Mas o que consegui foram apenas alguns rios do norte da África, como mostra o enredo.

Mas não sei como deletar todas as informações das Ilhas Canárias. Meu objetivo final é este terreno ao norte da latitude. 35,95 e até longo -9,80 para que eu possa obter algo como esta imagem é a mesma do quadrado vermelho).

Alguma sugestão?

Respostas

2 JonasV Aug 20 2020 at 20:16

Sua extensão de corte, especificamente ymine ymaxestá errada. No código que você mostrou, você cortou apenas a parte africana. Isso deve cortar para a Península Ibérica:

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

Cortar, como você viu, corta os recursos em uma caixa delimitadora quadrada; st_intersectionfaz um recorte ao longo do limite da camada de recorte, no seu caso, eu filtraria as ilhas e depois faria a interseção:

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)