Converti un oggetto poligono spaziale in un frame di dati usando R


18

Il mio obiettivo è quello di modificare uno shapefile esistente unendo determinati poligoni.

Dopo aver importato lo shapefile e usando il comando UnionSpatialPolygons, ottengo il contorno poligonale che desidero.

Tuttavia, questo è ora un oggetto SpatialPolygons e non un oggetto SpatialPolygonsDataFrame, quindi non sono in grado di esportarlo in un file di forma utilizzando writeOGR.

Come posso aggirare questo problema?


3
Se la risposta di seguito è stata utile, è necessario selezionarla come corretta facendo clic sul segno di spunta a sinistra del testo della risposta.
SlowLearner,

Risposte:


20

Come dice il nome, uno SpatialPolygonsDataFrame è fondamentalmente solo un oggetto SpatialPolygons con i dati allegati (la tabella degli attributi). I dati devono avere almeno tante righe quante sono le funzionalità

library(rgdal)
ob <- SpatialPolygons(..)# Your SpatialPolygons Object
spp <-     SpatialPolygonsDataFrame(ob,data=as.data.frame("yourData"),proj4string=CRS("+proj=    aea > +ellps=GRS80 +datum=WGS84"))
writeOGR(spp,"shapes","testShape",driver="ESRI Shapefile",)

----MODIFICARE----

Se vuoi convertire la SpatialPolygonsDataFrameschiena in un SpatialPolygonsoggetto, devi solo indirizzare la struttura dell'oggetto all'interno di R

ob <- SpatialPolygons(spp@polygons,proj4string=spp@proj4string)

Sicuramente, @Curlew ha ragione. Assicurati di specificare IDscorrettamente l'argomento durante l'esecuzione UnionSpatialPolygons. Altrimenti potresti avere difficoltà a specificare l' dataargomento durante la riconversione in SpatialPolygonsDataFrame.
fdetsch,

1
Certo, abbastanza facile. Ho modificato la risposta originale per questo
Chiurlo

1
Solo di recente ho iniziato a lavorare con gli shapefile e ancora provando a familiarizzare con questo. Qual è l'esatto dovrebbe essere sostituito con youData in data=as.data.frame("yourData")? Dopo aver dissolto i poligoni interni usando unionSpatialPolygons(...), vorrei scrivere il risultato come nuovo shapefile
lightonphiri

Devi avere un data.frame con lo stesso numero di righe delle funzionalità nell'oggetto SpatialPolygons. Meglio fare una nuova domanda sul tuo unionproblema.
Chiurlo

1
@Curlew Grazie, ho appena pubblicato nuove domande qui gis.stackexchange.com/q/121405/40108
lightonphiri

9

I problemi:

1: il risultato di UnionSpatialPolygons è un poligono spaziale

2: riconvertire il risultato in un frame di dati poligonale spaziale è un vero dolore

-un. è necessario un frame di dati molto preciso da collegare a un poligono spaziale

-b. i dati utilizzati per UnionSpatialPolygons hanno più righe dell'output e non sono formattati nel modo necessario.

La mia (brutta) soluzione:

### Coerce into spatial polygon data frame with id and row name of spatial polygon

# Make a data frame that meets the requirements above:

df<- data.frame(id = getSpPPolygonsIDSlots(your.spatialpolygon))
row.names(df) <- getSpPPolygonsIDSlots(your.spatialpolygon)

# Make spatial polygon data frame
spdf <- SpatialPolygonsDataFrame(your.spatialpolygon, data =df)

# Then don't forget to make sure the projection is correct
# XXXX is your SRID

proj4string(spdf) <- CRS("+init=epsg:XXXX");
spdf <- spTransform(spdf , CRS("+init=epsg:XXXX"));

Errore in if (length (Sr @ poligoni)! = Nrow (data)) stop (incolla ("Mancata corrispondenza lunghezza oggetto: \ n",: argomento di lunghezza zero Inoltre: Messaggi di avviso: 1: usa * applica e slot direttamente
Mox,
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.