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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 06:23:09