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
Arriba, tomo cualquier categoría que tiene 4 y en la nueva columna la pongo como 0.
En este punto, quiero que la columna también se nombre ratings
para bc
, donde tomará 0 si está dentro del búfer y 1 si está afuera. El problema es que el bc
es SpatialPolygons
y no contiene la tabla de atributos.
Obviamente, para agregar una columna a un SpatialPolygon
objeto, debe convertirlo en a SpatialPolygonsDataFrame
, pero no sé cómo.
Intenté esto:
buf_df<-as.data.frame(bc)
s_po<-SpatialPolygonsDataFrame(bc,buf_df)
s_po$ratings=0
pero aparece este error:
row.names of data and Polygons IDs do not match
r
cartography
gsa
fuente
fuente
Respuestas:
¿Qué tienen que ver los objetos "costa", "ro" y "bc" con su problema? El problema puede estar en que está utilizando "readShapeSpatial". ¿Has probado readOGR en rgdal? Si está leyendo un archivo de forma de polígono, readOGR generará un objeto SpatialPolygonsDataFrame.
Si, de hecho, tiene un objeto SpatialPolygons y desea forzarlo en SpatialPolygonsDataFrame, el marco de datos especificado necesitará que sus nombres de fila coincidan con los ID de los polígonos en la ranura de polígonos. Aquí hay un ejemplo rápido.
fuente
Tratar:
match.ID
evita el requisito de nombres de fila para la identificación de polígonos de coincidenciafuente
Es bastante simple:
Cuando aparece el error: "los nombres de fila de datos y los ID de polígonos no coinciden", esta solución parece ser útil: cambie el nombre de los ID del marco de datos para que coincidan con los ID de los polígonos:
fuente
SpatialPolygonsDataFrame
se crea.Encuentro que la siguiente solución generalmente funciona.
Primero, cree un marco de datos vacío con ID como campo:
Luego obtenga las ID del polígono espacial
bc
:Luego use df como segundo argumento para la función de conversión de marco de datos espacial:
Como
df
yspatial_df
son objetos de marco de datos, las columnas se pueden agregar fácilmentefuente