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

在R语言中实现谷歌地图上德黑兰多色行政区多边形绘制

嘿,我来帮你搞定这个问题!在R里绘制德黑兰那些带明确边界的行政区多边形,其实用几个常用的空间分析包就能轻松实现。我给你一步步拆解整个流程:

第一步:准备你的行政区坐标数据

首先,你从谷歌地图获取的经纬度列表,最好整理成空间数据格式——比如GeoJSON(谷歌地图可以导出这类格式),或者CSV(每一行是一个坐标点,附带对应的行政区名称)。关键是要让每个行政区对应一个完整的多边形边界。

第二步:加载需要的R包

我们会用到几个核心包:

  • sf:专门处理空间数据的神器,能轻松读取、转换空间格式
  • ggplot2:用来绘制美观的地图
  • dplyr:辅助处理数据分组(如果你的数据是CSV格式的话)
  • ggspatial(可选):用来叠加谷歌/OpenStreetMap底图

先安装并加载它们:

# 安装包(首次使用时运行)
install.packages(c("sf", "ggplot2", "dplyr", "ggspatial"))

# 加载包
library(sf)
library(ggplot2)
library(dplyr)
library(ggspatial)
第三步:导入并处理空间数据

分两种情况处理你的数据:

情况1:数据是GeoJSON格式(推荐)

谷歌地图导出的GeoJSON直接就能用st_read()读取,它会自动识别多边形和行政区名称:

# 读取GeoJSON文件
tehran_districts <- st_read("你的行政区文件.geojson")

# 确保坐标系是WGS84(谷歌地图用的就是这个,EPSG代码4326)
tehran_districts <- st_transform(tehran_districts, crs = 4326)

情况2:数据是CSV格式

如果你的数据是每行一个经纬度点,带行政区名称,需要先分组把每个行政区的点转换成多边形:

# 读取CSV(假设列名是longitude, latitude, district_name)
district_points <- read.csv("你的行政区坐标.csv")

# 分组转换为多边形,转成sf空间对象
tehran_districts <- district_points %>%
  group_by(district_name) %>%
  # 把每个行政区的坐标点组合成多边形
  summarize(geometry = st_sfc(st_polygon(list(matrix(c(longitude, latitude), ncol = 2))))) %>%
  st_sf() %>%
  # 转换到WGS84坐标系
  st_transform(crs = 4326)
第四步:绘制带颜色的行政区地图

现在用ggplot2绘制,每个行政区用不同颜色区分,还能叠加底图让效果更直观:

基础版:只画行政区边界

ggplot() +
  # 绘制多边形,按行政区名称分配颜色,白色边框区分
  geom_sf(data = tehran_districts, aes(fill = district_name), color = "white", size = 0.5) +
  # 选一个好看的颜色方案(viridis系列对色盲友好)
  scale_fill_viridis_d(option = "plasma", name = "德黑兰行政区") +
  # 调整主题,去掉冗余的坐标轴和网格
  theme_minimal() +
  theme(
    axis.text = element_blank(),
    axis.title = element_blank(),
    panel.grid = element_blank(),
    plot.title = element_text(hjust = 0.5, size = 16, face = "bold")
  ) +
  labs(title = "德黑兰特定行政区边界地图")

进阶版:叠加谷歌风格底图

如果想让地图更贴近谷歌地图的样子,用ggspatial的annotation_map_tile()叠加底图:

ggplot() +
  # 叠加OpenStreetMap底图(和谷歌地图风格类似,zoom参数控制缩放级别)
  annotation_map_tile(type = "osm", zoom = 12) +
  # 绘制行政区多边形,设置透明度避免遮挡底图
  geom_sf(data = tehran_districts, aes(fill = district_name), alpha = 0.7, color = "white", size = 0.5) +
  scale_fill_viridis_d(option = "plasma", name = "德黑兰行政区") +
  theme_minimal() +
  theme(
    axis.text = element_blank(),
    axis.title = element_blank(),
    panel.grid = element_blank(),
    plot.title = element_text(hjust = 0.5, size = 16, face = "bold")
  ) +
  labs(title = "德黑兰行政区叠加底图")
小提示
  • 如果你拿到的坐标不是WGS84,一定要用st_transform()转换,不然地图会错位
  • 颜色方案可以自己换,比如scale_fill_brewer(palette = "Set3")也是不错的选择
  • 如果某个行政区的多边形绘制有问题,检查一下坐标点的顺序是不是闭合的(第一个点和最后一个点要一致)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:46:14