Memangkas peta sf di R

Aug 20 2020

Saya mencoba untuk memplot semua sungai di Semenanjung Iberia seperti yang dapat dilihat pada gambar, tetapi shapefile tersebut menyertakan Kepulauan Canary dan info tentang Afrika Utara. Untuk merencanakannya saya menggunakan:

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)

File bentuk dapat diunduh dari https://www.dropbox.com/s/gqoz9xppf4bjwt2/bcn500_0301l_hidrografia.shp?dl=0

Saya dapat menghapus semua info Afrika Utara dengan

rios <- rios %>%
  drop_na()

Saya sudah mencoba menggunakan

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

Tapi yang saya dapatkan hanyalah beberapa sungai dari Afrika Utara, seperti yang ditunjukkan plotnya.

Tapi saya tidak tahu cara menghapus semua info dari Kepulauan Canary. Tujuan akhir saya adalah plot di utara lat. 35,95 dan hingga panjang -9,80 jadi saya bisa mendapatkan sesuatu karena gambar ini sama dengan dari kotak merah).

Ada saran?

Jawaban

2 JonasV Aug 20 2020 at 20:16

Luas tanam Anda, secara spesifik ymindan ymaxsalah. Dalam kode yang Anda tunjukkan, Anda hanya memotong ke bagian Afrika. Ini harus dipotong ke Semenanjung Iberia:

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

Pemotongan, seperti yang Anda lihat, memotong fitur ke kotak pembatas persegi; st_intersectionmembuat klip di sepanjang batas lapisan kliping, dalam kasus Anda, saya akan menyaring pulau-pulau dan kemudian berpotongan:

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)