R语言解析嵌套地理多边形数据并匹配属性的方案问询
解决方案:匹配GeoJSON地理数据与属性并准备交互式地图
步骤1:构建对应tibble
先把属性数据和地理数据按顺序绑定成tibble,确保3618条属性与3618条多边形数据一一对应:
library(tibble) library(dplyr) # 假设attr_df是包含id、Triênio、Grupo等列的属性数据框 # geo_list是爬取到的GeoJSON多边形列表,每个元素对应一条属性 df <- tibble( # 直接导入所有属性列 !!!attr_df, # 加入地理数据列 geo_raw = geo_list )
如果你的属性数据是键值对列表(不是dataframe),先转成dataframe:
attr_df <- dplyr::bind_rows(attr_key_value_list)
步骤2:解析GeoJSON为可用于绘图的几何对象
用sf包解析嵌套的GeoJSON坐标,转成空间对象:
library(purrr) library(sf) df <- df %>% mutate( # 解析每个GeoJSON多边形 geometry = map(geo_raw, function(geo) { # 提取坐标组(GeoJSON格式是[经度, 纬度],注意顺序) coords <- geo$coordinates[[1]] # 单多边形取第一个坐标组 # 转成sf多边形对象 st_polygon(list(matrix(unlist(coords), ncol = 2, byrow = TRUE))) }) ) %>% # 转换为sf空间数据框 st_sf(sf_column_name = "geometry") %>% # 移除原始GeoJSON列(可选) select(-geo_raw)
如果你的GeoJSON是MultiPolygon类型,把st_polygon换成st_multipolygon即可。
步骤3:绘制交互式地图
用leaflet包直接基于sf数据框绘制:
library(leaflet) leaflet(df) %>% addTiles() %>% addPolygons( # 弹窗显示属性信息 popup = ~paste0( "ID: ", id, "<br>", "Triênio: ", Triênio, "<br>", "Grupo: ", Grupo ), # 可选:添加样式 color = "#444444", weight = 1, opacity = 1, fillOpacity = 0.7 )
注意事项
- 确保
geo_list中每个元素的结构一致,比如都是标准的Polygon GeoJSON格式 - 若坐标解析出错,检查
geo$coordinates的嵌套层级,调整[[1]]的索引 - 若需要导出为GeoJSON文件,用
st_write(df, "output.geojson")
内容的提问来源于stack exchange,提问作者Pedro Leo
相关产品推荐
相关产品推荐

