Kadrowanie mapy sf w R
Próbuję wykreślić wszystkie rzeki na Półwyspie Iberyjskim, jak widać na obrazku, ale plik shapefile zawiera Wyspy Kanaryjskie i informacje o Afryce Północnej. Aby to wykreślić, użyłem:
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)
Plik kształtu można pobrać z witryny https://www.dropbox.com/s/gqoz9xppf4bjwt2/bcn500_0301l_hidrografia.shp?dl=0
rios <- rios %>%
drop_na()
Próbowałem użyć
rios <- st_crop(rios, c(xmin= -9.80, ymin = 27.68933, xmax = 4.837648, ymax = 35.95))
Ale to, co dostałem, to zaledwie kilka rzek z Afryki Północnej, jak pokazuje fabuła.
Ale nie wiem, jak usunąć wszystkie informacje z Wysp Kanaryjskich. Moim ostatecznym celem jest ta działka na północ od lat. 35,95 i aż do długiego -9,80, więc mogę uzyskać coś, jak ten obraz jest taki sam, jak z czerwonego kwadratu).
Jakieś sugestie?
Odpowiedzi
Twój zakres upraw, w szczególności ymini ymaxjest zły. W kodzie pokazałeś tylko przycięcie do afrykańskiej części. Powinno to dotrzeć do Półwyspu Iberyjskiego:
rios <- st_crop(rios, c(xmin= -9.80, ymin = 36, xmax = 4.837648, ymax = 44))
Jak widzieliście, kadrowanie przycina elementy do kwadratowej obwiedni; st_intersectiontworzy klip wzdłuż granicy warstwy przycinającej, w twoim przypadku odfiltrowałbym wyspy, a następnie przeciąłbym się:
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)