【问题标题】:Leaflet Polylines do not show up传单折线不显示
【发布时间】:2023-04-30 21:14:01
【问题描述】:

我有一个非常小的SpatialLinesDataFrame,我需要在R 中使用Leaflet 进行绘图。

很遗憾,由于某种原因,我无法这样做。 This 是数据(12KB)。

我尝试做:

library(leaflet)
load("mylines.Rdata")
leaflet() %>% addTiles() %>% addPolylines(data=mylines)

但是生成的地图没有意义,我只能在屏幕顶部看到一条线,这不是应该绘制的。 这是结果:

相反,如果我这样做:

library(mapview)
mapview(mylines)

结果: 尽管mapview 在下面使用leaflet,但它工作得很好。 我在 Leaflet 语法中做错了什么?

【问题讨论】:

  • 你能张贴一张“屏幕顶部的线条”的截图吗?缩小地图时会发生什么?
  • @IvanSanchez 完成,我添加了两个屏幕截图来说明问题。感谢您的观看!
  • 是的,当点的纬度大于 ~85.5 度时,这看起来像是一个人工制品(因为地图投影并非微不足道)。我无法阅读.rdata 文件,所以我希望R 知识更丰富的人可以好好看看你的文件并检查你的数据的纬度是否有意义。
  • @IvanSanchez 该地图的坐标实际上与传单投影相同,这意味着 CRS 为:+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs。所以它不是经纬度。这可能是罪魁祸首,但为什么mapview 有效?
  • leaflet 期望坐标位于 longlat 中。使用 mylines_ll <- sp::spTransform(mylines, CRS("+init=epsg:4326"))mylines_ll 应该可以正确渲染。 mapview 即时为您执行此操作。

标签: r leaflet


【解决方案1】:

我习惯使用leaflet 提供rasters,所以我通常使用addRasterImage 函数,它需要将数据投影到leaflet 的显示投影(EPSG:3857)上。但是,对于多边形和线,正如@TimSalabim 正确指出的那样,情况并非如此。

因此,在这种情况下,解决方案是不事先将数据重新投影到 leaflet 投影,而是以经纬坐标 (EPSG:4326) 提供。

mapview 有效,因为它会自动执行此操作。

【讨论】: