点周围的缓冲区怎么可能不是圆?(或者,rgeos::gBuffer()的奇怪行为)
我在点周围的缓冲区怎么可能不是圆?(或者,rgeos::gBuffer()的奇怪行为),r,sp,sf,R,Sp,Sf,我在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 p
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()
围绕一个点返回一个圆。有什么理由我不应该期望那样吗?有人能解释发生了什么事吗 罚款包括
quadsegs[default=5]用于近似四分之一圆的线段数
因此,20个角(=4*5)正是默认设置所期望的。如果想要更接近圆的东西,请增加quadsegs
的值
我认为这样做是为了提高计算效率。重要的一点是,红色形状也不是一个圆-它是120阿贡,因为
?st_buffer
具有nqadsegs=30
。如果你想在R中画一个完美的柏拉图圆,你需要把它表示成一个有中心和半径的物体。@djasc1=list(半径=4.3,中心=c(2.2,5.12))
或类似的东西。我不知道是否有一个R包来处理显式精确的几何对象。去检查一下起重机。