Saya ingin melakukan GIS Clip yang benar dalam R poligon tanah menggunakan serangkaian poligon batas tunggal, tetapi saya tidak dapat menemukan fungsi R untuk melakukannya dengan benar. Seharusnya berfungsi seperti clip
fungsi di ESRI's ArcMap. Saya sudah mencoba over
metode ini dalam sp
paket tetapi tampaknya tidak berfungsi untuk polys daripada polys.
Salah satu saran adalah menggunakan paket gIntersection
in rgeos
sebagai klip menggunakan kode berikut:
#------------------------------------
library(rgeos)
library(maptools)
#Read layers as SpatialPolygonsDataFrame (both the same Albers projection)
Soils_poly = readShapePoly("Soils_polygons") #Note - Has 400 polygons
clipper_poly = readShapePoly("clipper_polygon") #Note - Has 1 polygon
#Try gintersection as clip
Clipped_polys = gIntersection(Clipper_Tile_poly, Soils_poly)
#-----------------------------------
Ini membutuhkan waktu 5 menit untuk berjalan (terlalu lambat) dan kesalahan dengan ini:
Kesalahan di RGEOSBinTopoFunc (spgeom1, spgeom2, byid, id, drop_not_poly, "rgeos_intersection"): TopologyException: tidak ada dirEdge keluar yang ditemukan di -721459.77681285271 2009506.5980877089
Saya juga mencoba kode ini untuk memeriksa tumpang tindih:
gIntersects(Clipper_Tile_poly, Soils_poly)
dan hasilnya BENAR. clip
fungsi dalam ESRI ArcMap berfungsi dengan baik untuk data ini.
Adakah yang tahu fungsi R untuk melakukan klip video spasial dengan benar menggunakan spasial?
Jawaban:
Petunjuk yang diberikan oleh @mdsummer tentang penggunaan
byid=TRUE
karya secara akurat.Lihat contoh yang dapat direproduksi, di bawah ini:
sumber
Anda juga dapat menggunakan paket raster
raster::intersect(spdf1, spdf2)
. Ini memiliki keuntungan mempertahankan atribut jika Anda memiliki SpatialPolygonsDataFrame.Berkat pertanyaan ini untuk menunjukkan itu dan untuk kode sampel.
sumber