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

如何在R中绘制native-land.ca原住民领地GeoJSON数据并生成静态地图

解决方案

第一步:正确读取GeoJSON文件

你之前遇到的各类读取报错、普通数据框无法绘图的问题,核心原因是没有使用R空间数据生态的标准工具包sf,老版本的geojson处理包维护性差、对特殊格式GeoJSON兼容性不足,按以下步骤操作即可解决:

  1. 安装依赖包
install.packages(c("sf", "ggplot2", "ggspatial"))
  1. 读取文件
    不要直接读取线上URL避免404报错,先把native-land的GeoJSON文件下载到本地,再执行读取代码,drop_zm = TRUE参数可直接删除多余的z维度,解决z值维度错误:
native_land <- sf::st_read(
  "你的本地文件存储路径.json",
  drop_zm = TRUE, # 去掉多余z坐标
  check_ring_dir = TRUE, # 修正面要素环方向避免绘图错误
  quiet = TRUE
)
# 校验读取结果,可看到包含领地名称列和geometry空间几何列
head(native_land)

第二步:绘制带自定义配色和领地名称的静态地图

直接用ggplot2的geom_sf层即可完成绘图,支持完全自定义配色和标注:

# 自定义配色,替换为你需要的领地名称和对应色值即可
custom_palette <- c(
  "领地A名称" = "#2E8B57",
  "领地B名称" = "#8B4513",
  "领地C名称" = "#4682B4"
  # 按需补充更多配色,数量和领地数量匹配即可
)

library(ggplot2)
library(ggspatial)

ggplot() +
  # 可选:添加底图,zoom值越大底图细节越丰富
  annotation_map_tile(type = "osm", zoom = 5, alpha = 0.7) +
  # 绘制领地面要素,设置边界线样式
  geom_sf(data = native_land, aes(fill = Name), color = "white", linewidth = 0.2) +
  # 应用自定义配色,设置图例标题
  scale_fill_manual(values = custom_palette, name = "原住民领地名称") +
  # 添加领地名称标注,标注位置自动取几何中心
  geom_sf_text(data = native_land, aes(label = Name), size = 3, color = "black") +
  # 优化主题样式
  theme_minimal() +
  theme(
    axis.text = element_blank(),
    axis.title = element_blank(),
    panel.grid = element_blank(),
    legend.position = "bottom"
  )

绘图完成后用ggsave("输出文件路径.png", width = 10, height = 8, dpi = 300)即可导出高清静态图。

历史报错原因说明

  • jsonlite::fromJSON读取后生成的是普通嵌套列表/数据框,未绑定空间坐标系属性,因此无法直接用于空间绘图
  • geojsonR、geojsonio均为停止维护的老旧工具包,对带z值、坐标嵌套层级复杂的GeoJSON兼容性差,sf是目前R空间数据的官方标准工具,兼容绝大多数空间数据格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 17:27:04