You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

在R中使用Leaflet时多边形缺失,跨电脑复现代码遇问题

跨设备复现Leaflet多边形地图失败?试试这些排查方法

我之前帮同事排查过几乎一模一样的问题,跨电脑跑地图可视化代码经常会遇到这类小坑,给你几个实用的排查方向:

1. 先查依赖包版本

不同电脑上的rgdalrgeosleaflet版本不一致是最常见的诱因:

  • 在两台电脑上都跑一遍sessionInfo(),对比这三个包的版本号
  • 如果版本差得比较多,要么把新电脑的包降级到能正常运行的版本,要么把旧电脑的包更到最新稳定版
  • 顺便提一句:rgdalrgeos现在已经被官方推荐的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-devlibgeos-dev

内容的提问来源于stack exchange,提问作者Heber Trujillo

火山引擎 最新活动