Cortando mapa sf em R
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
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
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))
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)