Ответ 1
Есть некоторая информация в ?'SpatialPolygons-class'
, но вы более или менее хотите сделать следующее:
polys <- SpatialPolygons(list(
Polygons(list(Polygon(matrix(square[1, ], ncol=2, byrow=TRUE))), ID[1]),
Polygons(list(Polygon(matrix(square[2, ], ncol=2, byrow=TRUE))), ID[2])
))
plot(polys)
Основной смысл состоит в том, что вам нужно создать объекты Polygon
(например, из двух столбцов с координатами x
в первом столбце и y
координаты во втором). Они объединены в списки для создания объектов Polygons
(каждый из которых должен иметь уникальный идентификатор). Эти объекты Polygons
объединяются в список для создания объекта SpatialPolygons
. Вы можете добавить CRS
, если хотите, с аргументом proj4string
в SpatialPolygons
(см. ?SpatialPolygons
).
Чтобы записать его в файл ESRI Shapefile, вам необходимо преобразовать его в объект SpatialPolygonsDataFrame
, объединив созданный объект polys
и некоторые данные. Мы просто добавим идентификаторы в качестве данных из-за отсутствия чего-либо более интересного.
polys.df <- SpatialPolygonsDataFrame(polys, data.frame(id=ID, row.names=ID))
а затем записать его...
writeOGR(polys.df, '.', 'fancysquares', 'ESRI Shapefile')
Второй аргумент ('.'
) говорит, чтобы записать его в текущий рабочий каталог.
ИЗМЕНИТЬ
Чтобы быстро создать SpatialPolygonsDataFrame
, когда у вас много строк, описывающих полигоны, вы можете использовать следующее:
# Example data
square <- t(replicate(50, {
o <- runif(2)
c(o, o + c(0, 0.1), o + 0.1, o + c(0.1, 0), o)
}))
ID <- paste0('sq', seq_len(nrow(square)))
# Create SP
polys <- SpatialPolygons(mapply(function(poly, id) {
xy <- matrix(poly, ncol=2, byrow=TRUE)
Polygons(list(Polygon(xy)), ID=id)
}, split(square, row(square)), ID))
# Create SPDF
polys.df <- SpatialPolygonsDataFrame(polys, data.frame(id=ID, row.names=ID))
plot(polys.df, col=rainbow(50, alpha=0.5))