gpt4 book ai didi

r - SpatialPolygons - 从坐标在 R 中创建一组多边形

转载 作者:行者123 更新时间:2023-12-03 21:19:58 26 4
gpt4 key购买 nike

我正在尝试从顶点位置创建一组多边形,以 X、Y 格式保存。

这是我的数据示例 - 每行代表一个多边形的顶点。多边形是正方形

square <- rbind(c(255842.4, 4111578, 255862.4, 4111578, 255862.4, 4111558, 
255842.4, 4111558, 255842.4, 4111578, 255842.4, 4111578),
c(257397.0, 4111309, 257417.0, 4111309, 257417.0, 4111289,
257397.0, 4111289, 257397.0, 4111309, 257397.0, 4111309))

ID <- c("SJER1", "SJER2")'

我正在使用 SpatialPolygons ,因此我的数据需要在列表中。所以我创建了一个循环来尝试将我的数据从矩阵转换为列表格式。

我按照在本网站上的其他一些问题中找到的代码创建了一个循环。我打破了每一步,试图理解为什么即使我有 2 组点,我也只能得到一个多边形作为输出。
for (i in 1:2) {  
pts <- rbind(c(square[i,1], square[i,2]), c(square[i,3], square[i,4]),
c(square[i,5],square[i,6]), c(square[i,7],square[i,8]),
c(square[i,9],square[i,10]))
sp1 <- list(Polygon(pts))
sp2 <- list(Polygons(sp1,i))
sp = SpatialPolygons(sp2)
}
plot(sp)

你能帮我理解我如何调整代码来写出两个多边形而不是一个吗?而且,如果我使用矩阵(正方形)作为我的起始数据集,我如何将 ID 分配给每个多边形,如果我分配一个字符 ID,它会将我的所有数据转换为一个字符。

我的最终目标是 SpatialPolygons 中的两个多边形对象,第一个 ID 为 SJER1第二个 ID 为 SJER2存储在 SpatialPolygons目的。

然后我将把它写到一个 shapefile 中。

最佳答案

有一些信息在?'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)

enter image description here

基本要点是您需要创建 Polygon对象(例如,来自 2 列矩阵,第一列是 x 坐标,第二列是 y 坐标)。这些组合在列表中以创建 Polygons对象(每个对象都应该有一个唯一的 ID)。这些 Polygons对象组合在一个列表中以创建一个 SpatialPolygons目的。您可以添加 CRS如果您愿意,请使用 proj4string论据 SpatialPolygons (见 ?SpatialPolygons)。

要将其写入 ESRI Shapefile,您需要将其转换为 SpatialPolygonsDataFrame对象通过组合 polys我们创建的对象和一些数据。我们只会将 ID 添加为数据,因为缺少任何更有趣的东西。
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))

enter image description here

关于r - SpatialPolygons - 从坐标在 R 中创建一组多边形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26620373/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com