用R语言从单个中心坐标和面积创建正方形多边形

4

我在使用R语言绘制地理范围内的像素时遇到了问题。文件包含每日单个坐标和像素大小(面积)的列表,还有一个与此分离的Z元素。数据结构如下:

 X <- c(1,3,6,7)
 Y <- c(3,2,7,8)
 Z <- c(38,23,12,12)
 Area <- c(32,23,45,67)

X和Y是以经度和纬度表示的,而面积则以平方公里为单位。我使用以下代码轻松创建点要素:

library(sp)
A <- cbind(X,Y,Z,Area)
B <- SpatialPoints(A)

我使用面积值来确定绘图时的"cex"大小,并使用Z列的强度值来确定颜色。在R中,如何使用每个点的面积创建空间多边形要素?我将使用这些点来创建分块栅格。

2个回答

5
这应该可以解决问题:
library(rgeos)      ## for gBuffer()
library(raster)     ## for bind()

ww <- sqrt(B$Area)/2  ## Widths of buffers needed to produce desired areas    

pp <- list()
for(i in seq_along(B)) {
    pp[i] <- gBuffer(B[i], width=ww[i], quadsegs=1, capStyle="SQUARE")
}
PP <- do.call(bind, pp)

## Check that it worked
plot(PP)
plot(B, add=TRUE)
text(B, labels=1:4, adj=c(-1,0), col="red")

enter image description here


谢谢 Josh。它起作用了。在你的 do.call(bind,res) 中,我将其更改为 (bind,pp) 以使其工作。 - Joke O.
@JokeO. - 啊,是的。谢谢你提醒我。干杯。 - Josh O'Brien
请问您有没有想法在转换为栅格图像之前如何将Z值添加到多边形中呢? - Joke O.
@JokeO. -- 不要在之前,但之后你可以直接执行 SPP <- SpatialPolygonsDataFrame(PP, data.frame(B)),然后 data.frame(SPP) 等将找到附加的数据。 - Josh O'Brien

1

仅作更新,这里提供一个sf解决方案。

用于创建正方形缓冲区的函数。

bSquare <- function(x, a) {
  a <- sqrt(a)/2
  return( sf::st_buffer(x, dist = a, nQuadSegs=1, 
                        endCapStyle = "SQUARE") )
}

一些示例数据

library(sf)
xy <- st_as_sf(data.frame(x = c(1,3,6,7),
               y = c(3,2,7,8), z = c(38,23,12,12),
               area = c(32,23,45,67)),
               coords = c("x", "y"), 
               agr = "constant") 

使用变量缓冲区
sb.var <- bSquare(xy, xy$area)
  plot(st_geometry(sb.var))
    plot(st_geometry(xy), pch=20, add=TRUE)

variable

使用固定缓冲区

sb <- bSquare(xy, 32)
  plot(st_geometry(sb))
    plot(st_geometry(xy), pch=20, add=TRUE)

fixed


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接