You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R Markdown中构建Leaflet地图时遭遇“Don't know how to get path data from object of class character”错误的技术求助

解决R Markdown Leaflet地图的两个关键错误

咱们一步步排查你遇到的问题,先解决语法错误,再处理核心的Leaflet数据类型问题:

1. 修复Setup块的语法遗漏

你的setup代码里knitr::opts_chunk$set缺少括号和配置参数,会导致后续代码块的默认配置失效。修改为:

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE, warning = FALSE, message = FALSE)
library(leaflet)
library(dplyr)
library(sf)
library(rgdal) # 若仍需使用readOGR则保留
## 2. 修复筛选Schools的语法错误
你提到的`Error: unexpected ',' in "Schools <- (data$name == "schools","`是因为语法不完整:
- 原代码多了一个逗号,且未闭合括号
- 若想筛选`name`为"schools"的数据行,正确写法是:
  ```r
  # 基础R写法
  Schools <- data[data$name == "schools", ]
  
  # 或用dplyr更简洁的写法
  Schools <- data %>% filter(name == "schools")

3. 解决核心错误:Leaflet多边形数据类型不匹配

你遇到的Error in polygonData.default(data) : Don't know how to get path data from object of class character,核心原因是最后一段Leaflet代码传错了数据对象:

  • 你把data = Types传给了leaflet,但Types是unique(data$type)生成的字符向量,而addPolygons需要的是空间数据对象(比如你读入的Buildings,属于SpatialPolygonsDataFrame类型)
  • 同时setView里用points_lng和points_lat是错误的,这两个是多个点的坐标,setView需要单个中心点(应该用卢森堡的经纬度lux_lng和lux_lat)

修正后的分类地图代码:

```{r}
catpal <- colorFactor(topo.colors(length(Types)), Types)

leaflet(data = Buildings, width='100%') %>% 
  setView(lng=lux_lng, lat=lux_lat, zoom=9) %>% 
  addTiles() %>% 
  addPolygons(color = ~catpal(type), popup = ~type) %>% # 直接引用空间对象的type属性
  addLegend(
    position = "bottomright", 
    labels = Types, 
    pal = catpal, 
    values = Types,
    title = "Building Types"
  )
## 额外优化建议
- 推荐用sf包的`st_read`代替rgdal的`readOGR`读取GeoJSON,sf对象在Leaflet中兼容性更好:
  ```r
  Buildings <- st_read("BuildingsLux.geojson", quiet = TRUE)
  data <- st_drop_geometry(Buildings) # 提取属性数据
  • 分类颜色可以直接在addPolygons中用~catpal(type),无需提前生成Buildingscol,代码更简洁。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 21:32:49