Arhn - архитектура программирования

Как создать несколько буферов вокруг точек простого объекта в цикле?

У меня есть образцы данных, представляющие 2 точки (sf). Я хочу создать буферы шириной 2, 1 и 0,5. Мой подход ниже. Есть ли способ сделать это более эффективным способом? Как я могу завернуть этот процесс в цикл?

library(sf)

g = st_sfc(c(st_point(1:2),st_point(3:2)))

g.2 <- st_buffer(g,2)
g.1 <- st_buffer(g,1)
g.05 <- st_buffer(g,0.5)

plot(st_geometry(g.2))
plot(st_geometry(g.1), add=TRUE)
plot(st_geometry(g.05), add=TRUE)
plot(st_geometry(g), add=TRUE)
19.02.2020

Ответы:


1

Я попробовал следующее. Я создал цикл с map() в пакете purrr и создал три объекта в списке. Затем я нарисовал первый круг и добавил больше кругов в цикле for.

library(purrr)
library(sf)

g <- st_sfc(c(st_point(1:2),st_point(3:2)))

purrr::map(.x = c(0.5, 1, 2),
           .f = function(x){st_buffer(g, x)}) -> foo

plot(st_geometry(foo[[1]]), xlim = c(0, 4), ylim = c(0, 4))

for(i in 2:length(foo)) {plot(st_geometry(foo[[i]]), add = TRUE)}

введите здесь описание изображения

19.02.2020

2

Придерживаясь вашего запроса (используя цикл), см. здесь пример

library(sf)
g = st_sfc(c(st_point(1:2),st_point(3:2)))
#Buffers
buffers=c(2,1,0.5)
#Initialise result
result=g
#Loop
for (i in buffers){
  #Appending buffered points
  result=c(result,st_buffer(g,i))
}
#Remove initial element
result=result[-1]
plot(result, axes=TRUE)

введите здесь описание изображения

19.02.2020

3

Если вас интересует tidyverse, я сделал следующее главным образом на основе purrr, опираясь на map*functions. В этом случае графики создаются с помощью ggplot2, и генерирует три графика в объекте gg.

library(sf)
library(tidyverse)

g <- st_sfc(c(st_point(1:2),st_point(3:2)))

buffers <- c(0.5, 1, 2)

x <- map2(buffers, g, function(buf, points){

  points %>% 
    st_buffer(., buf)

}) %>% 
  set_names(., nm = sprintf("g.%s", buffers))

gg <- map(names(x), function(y){
  z <- x[[y]]

  z %>% 
    ggplot(.) + 
    geom_sf() + 
    labs(title = y)

}) 

Создана 20 февраля 2020 г. в пакете reprex (v0.3.0)

20.02.2020
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..