使用 Leaflet(对于 R)加载 SpatialPolygonsDataFrame 不起作用

Loading SpatialPolygonsDataFrame with Leaflet (for R) doesn't work

首先我是 R 的新手所以请多多包涵。

我最终想要完成的是使用 Leaflet 显示阿姆斯特丹的交互式地图。为此,我正在使用 RGDAL 读取 shapefile。

link 包含阿姆斯特丹的 shapefile。

我正在使用以下代码读取 shapefile 并显示地图。

amsterdam <- readOGR(".", layer = "sd2010zw_region", verbose = FALSE)

leaflet(amsterdam) %>%
  addProviderTiles("CartoDB.Positron", options= providerTileOptions(opacity = 0.99)) %>%
    addPolygons(
      stroke = FALSE, fillOpacity = 0.5, smoothFactor = 0.5
    )

我得到的是来自 CartoDB.Positron 的地图,而不是作为第二层的 'polygonmap'。我得到的是一个包含各种数据的 SpatialPolygonsDataFrame。

另一方面,当我使用 plot 方法时,我得到了阿姆斯特丹的地图

plot(amsterdam, axes=TRUE, border="gray")

但是我不想用地块,我想用Leaflet :)

我做错了什么?

问题出在投影上。您需要使用来自 rgdalspspTransform 将数据投影到 longlat。此外,请在 addPolygons() 调用中提供您的 SpatialPolygonsDataFrame

library(leaflet)
library(rgdal)

amsterdam <- readOGR(".", layer = "sd2010zw_region", verbose = FALSE)

ams_ll <- spTransform(amsterdam, CRS("+init=epsg:4326"))

leaflet() %>%
  addProviderTiles("CartoDB.Positron", options= providerTileOptions(opacity = 0.99)) %>%
  addPolygons(data = ams_ll,
    stroke = FALSE, fillOpacity = 0.5, smoothFactor = 0.5
  )

提示:不要忘记在 addPolygons() 调用中添加 data = ... 变量名。

有效:

leaflet() %>%
  addTiles() %>%
  addPolygons(ams_ll)

这个有效:

leaflet() %>%
  addTiles() %>%
  addPolygons(data = ams_ll)

我花了几个小时寻找解决方案,希望这对其他人有所帮助。