coast<-readShapeSpatial("coastline.shp")
landc<-readShapeSpatial("landcover.shp")
ro<-readShapeSpatial("roads.shp")
bc<-gBuffer(ro,width=100)
landc$ratings=1
landc$ratings[landc$LANDUSE_ID==4]=0
Oben nehme ich eine Kategorie mit 4 und setze sie in der neuen Spalte als 0.
An dieser Stelle möchte ich die Spalte ratings
auch für die benennen bc
, wo es 0 nehmen wird, wenn es innerhalb des Puffers ist und 1, wenn es außerhalb ist. Das Problem ist, dass das bc
ist SpatialPolygons
und es nicht die Attributtabelle enthält.
Um einem SpatialPolygon
Objekt eine Spalte hinzuzufügen, muss man sie natürlich in eine konvertieren SpatialPolygonsDataFrame
, aber ich weiß nicht, wie.
Ich habe es versucht:
buf_df<-as.data.frame(bc)
s_po<-SpatialPolygonsDataFrame(bc,buf_df)
s_po$ratings=0
aber dieser Fehler taucht auf:
row.names of data and Polygons IDs do not match
r
cartography
gsa
quelle
quelle
Antworten:
Was haben die Objekte "coast", "ro" und "bc" mit Ihrem Problem zu tun? Das Problem kann darin liegen, dass Sie "readShapeSpatial" verwenden. Hast du readOGR in rgdal ausprobiert? Wenn Sie ein Polygon-Shapefile lesen, führt readOGR zu einem SpatialPolygonsDataFrame-Objekt.
Wenn Sie tatsächlich über ein SpatialPolygons-Objekt verfügen und in SpatialPolygonsDataFrame konvertieren möchten, müssen die Rownamen des angegebenen Datenrahmens mit den Polygon-IDs im Polygon-Slot übereinstimmen. Hier ist ein kurzes Beispiel.
quelle
Versuchen:
match.ID
Vermeidet das Erfordernis von Rownamen für Match Polygons IDquelle
Es ist ganz einfach:
Wenn der Fehler "row.names of data und Polygons IDs stimmen nicht überein" auftritt, scheint diese Lösung hilfreich zu sein: Benennen Sie die IDs des Datenrahmens um, damit sie mit den IDs der Polygone übereinstimmen:
quelle
SpatialPolygonsDataFrame
.Ich finde, dass die folgende Lösung im Allgemeinen funktioniert.
Erstellen Sie zunächst einen leeren Datenrahmen mit der ID als Feld:
Dann erhalten Sie die IDs des räumlichen Polygons
bc
:Verwenden Sie dann df als zweites Argument für die Konvertierungsfunktion für räumliche Datenrahmen:
Wie
df
undspatial_df
Dataframe - Objekte sind, können Spalten leicht hinzugefügt werdenquelle