Конвертировать из простой геометрии объекта в фрейм данных - PullRequest
0 голосов
/ 17 февраля 2019

Я хочу построить две фигуры рядом друг с другом.Формы создаются с помощью пакета transformR.Этот код выводит их друг на друга.

library(transformr)
library(ggplot2)


star_1a <- poly_star(n = 5, st = TRUE)
circle_2a <- poly_circle(st = TRUE)

df1 <- data.frame(
  geo = sf::st_sfc(star_1a, circle_2a),
  col = c('steelblue', 'green'),
  id = c(1, 2)
)

ggplot(df1) +
  geom_sf(aes(geometry = geometry)) 

Я мог бы удалить опцию st = TRUE из каждой фигуры, чтобы получить фрейм данных, но, скажем, я не хочу этого делать.Как преобразовать объект sfg в кадр данных со столбцами x, y, чтобы я мог немного переместить круг вправо и затем преобразовать их обратно в объекты sfg.

1 Ответ

0 голосов
/ 17 февраля 2019

У вас уже есть data.frame, и вы можете выполнять преобразования объектов st_sfc в нем, используя базовые аффинные преобразования .Например,

df1[1,1] = df1[1,1] + c(2,0) 

ggplot(df1) +
  geom_sf(aes(geometry = geometry)) 

enter image description here

Пояснительная записка: df1[1,1] выбирает первый столбец и строку, которая является звездой.Добавление c(2,0) переводит его на +2 в направлении х.

Ответ на вопрос, который вы на самом деле задали: Если вам действительно нужен x, y, кординируетв качестве столбцов в data.frame вы можете использовать

df2 = data.frame(st_coordinates(df1[,1]))

Однако для описанного вами варианта использования первый вышеописанный метод будет лучше.Не только потому, что он быстрее и аккуратнее, но и потому, что манипулирование самими объектами sf позаботится о таких вещах, как crs и экстент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...