buffer - st_buffer 不同距离的多点

标签 buffer r-sf multipoint

我有一个 sfc_multipoint 对象,想要使用 st_buffer,但多点对象中每个点的距离不同。 这可能吗?

多点对象是坐标。 table = data

每个坐标点(在表中的“lon”和“lat”中)应该有一个不同大小的缓冲区。该缓冲区大小包含在表中的“dist”行中。 该表称为数据。

这是我的代码:

library(sf)
coords <- matrix(c(data$lon,data$lat), ncol = 2)
tt     <- st_multipoint(coords)
sfc    <- st_sfc(tt, crs = 4326) 
dt     <- st_sf(data.frame(geom = sfc))
web    <- st_transform(dt, crs = 3857)
geom   <- st_geometry(web)
buf    <- st_buffer(geom, dist = data$dist)

但它只使用 (0.100) 的第一个距离。 这就是结果。只是非常小的缓冲区。 small buffer

有关可视化,请参阅此图片。这只是一个例子,表明缓冲区应该变大。 example result

最佳答案

我认为这里的问题在于您如何“创建”点数据集。

使用虚拟数据复制代码,执行以下操作:

library(sf)
data   <- data.frame(lat = c(0,1,2,3), lon = c(0,1,2,3), dist = c(0.1,0.2,0.3, 0.4))
coords <- matrix(c(data$lon,data$lat), ncol = 2)
tt     <- st_multipoint(coords)

不会为您提供多个点,而是一个 MULTIPOINT 功能:

tt
#> MULTIPOINT (0 0, 1 1, 2 2, 3 3)

因此,只能将单个缓冲区距离“传递”给它,您将得到:

plot(sf::st_buffer(tt, data$dist))

为了解决这个问题,您可能需要以不同的方式构建点数据集。例如,使用:

tt <- st_as_sf(data, coords = c("lon", "lat"))

给你:

tt
#> Simple feature collection with 4 features and 1 field
#> geometry type:  POINT
#> dimension:      XY
#> bbox:           xmin: 0 ymin: 0 xmax: 3 ymax: 3
#> epsg (SRID):    NA
#> proj4string:    NA
#>  dist    geometry
#> 1  0.1 POINT (0 0)
#> 2  0.2 POINT (1 1)
#> 3  0.3 POINT (2 2)
#> 4  0.4 POINT (3 3)

您会看到 tt 现在是一个由 4 个点组成的简单特征集合,在其上具有多个距离的缓冲确实可以工作:

plot(sf::st_buffer(tt, data$dist))

呵呵!

关于buffer - st_buffer 不同距离的多点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47057316/

相关文章:

opengl-es - 在 OpenGL ES 中指定清晰颜色的目的是什么?

c++ - SQL 错误 : near ".2016": syntax error

c# - 避免 Windows 窗体中的闪烁?

Java - 是否可以逐行读取文件,停止,然后立即开始读取我停止的地方的字节?

r - 计算折线之间的最大距离

algorithm - 两点三角剖分求第三点坐标

r - sf包: extract,剪辑,并返回一个多边形

R sf::st_read 连接到 postgis

math - 我怎样才能产生多点线性插值?

windows-7 - Windows 7 上的多个鼠标光标