Многоточечный st_buffer с разным расстоянием
У меня есть sfc_multipoint
объект и хотите использовать st_buffer
но с разными расстояниями для каждой отдельной точки в многоточечном объекте. Это возможно?
Многоточечный объект - это координаты. таблица = данные
Каждая координатная точка (в таблице в "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)
Но он использует только первый dist (0.100). Это результат. Просто очень маленькие буферы. небольшой буфер
Для наглядности смотрите эту картинку. Это просто пример, показывающий, что буфер должен увеличиваться. пример результата
1 ответ
Я думаю, что его проблема в том, как вы "создаете" набор данных точек.
Репликация вашего кода с фиктивными данными, делая это:
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))
НТН!