Преобразовать результат st_bbox () в другой CRS - PullRequest
3 голосов
/ 07 марта 2019

Есть ли простой способ преобразовать привязку простого объекта (sf объекта) к другому CRS?

Результат функции st_bbox() относится к классу bbox.Невозможно использовать st_transform() для преобразования его в другой CRS.

Я использую вычисленную ограничивающую рамку на основе EPSG: 28992:

sf::st_bbox(xmin = 187470, xmax =194587, 
            ymin = 409753, ymax = 412715,  
            crs = st_crs(28992))

Теперь я хочу преобразовать эту рамку в EPSG:4326

Ответы [ 2 ]

1 голос
/ 08 марта 2019

Существует st_as_sfc метод для bbox объектов, поэтому мы можем преобразовать bbox следующим образом:

library(sf)

bb = sf::st_bbox(c(xmin = 187470, xmax =194587, 
                   ymin = 409753, ymax = 412715),  
                 crs = st_crs(28992))

bb_ll = st_bbox(
  st_transform(
    st_as_sfc(bb), 
    4326
  )
)

# or pipey
library(magrittr)

bb_ll = bb %>%
  st_as_sfc() %>%
  st_transform(crs = 4326) %>%
  st_bbox()

bb_ll

    xmin      ymin      xmax      ymax 
5.856639 51.675176  5.959866 51.702257
1 голос
/ 07 марта 2019

Один из способов сделать это - создать промежуточное значение sfc_MULTIPOINT, преобразовать его в 4326, а затем извлечь ограничивающий прямоугольник из этого объекта:

pts <- st_multipoint(rbind(c(187470, 409753), c(194587, 412715))) %>% st_sfc(crs = st_crs(28992))
pts <- pts %>% st_transform(crs = 4326)

st_bbox(pts)

     xmin      ymin      xmax      ymax 
 5.856639 51.675634  5.959866 51.701799 
...