在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
相关产品推荐
相关产品推荐

