【问题标题】:Display SpatialPolygonsDataFrame on leaflet map with R使用 R 在传单地图上显示 SpatialPolygonsDataFrame
【发布时间】:2015-05-21 00:01:49
【问题描述】:

我想在传单地图上显示加拿大的多边形。

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

我找到了加拿大的多边形:http://www.gadm.org/country。 我为 R 选择了 SpatialPolygonsDataFrame 格式,但还有其他格式可用(例如 Shapefile)

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

如何在地图上显示形状?我假设我必须利用 sp 包,但我不知道如何做到这一点。 非常感谢您的帮助!

【问题讨论】:

    标签: r leaflet polygon


    【解决方案1】:

    您可以按照文档 here 的第 2.2 节将 SpatialPolygons* 对象传递给 addPolygons 函数。

    例如(请注意,以下内容包括约 11.4 MB 的下载):

    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 数据也可以通过raster 包中的getData 函数下载:

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

    编辑

    响应 cmets,我非常喜欢 Natural Earth 提供的轻量级多边形数据集。这是一个示例,我从 Natural Earth 下载了 1:50,000,000 个国家的 shapefile(Admin 0),将其子集到英联邦的当前成员,然后绘制它们。压缩后的 shapefile 小于 1 MB。

    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)
    

    【讨论】:

    • 谢谢 jbaums!这行得通。但是,您是对的,尺寸非常大并且显着减慢了我的处理时间(我的目标是展示几个特定的​​国家/地区)。我可以用这种方式使用更轻的国家多边形吗?最好的问候!
    • @cho7tom - Natural Earth 非常适合这个,请参阅我的编辑。
    • 谢谢 jbaums,它运行良好,帮助了我很多。问候
    • 关于处理时间,我注意到addPolygon 中的smoothFactor,上面写着“在每个缩放级别上简化多段线(更多意味着更好的性能和更不准确的表示)”。也许这会有助于提高性能?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-14
    • 1970-01-01
    • 1970-01-01
    • 2014-01-09
    相关资源
    最近更新 更多