R语言Leaflet标准图标示例异常:红绿叶子图标显示为带问号蓝方块
解决Leaflet R包图标显示为蓝色问号方块的问题
我明白你遇到的困扰了——运行这段Leaflet代码时,本该显示的红绿叶子图标没出来,反倒变成了带问号的蓝色方块,好在背景地图显示正常。这其实是Leaflet无法加载指定图标资源时的默认占位符,核心原因是你代码里用的leafletjs.com图标链接大概率已经失效了,毕竟官网的文档结构可能更新过。
下面是具体的排查和修复步骤:
1. 先确认图标URL的有效性
你当前代码里引用的两个图标地址:
http://leafletjs.com/docs/images/leaf-green.pnghttp://leafletjs.com/docs/images/leaf-red.png
现在访问这些地址会发现打不开,这就是图标加载失败的直接原因。
2. 替换为有效图标资源
这里给你两种靠谱的修复方案:
方案一:用Leaflet官方示例的稳定CDN链接
Leaflet官网的示例页面现在使用的图标地址是有效的,直接替换代码里的URL就行:
library(leaflet) # 示例数据 data(quakes) quakes <- quakes[1:10,] # 选择图标: leafIcons <- icons( iconUrl = ifelse(quakes$mag < 4.6, "https://leafletjs.com/examples/custom-icons/leaf-green.png", "https://leafletjs.com/examples/custom-icons/leaf-red.png"), iconWidth = 38, iconHeight = 95, iconAnchorX = 22, iconAnchorY = 94) html_legend <- "<img src='https://leafletjs.com/examples/custom-icons/leaf-green.png'>green<br/> <img src='https://leafletjs.com/examples/custom-icons/leaf-red.png'>red" # 生成地图: leaflet(data = quakes) %>% addTiles() %>% addMarkers(~long, ~lat, icon = leafIcons) %>% addControl(html = html_legend, position = "bottomleft")
方案二:使用本地图标文件(最稳妥)
如果担心外部链接哪天又失效,你可以把图标下载到本地工作目录,然后引用本地路径:
- 下载绿色叶子图标和红色叶子图标,保存到你的R项目工作目录里
- 修改代码里的
iconUrl为本地文件名:
library(leaflet) # 示例数据 data(quakes) quakes <- quakes[1:10,] # 选择图标: leafIcons <- icons( iconUrl = ifelse(quakes$mag < 4.6, "leaf-green.png", "leaf-red.png"), iconWidth = 38, iconHeight = 95, iconAnchorX = 22, iconAnchorY = 94) html_legend <- "<img src='leaf-green.png'>green<br/> <img src='leaf-red.png'>red" # 生成地图: leaflet(data = quakes) %>% addTiles() %>% addMarkers(~long, ~lat, icon = leafIcons) %>% addControl(html = html_legend, position = "bottomleft")
为什么背景地图正常?
你用的addTiles()默认加载的是OpenStreetMap的瓦片服务,这个服务一直很稳定,而且支持跨域访问,所以背景地图能正常显示,和图标加载失败是两回事。
内容的提问来源于stack exchange,提问作者pumphandle
相关产品推荐
相关产品推荐

