Rgeos menjatuhkan nilai terkait saat memotong poligon

11

Saya mencoba untuk memotong dua SpatialPolygonsDataFrames dan mendapatkan SpatialPolygonsDataFrame sebagai hasilnya. Sayangnya, dengan menggunakan gIntersectionfungsi dari rgeos(yang bekerja dengan cepat untuk memotong poligon), saya sepertinya tidak bisa mengambil dataframe yang terkait. Perhatikan contoh berikut:

> fracPoly <- gIntersection( toSingle, fromSingle )
> class(toSingle)
[1] "SpatialPolygonsDataFrame"
> class(fromSingle)
[1] "SpatialPolygonsDataFrame"
> class(fracPoly)
[1] "SpatialPolygons"

Saya dapat menulis fungsi pembungkus yang menangani transfer data.frames, tetapi akan sangat merepotkan untuk mendapatkan semua pengecekan dengan benar dan sebelum saya melakukannya saya berharap seseorang dapat mengkonfirmasi bahwa tidak ada cara yang lebih baik atau mengarahkan saya ke fungsi lain (atau opsi untuk gIntersection) yang akan memungkinkan saya untuk mempertahankan yang terkait data.frames.

Memperbarui

Pada refleksi lebih lanjut, ini mungkin merupakan perilaku yang disengaja oleh gIntersection. Lagi pula, dari dua SPDF, yang mana data.frame yang Anda sampaikan? Jadi saya mungkin harus menulis pembungkus yang menggabungkan keduanya.

Ari B. Friedman
sumber
1
Bagaimana Anda memuat poligon Anda - readShape * atau readOGR? Saya mendapatkan perilaku aneh dengan gIntersection tergantung pada pustaka mana yang saya gunakan untuk memuat SPDF, yang belum saya dapatkan di bagian bawah.
Simbamangu
@Simbamangu Menarik. Saya menggunakan readShapePoly dan kemudian menggabungkan data.frame ....
Ari B. Friedman
gIntersection HARUS memberikan data.frame digabung untuk area yang tumpang tindih - jika saya menjalankan Vector | Geoprocessing | Intersect di QGIS, output adalah seperangkat atribut gabungan untuk tumpang tindih, dan tidak QGIS menggunakan perpustakaan GEOS yang sama untuk operasi spasial seperti ini?
Simbamangu
Nah kalau harus begitu saya bingung. Saya sudah menulis ulang kode saya untuk menggabungkan data.frame dengan tangan dan memasukkannya kembali, jadi saya tidak akan menghabiskan waktu lagi untuk ini untuk saat ini. Tetapi petunjuk bahwa fungsi membaca dalam hal-hal shapefile sangat membantu.
Ari B. Friedman
1
Ini jelas bukan jawaban, tapi saya tidak punya cukup poin untuk meninggalkan komentar ... Ari, saya bertanya-tanya apakah Anda akan berbagi potongan kode Anda untuk mengekstrak variabel berikut fungsi overlay rgeos. Saya mengalami kesulitan membungkus kepala saya di sekitar cara yang baik untuk mempertahankan id poligon asli dari berbagai operasi rgeos seperti gUnion ...
jed.a.long

Jawaban:

2

Untuk beberapa proyek saya memiliki kebutuhan yang sama. Lebih dari sekadar menjaga data.frame, kami harus menempatkan kode lebih lanjut untuk mengelola tipe geometri keluaran, dan melanjutkan ke pembersihan (mis. Koleksi geometri bersih), untuk memiliki beberapa geoproses persimpangan lengkap. Jika Anda masih perlu melakukan tugas seperti itu di R, Anda dapat mencoba paket RFigisGeo :

#install RFigisGeo
require(devtools) 
install_github("RFigisGeo", "openfigis")
require(RFigisGeo)

#compute intersection
result <- getIntersection(features1, features2)
eblondel
sumber
Jawaban Anda dan @ berndv sepertinya akan menyelesaikan masalah saya. Terima kasih! Menandai yang ini sejak yang lebih dulu.
Ari B. Friedman
10

Perilaku gIntersection adalah untuk tidak melewatkan data berpotongan dengan desain:

Karena tidak ada kecocokan umum antara objek spasial berpotongan, setiap operasi sewenang-wenang pada atribut memerlukan asumsi tentang niat pengguna yang tidak diketahui. Inilah sebabnya mengapa tidak ada slot data yang harus dilewati ...

... Desain gIntesection () tidak disengaja, karena hanya pengguna yang tahu apa yang harus dilakukan dengan atribut entitas yang geometrinya berubah. Pengguna yang berbeda dapat membuat asumsi yang berbeda, tetapi tidak ada solusi umum selain melewati ID dari geometri berpotongan, seperti yang dilakukan dalam mekanisme row.names ().

Yang mengejutkan saya, paket raster memiliki fungsi persimpangan , yang hanya memotong dan menyerahkan data juga.

Paket raster memiliki beberapa fungsi yang memperluas rgeos dengan juga berusaha untuk menangani data atribut juga. Dalam hal ini, lihat raster :: intersect Dan daftar fungsi di sini:? "Raster-package" (bagian XIV)

Info lengkap yang saya dapat tentang ini: http://r-sig-geo.2731867.n2.nabble.com/Intended-usage-of-gIntersection-td7587120.html

Bernd V.
sumber
0

Bagi mereka (seperti saya) yang jawaban di atas tidak berfungsi, tautan di sini menjelaskan bahwa Anda dapat melakukan hal ini dengan memotong raster.

Bagaimana cara menyimpan semua data atribut saat memotong dua poligon di R?

Saya menggunakan ini untuk memotong SpatialPointsDataFrame dengan shapefile SpatialPolygons; itu membuat versi SpatialPointsDataFrame yang dipotong / terpotong, mempertahankan data asli.

Leah Bevis
sumber