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

如何用R将lu_effic指标填充到sf格式行政地图图层?

问题需求

将指标lu_effic作为填充色渲染到孟加拉国行政地图上,实现行政面按指标值着色的可视化效果。

原代码核心问题
  • urb_dtf是点坐标格式的数据集,使用geom_polygon(面要素绘图函数)渲染逻辑完全错误,无法生成面填充效果
  • sf格式的行政边界对象shp_dt本身未关联lu_effic指标,直接添加fill参数无法识别对应变量
  • 未做空间属性关联,点数据的指标值无法映射到对应的行政面单元
  • 存在笔误:原代码中未定义dtafil对象,实际应使用读取的urb_dt调用列
修复后的实现代码
# 加载依赖包
library(sf)
library(ggplot2)
library(dplyr)

# 1. 读取点数据并转为sf空间点对象
urb_dt <- read.csv("GHS_STAT_V1_2_BGD.csv")
urb_sf <- st_as_sf(urb_dt, 
                   coords = c("GCPNT_LON", "GCPNT_LAT"), # 指定经纬度列
                   crs = 4326) # 设定WGS84坐标系,和常规行政shp兼容

# 2. 读取行政边界shp,统一坐标系
shp_dt <- st_read("bgd_admbnda_adm3_bbs_20201113.shp")
shp_dt <- st_transform(shp_dt, crs = st_crs(urb_sf))

# 3. 空间连接+聚合:将点的lu_effic指标关联到对应行政面
# 单个行政面内有多个点时,按需选择聚合规则:平均值/中位数/最大值等
shp_with_index <- st_join(shp_dt, urb_sf) %>%
  group_by(ADM3_PCODE) %>% # 按行政面唯一编码分组
  summarise(lu_effic = mean(lu_effic, na.rm = TRUE))

# 4. 可视化渲染
ggplot() +
  # 行政面填充,用关联后的lu_effic作为着色依据
  geom_sf(data = shp_with_index, aes(fill = lu_effic), 
          color = "white", # 行政边界线颜色
          linewidth = 0.1) + # 行政边界线粗细
  # 配色调整,也可替换为分类配色函数scale_fill_brewer等
  scale_fill_viridis_c(option = "mako", na.value = "gray90", name = "土地利用效率") +
  # 其他可视化元素配置
  labs(title = "孟加拉国三级行政单元土地利用效率分布") +
  theme_minimal() +
  theme(
    axis.text = element_blank(),
    axis.title = element_blank(),
    panel.grid = element_blank()
  )
补充说明

如果你的lu_effic本身就是行政面级别的指标,两个表存在共同的行政编码列(如行政名称、行政编码),可直接用left_join(shp_dt, urb_dtf, by = "公共列名")关联属性,不需要做空间匹配。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 12:12:02