упростить мой шейп-файл штата США с помощью rmapshaper::ms_simplify дает ошибку

Я делаю карту состояния хлороплетов в своем блестящем приложении, используя пакет листовок. Я обнаружил, что рендеринг карты очень медленный. После поиска в Google кажется, что шейп-файл слишком сложен, и его упрощение может сделать его намного быстрее. В соответствии с этим post, упрощение шейп-файла может помочь.

Чтение файла формы работает нормально. Я смог визуализировать свою карту-листовку.

states_shape <- tigris::states(cb = TRUE, resolution='500k')
leaflet(states_shape) %>%
  addProviderTiles("CartoDB.Positron") %>%
  addPolygons(fillColor = "white",
              color = "black",
              weight = 0.5) %>%
  setView(-98.5795, 39.8282, zoom=3)

Я попытался упростить свой шейп-файл с помощью rmapshaper::ms_simplify

states_shape_simple <- rmapshaper::ms_simplify(states_shape, keep = 0.05, keep_shapes = TRUE)

Я получил ошибку, как показано ниже:

Error in FUN(X[[i]], ...) : isTRUE(gpclibPermitStatus()) is not TRUE

Я понятия не имею, что это значит и что делать. Кто-нибудь знает, почему это произошло и как заставить это работать? Большое спасибо!


person zesla    schedule 27.05.2020    source источник
comment
Привет! Можете ли вы попробовать запустить tigris::states() с параметром class = "sf", а затем rmapshaper::ms_simplify()?   -  person agila    schedule 27.05.2020
comment
оно работает! Пожалуйста, укажите это как ответ, и я приму его. Кстати, в чем разница между «sp» и «sf»? почему это работает с class='sf'?   -  person zesla    schedule 27.05.2020


Ответы (1)


Следующее должно работать:

# packages
library(sf)
#> Linking to GEOS 3.8.0, GDAL 3.0.4, PROJ 6.3.1
library(leaflet)

# data
states_shape <- tigris::states(cb = TRUE, resolution='500k', class = "sf")

# simplify
states_shape_simple <- rmapshaper::ms_simplify(states_shape, keep = 0.05, keep_shapes = TRUE)
states_shape_simple <- st_transform(states_shape_simple, 4326)

# plot
leaflet(states_shape_simple) %>%
  addProviderTiles("CartoDB.Positron") %>%
  addPolygons(fillColor = "white",
              color = "black",
              weight = 0.5) %>%
  setView(-98.5795, 39.8282, zoom = 3)

Создана 27 мая 2020 г. с помощью пакета reprex (v0.3.0)

Я добавил states_shape_simple <- st_transform(states_shape_simple, 4326), так как получил предупреждение от leaflet о том, что объект states_shape_simple имеет недопустимые данные. Я не знаю, сталкиваетесь ли вы с таким же предупреждающим сообщением.

В любом случае, если вы хотите прочитать что-нибудь о различиях между sf и sp, обратитесь к главе 1 Geoocomputation with R (и может быть, глава 6 о репроекциях, таких как st_transform). Я не знаю, почему это не работает с sp, возможно, вы можете обратиться к менеджер пакетов.

person agila    schedule 27.05.2020