从 R 中的单中心坐标和面积创建正方形多边形
Create square polygons from single centre coordinates and area in R
我在 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 中每个点的面积创建空间多边形特征?我将使用这些点来创建网格栅格。
这应该可以解决问题:
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")
稍微更新一下,这是一个 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)
有固定缓冲区
sb <- bSquare(xy, 32)
plot(st_geometry(sb))
plot(st_geometry(xy), pch=20, add=TRUE)
我在 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 中每个点的面积创建空间多边形特征?我将使用这些点来创建网格栅格。
这应该可以解决问题:
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")
稍微更新一下,这是一个 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)
有固定缓冲区
sb <- bSquare(xy, 32)
plot(st_geometry(sb))
plot(st_geometry(xy), pch=20, add=TRUE)