Diberikan objek Spasial dalam R, bagaimana cara klip semua elemennya berada di dalam kotak pembatas?
Ada dua hal yang ingin saya lakukan (idealnya saya tahu bagaimana melakukan keduanya, tetapi keduanya merupakan solusi yang dapat diterima untuk masalah saya saat ini - membatasi polifon shapefile ke benua AS).
Jatuhkan setiap elemen tidak sepenuhnya dalam kotak pembatas. Ini sepertinya
bbox()<-
cara yang logis, tetapi tidak ada metode seperti itu.Lakukan operasi klip yang benar, sehingga elemen non-infinitesimal (mis. Poligon, garis) terpotong pada batas .
sp::bbox
tidak memiliki metode penugasan, jadi satu-satunya cara saya datang dengan menggunakanover
ataugContains
/gCrosses
dalam hubungannya dengan objek SpatialPolygons yang berisi kotak dengan koordinat kotak lompatan baru. Kemudian ketika memotong objek poligon, Anda harus mencari tahu mana yang berisi vs silang, dan mengubah koordinat poligon tersebut sehingga mereka tidak melebihi kotak. Atau semacamnyagIntersection
. Tapi pasti ada cara yang lebih sederhana?
Meskipun saya tahu bahwa ada banyak masalah dengan kotak pembatas , dan bahwa pelapisan spasial ke poligon yang mendefinisikan wilayah yang diminati biasanya lebih disukai, dalam banyak situasi, kotak pembatas berfungsi dengan baik dan lebih sederhana.
gIntersection
dan muncul denganError in RGEOSBinTopoFunc(spgeom1, spgeom2, byid, id, "rgeos_intersection") : TopologyException: no outgoing dirEdge found at 3 2.5
Tidak ada waktu untuk debug hari ini; menulis versi ceroboh dan akan diperbaiki di masa depan.Jawaban:
Saya telah membuat fungsi kecil untuk tujuan ini dan telah digunakan oleh orang lain dengan ulasan yang bagus!
Ini harus menyelesaikan masalah Anda. Penjelasan lebih lanjut ada di sini: http://robinlovelace.net/r/2014/07/29/clipping-with-r.html
Polygon dummy
b_poly
yang dibuat tidak memiliki string proj4, yang menghasilkan " Peringatan: spgeom1 dan spgeom2 memiliki string proj4 yang berbeda ", tetapi ini tidak berbahaya.sumber
sp
,maptools
,rgdal
, danrgeos
dimuat.Error in .class1(object) : could not find function "extent"
Mungkin saya mendapatkan masalah versi paket R?library(raster)
di tutorial saya: robinlovelace.net/r/2014/07/29/clipping-with-r.html beri tahu kami bagaimana caranya! Bersulang.Berikut ini adalah versi batas yang ceroboh (cukup untuk memenuhi kebutuhan saya tepat waktu untuk tenggat waktu mini besok :-)):
Jika Anda membutuhkan kotak pembatas untuk diproyeksikan, versi di sini menambahkan
interpolate
argumen, sehingga kotak yang diproyeksikan dihasilkan melengkung.sumber