使用 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 :)
我做错了什么?
问题出在投影上。您需要使用来自 rgdal 或 sp 的 spTransform
将数据投影到 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)
我花了几个小时寻找解决方案,希望这对其他人有所帮助。
首先我是 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 :)
我做错了什么?
问题出在投影上。您需要使用来自 rgdal 或 sp 的 spTransform
将数据投影到 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)
我花了几个小时寻找解决方案,希望这对其他人有所帮助。