如何使用R在leaflet上绘制多边形?

3

我在尝试使用R将SpatialPolygonsDataFrame绘制在Leaflet上时遇到了一个简单的问题。我的代码如下:

leaflet() %>%
    addProviderTiles("CartoDB.Positron") %>%
    setView(lng = -80.8858673, lat = 41.1450276, zoom = 5) %>%
    addPolygons(data = SPDF, weight = 2, color = ~colorQuantile("red", SPDF$id)(id))

这里的SPDF是我的SpatialPolygonsDataFrame。

当我执行这段代码时,它只会显示基础地图,“什么都不绘制”。我已经搜索了很多资料,发现这个问题类似,但没有这个问题。

为了绘制多边形,我一直在遵循这个链接中的步骤。

问题似乎很简单,但是对我来说花费了很多时间。期待您的建议,感谢您的时间。

注意:SPDF包含从OSM导出的数据,这意味着多边形的坐标(没有小数点)与OSM数据中的坐标相同。


我们无法测试您的代码,但也许您可以通过在addPolygons()表达式中添加一个颜色参数来开始;(color = ~colorQuantile(...))。 - MLavoie
是的,我已经尝试过了,现在也更新了上面的代码。仍然存在同样的问题。:( - Amir
MLavoie,这是因为我的SPDF中的纬度和经度没有小数点,因为我从OSM导入了数据吗? - Amir
可以做到,但没有访问您的数据集,很难知道。 - MLavoie
你可以在这个链接中找到我的SPDF文件:http://www.filedropper.com/showdownload.php/spdf - Amir
只需执行 load("SPDF.Rda") 命令,即可在 R 中获取它。 - Amir
1个回答

6

最终,我自己成功地找出了问题所在。问题出在投影坐标参考系统(CRS)上。

一开始默认的proj4string没有正确设置,导致坐标不够真实(没有小数点)。因此,我首先设置了我的SpatialPolygonsDataFrame(SPDF)的默认proj4string:

SPDF@proj4string <-CRS("+init=epsg:3857")

设置完毕后,我提供以下投影:

SPDF <- spTransform(SPDF,  CRS("+ellps=WGS84 +proj=longlat +datum=WGS84 +no_defs"))

现在,当我执行以下leaflet代码行时,它完美地工作。

leaflet() %>%
    addProviderTiles("CartoDB.Positron") %>%
    setView(lng = -80.8858673, lat = 41.1450276, zoom = 5) %>%
    addPolygons(data = SPDF, weight = 2, color = ~colorQuantile("red", SPDF$osm_id)(osm_id))

为了解决这个问题,我跟随了这个页面上的讨论。
希望这对其他遇到同样问题的人有所帮助。虽然我并不是投影和地图制图方面的专家,因此,如果有人能推荐一些必要的信息来理解这些问题,那就太好了。感谢大家的时间。
附注:请确保已经包含了必要的软件包,如leaflet、sp、magrittr等。

1
谢谢,伙计。spTransform是唯一缺失的代码行。 - Bhargav Rao

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接