在R中使用Leaflet时多边形缺失,跨电脑复现代码遇问题
跨设备复现Leaflet多边形地图失败?试试这些排查方法
我之前帮同事排查过几乎一模一样的问题,跨电脑跑地图可视化代码经常会遇到这类小坑,给你几个实用的排查方向:
1. 先查依赖包版本
不同电脑上的rgdal、rgeos、leaflet版本不一致是最常见的诱因:
- 在两台电脑上都跑一遍
sessionInfo(),对比这三个包的版本号 - 如果版本差得比较多,要么把新电脑的包降级到能正常运行的版本,要么把旧电脑的包更到最新稳定版
- 顺便提一句:
rgdal和rgeos现在已经被官方推荐的sf包替代了,长期来看换用sf兼容性会好很多,少踩跨设备的坑
2. 绝对路径是大坑
你代码里用的是C:/DISCO D这种绝对路径,另一台电脑大概率吃这个亏:
- 要么没有这个盘符,要么路径拼写有差异(比如空格、大小写、特殊字符)
- 赶紧改成相对路径!把shapefile放在你的R项目文件夹里,比如建个
data子文件夹,然后用readOGR(dsn = "./data", layer = "Muni_2012gw"),这样跨设备就不会出问题了 - 还要确认另一台电脑上的shapefile文件是完整的:
.shp、.shx、.dbf这几个核心文件一个都不能少,缺一个就读取不到
3. 数据筛选和投影别忽略
- 先确认
Mex_sub有没有数据:跑nrow(Mex_sub),如果返回0,说明另一台电脑上的CVE_ENT字段格式可能不一样(比如带空格、大小写不同),可以用unique(Mex$CVE_ENT)看看实际值是什么 - Leaflet默认用WGS84(EPSG:4326)投影,你得确认你的shapefile投影匹配:跑
proj4string(Mex),如果不是4326,就转一下:Mex <- spTransform(Mex, CRS("+init=epsg:4326"))
4. 代码是不是没写完?
你贴的代码里bins &...没写完,另一台电脑上的代码会不会遗漏了关键的多边形渲染部分?比如完整的Leaflet代码应该有类似这样的部分:
# 先定义bins(比如你原来的代码里应该有这部分) bins <- c(0, 10, 20, 30, 40, 50, Inf) # 然后渲染多边形 leaflet(Mex_sub) %>% addTiles() %>% addPolygons(fillColor = ~colorBin("YlOrRd", bins = bins)(CVE_ENT), weight = 2, opacity = 1, color = "white", dashArray = "3", fillOpacity = 0.7)
确认另一台电脑上的代码完整包含了addPolygons这一步,不然肯定看不到多边形
5. 系统环境的隐藏坑
- 检查两台电脑的操作系统(Windows/macOS/Linux),
rgdal这类包依赖系统级的GDAL库,另一台电脑可能没装:- Windows:确认装了最新版的Rtools
- macOS:用Homebrew装GDAL:
brew install gdal - Linux:用包管理器装
libgdal-dev和libgeos-dev
内容的提问来源于stack exchange,提问作者Heber Trujillo




