gpt4 book ai didi

r - 一个点周围的缓冲区怎么可能不是一个圆? (或者, rgeos::gBuffer() 的奇怪行为)

转载 作者:行者123 更新时间:2023-12-01 23:20:14 26 4
gpt4 key购买 nike

对于 R 中的许多地理事物,我已经从包 sp 切换到 sf,直到现在我才注意到一个奇怪的问题sp/rgeos 中的行为。在这里:

library(sp)
library(sf)
library(rgeos)

# crs
WGS84M = "+proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs"

# a point
point = data.frame(x = 0, y = 0)

# simple feature from point
f.point = st_as_sf(point, coords = c('x', 'y'))
st_crs(f.point) = WGS84M
f.buf = st_geometry(st_buffer(f.point, dist = 5 * 1000))

# spatial object from point
s.point = SpatialPoints(point, proj4string = CRS(WGS84M))
s.buf = gBuffer(s.point, width = 5 * 1000)

plot(s.buf, border = "blue")
plot(f.buf, border = "red", add = T)

我明白了:

enter image description here

可能是我上传的图片分辨率不太好,重点是:有一个红色的圆圈,还有一个非圆圈(我数了一下边,好像是20边形)蓝色的。如果将 sf 对象转换为 sp,您仍然会得到一个圆,如果将 sp 对象转换为 sf,您仍然得到 20 边形(所以这不仅仅是绘图方法上的差异)。

我希望 gBuffer() 围绕一个点返回一个圆。有什么我不应该期待的理由吗?任何人都可以解释发生了什么事吗?

最佳答案

罚款rgeos::gBuffer documentation包括

quadsegs [default=5] Number of line segments to use to approximate a quarter circle.

因此 20 边形 (=4*5) 正是您在默认设置下所期望的。如果您想要更接近圆形的东西,请增加 quadsegs 的值。

我假设这样做是为了提高计算效率。

关于r - 一个点周围的缓冲区怎么可能不是一个圆? (或者, rgeos::gBuffer() 的奇怪行为),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58512636/

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