Menghapus berpotongan satu poligon dari yang lain menggunakan R?

9

Saya mencoba untuk menghapus intersect dari Poly2 ke Poly1. Di bawah ini adalah coords dari 2 poligon.

> coords1
          [,1]     [,2]
 [1,] 992.0161 7462.531
 [2,] 950.1962 7413.532
 [3,] 902.3632 7421.207
 [4,] 706.1985 7472.378
 [5,] 654.0139 7711.760
 [6,] 657.5960 7726.950
 [7,] 786.2667 7844.380
 [8,] 789.5935 7842.925
 [9,] 981.7046 7498.659
[10,] 983.4246 7493.271
[11,] 990.6680 7469.888
[12,] 992.0161 7462.531
> coords2
         [,1]     [,2]
[1,] 930.3464 7607.313
[2,] 979.3528 7502.470
[3,] 865.8662 7484.337
[4,] 850.5665 7594.947
[5,] 930.3464 7607.313

Poly1<-Polygon(coords1)
Poly2<-Polygon(coords2)

2 poligon terlihat seperti ini masukkan deskripsi gambar di siniApa yang ingin saya dapatkan pada akhirnya adalah poligon biru gelap (Poly1) tanpa area biru muda (Poly2) yaitu, koordinat timur baru.

GodinA
sumber

Jawaban:

7

Coba gDifferencefungsi dari paket rgeos :

coords1 <- as.matrix(read.table(textConnection("
992.0161 7462.531
950.1962 7413.532
902.3632 7421.207
706.1985 7472.378
654.0139 7711.760
657.5960 7726.950
786.2667 7844.380
789.5935 7842.925
981.7046 7498.659
983.4246 7493.271
990.6680 7469.888
992.0161 7462.531
")))

coords2 <- as.matrix(read.table(textConnection("
930.3464 7607.313
979.3528 7502.470
865.8662 7484.337
850.5665 7594.947
930.3464 7607.313
")))

library("sp")
poly1 <- Polygon(coords1)
poly2 <- Polygon(coords2)
# create SpatialPolygons objects
p1 <- SpatialPolygons(list(Polygons(list(poly1), "p1")))
p2 <- SpatialPolygons(list(Polygons(list(poly2), "p2")))

library("rgeos")
res <- gDifference(p1, p2)
plot(res, col="blue")

gPerbedaan hasil

rcs
sumber
5

Solusi menggunakan rgeos::gDifferencejauh lebih cepat, tetapi mengembalikan SpatialPolygonsobjek sederhana .

Jika Anda bekerja dengan dua SpatialPolygonsDataFrames dan Anda ingin menyimpan informasi dataframe, Anda bisa melakukan ini, dan hasilnya akan menjadi SpatialPolygonsDataFrame:

library(raster)

res <- p1 - p2
rafa.pereira
sumber
Dengan menggunakan solusi ini, saya mendapatkan kesalahan: "argumen non-numerik ke operator biner"
Ashe
@ Dia, ketik class(my_obj)untuk memeriksa apakah kedua objek AndaSpatialPolygonsDataFrame
rafa.pereira
Memang, saya mendapatkan SpatialPolygonsDataFramesebagai kelas.
Ashe
Hmmm aneh. Saya tidak yakin mengapa ini akan terjadi. Mungkin Anda harus membuka pertanyaan baru tentang cara Hapus berpotongan dari dua SpatialPolygonsDataFrames sambil menyimpan info data
rafa.pereira
1
Saya telah memperbaiki masalah ini. Saya perlu menginstal rasterperpustakaan agar solusi ini berfungsi. Tambahan jawaban itu akan sangat membantu. Juga, beri
Ashe