Rgeos elimina i valori associati quando si intersecano poligoni


11

Sto cercando di intersecare due SpatialPolygonsDataFrames e ottenere uno SpatialPolygonsDataFrame come risultato. Sfortunatamente, usando la gIntersectionfunzione da rgeos(che funziona in modo impressionante in modo rapido per intersecare i poligoni), non riesco a recuperare i frame di dati associati. Considera il seguente esempio:

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

Posso scrivere una funzione wrapper che gestisca il trasferimento di data.frames, ma sarà una seccatura ottenere tutto il controllo giusto e prima che lo facessi speravo che qualcuno potesse confermare che non c'è modo migliore o indirizzarmi verso un'altra funzione (o opzione per gIntersection) che mi consentirebbe di conservare gli associati data.frames.

Aggiornare

Su ulteriore riflessione, questo potrebbe essere un comportamento molto deliberato da parte di gIntersection. Dopotutto, dei due SPDF, di chi date.frame passate? Quindi potrei dover scrivere un wrapper che unisce i due.


1
Come stai caricando i tuoi polgyons - readShape * o readOGR? Ho un comportamento strano con gIntersection a seconda della libreria che ho usato per caricare SPDF, di cui non sono arrivato alla fine.
Simbamangu,

@Simbamangu Interessante. Sto usando readShapePoly e quindi unendo un data.frame ....
Ari B. Friedman,

gIntersection DOVREBBE dare i data.frames uniti per le aree sovrapposte - se eseguo Vector | Geoprocessing | Intersect in QGIS, l'output è un insieme di attributi uniti per la sovrapposizione e QGIS non utilizza la stessa libreria GEOS per operazioni spaziali come Questo?
Simbamangu,

Bene, se dovrebbe, allora sono perplesso. Ho già riscritto il mio codice per unire manualmente i data.frames e reinserirli, quindi non ho intenzione di dedicare più tempo a questo per ora. Ma il suggerimento che conta la funzione che legge nel file di forma è utile.
Ari B. Friedman,

1
Questa chiaramente non è una risposta, ma non ho abbastanza punti per lasciare un commento ... Ari, mi chiedevo se avresti condiviso il tuo pezzo di codice per estrarre le variabili seguendo le funzioni di sovrapposizione di rgeos. Sto avendo problemi a avvolgere la testa in un buon modo per trattenere gli ID poligonali originali da varie operazioni di rgeos come gUnion ...
jed.a. lungo

Risposte:


2

Per alcuni progetti avevo lo stesso bisogno. Molto più che mantenere il data.frame, abbiamo dovuto mettere in atto un ulteriore codice per gestire il tipo di geometria di output e procedere a una pulizia (ad es. Raccolte di geometrie pulite), per avere un completo geoprocesso di intersezione. Nel caso in cui sia ancora necessario eseguire tale attività in R, è possibile provare il pacchetto RFigisGeo :

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

#compute intersection
result <- getIntersection(features1, features2)

Sia la tua che la risposta di @ berndv sembrano risolvere il mio problema. Grazie! Contrassegnando questo da quando è arrivato per primo.
Ari B. Friedman,

10

Il comportamento di gIntersection non è di trasmettere dati intersecati in base alla progettazione:

Poiché non esistono corrispondenze generali tra oggetti spaziali intersecati, qualsiasi operazione arbitraria su attributi richiede ipotesi su intenzioni dell'utente sconosciuto. Questo è il motivo per cui nessuno slot di dati deve essere passato ...

... Il design di gIntesection () è intenzionale, perché solo l'utente può sapere cosa fare con gli attributi delle entità che hanno cambiato le loro geometrie. Utenti diversi possono fare ipotesi diverse, ma non esiste una soluzione generale oltre a passare attraverso gli ID delle geometrie che si intersecano, come avviene nel meccanismo row.names ().

Con mia sorpresa, il pacchetto raster ha una funzione di intersezione , che si interseca semplicemente e consegna anche i dati.

Il pacchetto raster ha alcune funzioni che estendono i rgeos tentando anche di gestire anche i dati degli attributi. In questo caso, vedere raster :: intersect E l'elenco delle funzioni qui:? "Pacchetto raster" (sezione XIV)

Le informazioni complete che ho ricevuto su questo: http://r-sig-geo.2731867.n2.nabble.com/Intended-usage-of-gIntersection-td7587120.html


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.