【问题标题】:Loading SpatialPolygonsDataFrame with Leaflet (for R) doesn't work使用 Leaflet(用于 R)加载 SpatialPolygonsDataFrame 不起作用
【发布时间】:2016-10-01 02:26:54
【问题描述】:

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

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

这个link 包含amsterdam 的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 的地图,而不是作为第二层的“多边形地图”。我得到的是一个包含各种数据的 SpatialPolygonsDataFrame。

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

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

但我不想使用情节,我想使用 Leaflet :)

我在这里做错了什么?

【问题讨论】:

    标签: r leaflet rgdal


    【解决方案1】:

    问题在于投影。您需要使用来自 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
      )
    

    【讨论】:

    • 问题:你怎么知道你需要使用哪个CRS?你从哪里得到它? @TimSalabim
    • CRS 不是一个简单的话题。简而言之,网络制图基本上是使用web mercator 完成的。然而,Leaflet 需要 non-projected latitude and longitude coordinates 作为输入,并在内部将它们转换为网络墨卡托(我认为这是糟糕的设计,但我们需要忍受它)。所以对于传单,你基本上只需要知道它们需要在 '+init=epsg:4326' 中(或者更准确地说是 '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs')。跨度>
    • 我想知道你是否可以帮助我解决这个问题:link@TimSalabim。感谢您提供有关 CRS BTW 的信息!
    • 对不起,我不是高手,但 leaflet 包含删除对象的方法。见?removeControl
    • 获得正确的投影也有助于解决传单中的弹出窗口问题。由于某种原因,HTML 不会在投影不匹配的弹出窗口中呈现。
    【解决方案2】:

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

    不起作用

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

    这行得通:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-22
      • 1970-01-01
      • 2020-02-10
      • 1970-01-01
      相关资源
      最近更新 更多