一个点周围的缓冲区怎么可能不是一个圆? (或者, rgeos::gBuffer() 的奇怪行为)
How can a buffer around a point not be a circle? (Or, strange behavior of rgeos::gBuffer() )
对于 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)
我明白了:
可能是我上传的图片分辨率不太好,重点是:有一个红色的圆圈,一个不是圆圈(我数了一下边,好像是20边形的) 穿蓝色衣服。如果你将 sf
对象转换为 sp
你仍然得到一个圆,如果你将 sp
对象转换为 sf
,你仍然得到一个 20 边形(所以它不仅仅是绘图方法上的差异)。
我预计 gBuffer()
围绕一个点 return 一个圆。有什么我不应该期待的理由吗?任何人都可以解释发生了什么事吗?
罚款rgeos::gBuffer documentation包括
quadsegs [default=5] Number of line segments to use to approximate a quarter circle.
因此 20 边形 (=4*5) 正是您在默认设置下所期望的。如果您想要更接近圆形的东西,请增加 quadsegs
.
的值
我假设这样做是为了提高计算效率。
对于 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)
我明白了:
可能是我上传的图片分辨率不太好,重点是:有一个红色的圆圈,一个不是圆圈(我数了一下边,好像是20边形的) 穿蓝色衣服。如果你将 sf
对象转换为 sp
你仍然得到一个圆,如果你将 sp
对象转换为 sf
,你仍然得到一个 20 边形(所以它不仅仅是绘图方法上的差异)。
我预计 gBuffer()
围绕一个点 return 一个圆。有什么我不应该期待的理由吗?任何人都可以解释发生了什么事吗?
罚款rgeos::gBuffer documentation包括
quadsegs [default=5] Number of line segments to use to approximate a quarter circle.
因此 20 边形 (=4*5) 正是您在默认设置下所期望的。如果您想要更接近圆形的东西,请增加 quadsegs
.
我假设这样做是为了提高计算效率。