st_buffer具有不同距离的多点

时间:2017-11-01 14:35:29

标签: buffer st 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)的第一个dist。 这是结果。只是非常小的缓冲区。 small buffer

对于可视化,请参见此图片。这只是一个示例,表明缓冲区应该变大。 example result

1 个答案:

答案 0 :(得分:3)

我认为他的问题在于你是如何创造&#34;点数据集。

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

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)

因此,只有一个缓冲距离可以通过&#34;它,你得到:

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))

HTH!