我有一个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
答案 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!