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.