Вопрос по r, polygon, leaflet – Показать SpatialPolygonsDataFrame на листовой карте с R

6

Я хотел бы отобразить многоугольник Канады на листовой карте.

# create map
library(leaflet)
m = leaflet() %>% addTiles()
m

Я смог найти многоугольник для Канады:http://www.gadm.org/country, Я выбрал формат SpatialPolygonsDataFrame для R, но есть и другие доступные форматы (например, Shapefile)

# load object in R
load("country_polygons/CAN_adm0.RData")
pol_can <- gadm

Как я могу отобразить фигуру на карте? Я предполагаю, что мне нужно использовать пакет sp, но я не мог понять, как это сделать. Заранее большое спасибо за вашу помощь!

Ваш Ответ

1   ответ
15

SpatialPolygons* возражать противaddPolygons функционировать в соответствии с разделом 2.2 документовВот.

Например (обратите внимание, что следующее включает загрузку ~ 11,4 МБ):

library(sp)
download.file('http://biogeo.ucdavis.edu/data/gadm2/R/CAN_adm0.RData', f <- tempfile())
load(f)
leaflet() %>% addTiles() %>% addPolygons(data=gadm, weight=2)

Обратите внимание, что данные GADM также могут быть загружены сgetData функция вraster пакет:

library(raster)
can <- getData('GADM', country='VAT', level=0)

РЕДАКТИРОВАТЬ

В ответ на комментарии мне очень нравятся легкие наборы данных полигонов, которыеЕстественная земля обеспечивает. Вот пример, где я загружаю шейп-файл стран 1: 50 000 000 (Admin 0) из Natural Earth, поднаправляю его текущим членам Содружества наций и строю их. Архивированный файл размером менее 1 МБ.

library(rgdal)
library(leaflet)

download.file(file.path('http://www.naturalearthdata.com/http/',
                        'www.naturalearthdata.com/download/50m/cultural',
                        'ne_50m_admin_0_countries.zip'), 
              f <- tempfile())
unzip(f, exdir=tempdir())

world <- readOGR(tempdir(), 'ne_50m_admin_0_countries', encoding='UTF-8')

commonwealth <- c("Antigua and Barb.", "Australia", "Bahamas", "Bangladesh", 
  "Barbados", "Belize", "Botswana", "Brunei", "Cameroon", "Canada", "Cyprus",
  "Dominica", "Fiji", "Ghana", "Grenada", "Guyana", "India", "Jamaica", "Kenya",
  "Kiribati", "Lesotho", "Malawi", "Malaysia", "Maldives", "Malta", "Mauritius",
  "Mozambique", "Namibia", "Nauru", "New Zealand", "Nigeria", "Pakistan", "Papua
  New Guinea", "Rwanda", "St. Kitts and Nevis", "Saint Lucia", "St. Vin. and
  Gren.", "Samoa", "Seychelles", "Sierra Leone", "Singapore", "Solomon Is.",
  "South Africa", "Sri Lanka", "Swaziland", "Tanzania", "Tonga", "Trinidad and
  Tobago", "Tuvalu", "Uganda", "United Kingdom", "Vanuatu", "Zamibia")

leaflet() %>% addTiles() %>% 
  addPolygons(data=subset(world, name %in% commonwealth), weight=2)

Что касается времени процесса, я заметилsmoothFactor вaddPolygon, в котором говорится "насколько упростить полилинию на каждом уровне масштабирования (больше означает лучшую производительность и менее точное представление)". Возможно, это поможет производительности? geneorama
Спасибо, JBAUM, он работает отлично и помог мне много. С уважением cho7tom
Спасибо, Jbaums! Это работает. Вы правы, однако, размер очень большой и значительно замедляет мое время процесса (я стремлюсь показать несколько конкретных стран). Есть ли более легкая версия полигонов стран, которую я мог бы использовать таким образом? С наилучшими пожеланиями! cho7tom
@ cho7tom -Естественная земля отлично подходит для этого, см. мое редактирование. jbaums

Похожие вопросы