Ritagliare la mappa sf in R

Aug 20 2020

Sto cercando di tracciare tutti i fiumi della penisola iberica come si può vedere nell'immagine, ma lo shapefile include le Isole Canarie e informazioni sul Nord Africa. Per tracciarlo ho usato:

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)

Il file di forma può essere scaricato dahttps://www.dropbox.com/s/gqoz9xppf4bjwt2/bcn500_0301l_hidrografia.shp?dl=0

Posso cancellare tutte le informazioni del Nord Africa con

rios <- rios %>%
  drop_na()

ho provato ad usare

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

Ma quello che ho ottenuto sono stati solo alcuni fiumi del Nord Africa, come mostra la trama.

Ma non so come eliminare tutte le informazioni dalle Isole Canarie. Il mio obiettivo finale è questo terreno a nord di lat. 35.95 e fino a lungo -9.80 quindi posso ottenere qualcosa in quanto questa immagine è la stessa che dal quadrato rosso).

Eventuali suggerimenti?

Risposte

2 JonasV Aug 20 2020 at 20:16

La tua estensione di ritaglio, in particolare ymined ymaxè sbagliata. Nel codice che hai mostrato hai ritagliato solo la parte africana. Questo dovrebbe ritagliarsi nella penisola iberica:

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

Il ritaglio, come hai visto, taglia le caratteristiche in un rettangolo di delimitazione quadrato; st_intersectioncrea una clip lungo il confine del livello di ritaglio, nel tuo caso, filtrerei le isole e poi le intersecherei:

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)