Почему функция st_buffer не создает объект R, который правильно отображается в просмотре карты? - PullRequest
0 голосов
/ 28 марта 2020

Попытка получить функцию st_buffer для отображения буфера в просмотре карты. Получил это, чтобы работать, но я должен был сначала выполнить преобразование (я сомневаюсь, что это необходимо). В поисках более простого способа сделать это.

РЕДАКТИРОВАТЬ : Чтобы уточнить ... буферы (в данном случае, полигоны), я хотел бы нарисовать вокруг точек, было бы расстояние (скажем, километры) вокруг точек.

library(sf)
library(mapview)

data("breweries")

test_coords <- st_geometry(breweries[1:2,])

# This code doesn't work. Not sure why.
# buff_test_coords <- st_buffer(test_coords, dist = 10000)
# mapview(test_coords) + mapview(buff_test_coords)

# This code words. Not sure what's special about transforming to 3488
sf_test_coords <- test_coords %>% st_transform(3488)
sf_buff_test_coords <- st_buffer(sf_test_coords, 10000)
sf_buff_test_coords2 <- st_transform(sf_buff_test_coords, 4326)
mapview(test_coords) + mapview(sf_buff_test_coords2)

1 Ответ

1 голос
/ 28 марта 2020

Ну, предупреждение довольно ясное, буферизация не работает для непроецированных данных.

#> Warning in st_buffer.sfc(test_coords, dist = 2): st_buffer does not correctly
#> buffer longitude/latitude data
#> dist is assumed to be in decimal degrees (arc_degrees).

Ваши данные показывают proj4string: "+proj=longlat +datum=WGS84 +no_defs", поэтому вы либо проецируете их, либо меняете подход. Кроме того, вы пытались проецировать lonlat (-180,180 градусов) на 10000, что означает 10000 градусов. Так что это бессмысленный буфер, буферизация работает на тех же единицах проекции.

Здесь у вас есть два подхода без проецирования:

  • Буферизация на 2 градуса, она работает, но буфер довольно странный.
  • Другой вариант - просто построить два раза одну и ту же точку, но не передавать ее в POLYGON, как это делает буфер. Просто нанесите его во второй раз с большим cex.
library(sf)
#> Warning: package 'sf' was built under R version 3.5.3
#> Linking to GEOS 3.6.1, GDAL 2.2.3, PROJ 4.9.3
library(mapview)
#> Warning: package 'mapview' was built under R version 3.5.3

data("breweries")

test_coords <- st_geometry(breweries[1:2,])
st_crs(test_coords)
#> Coordinate Reference System:
#>   EPSG: 4326 
#>   proj4string: "+proj=longlat +datum=WGS84 +no_defs"
buff_test_coords <- st_buffer(test_coords, dist = 2)
#> Warning in st_buffer.sfc(test_coords, dist = 2): st_buffer does not correctly
#> buffer longitude/latitude data
#> dist is assumed to be in decimal degrees (arc_degrees).

#Buffering non-projected coords
mapview(test_coords) + mapview(buff_test_coords)


#Plotting the same points with a bigger cex
mapview(test_coords) + mapview(test_coords, cex=100, col.regions ="red")

Создано в 2020-03-28 пакетом Представ (v0.3.0)

...