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
Выше я беру любую категорию, которая имеет 4, и в новом столбце ставлю ее как 0.
На данный момент, я хочу, чтобы столбец также был назван ratings
для bc
, где он будет принимать 0, если он внутри буфера, и 1, если он снаружи. Проблема в том, что он bc
есть SpatialPolygons
и не содержит таблицы атрибутов.
Очевидно, что для добавления столбца к SpatialPolygon
объекту необходимо преобразовать его в a SpatialPolygonsDataFrame
, но я не знаю как.
Я попробовал это:
buf_df<-as.data.frame(bc)
s_po<-SpatialPolygonsDataFrame(bc,buf_df)
s_po$ratings=0
но эта ошибка выскакивает:
row.names of data and Polygons IDs do not match
r
cartography
Администрация общих служб
источник
источник
Ответы:
Какое отношение имеют объекты "coast", "ro" и "bc" к вашей проблеме? Проблема может заключаться в том, что вы используете «readShapeSpatial». Вы пробовали readOGR в rgdal? Если вы читаете шейп-файл полигона, readOGR приведет к объекту SpatialPolygonsDataFrame.
Если у вас действительно есть объект SpatialPolygons, и вы хотите привести его к SpatialPolygonsDataFrame, то указанному фрейму данных потребуется, чтобы его имена строк соответствовали идентификаторам полигонов в слоте полигонов. Вот быстрый пример.
источник
Пытаться:
match.ID
избегает требования имен строк для идентификатора полигонов соответствияисточник
Это довольно просто:
Когда возникает ошибка: «row.names данных и идентификаторы полигонов не совпадают», это решение кажется полезным: переименуйте идентификаторы кадра данных, чтобы они соответствовали идентификаторам полигонов:
источник
SpatialPolygonsDataFrame
создается.Я считаю, что следующее решение обычно работает.
Сначала создайте пустой фрейм данных с идентификатором в качестве поля:
Затем получите идентификаторы пространственного многоугольника
bc
:Затем используйте df в качестве второго аргумента функции преобразования пространственных данных:
Поскольку
df
иspatial_df
являются объектами dataframe, столбцы могут быть легко добавленыисточник