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

使用maps/ggplot2绘制埃及省份地图时坐标生成多边形异常问题

解决埃及省级地图绘制问题

坐标格式转换的必要性

是的,你需要将下载的坐标转换为R兼容的格式。R绘制地图默认使用**WGS84坐标系(EPSG:4326)**的十进制经纬度:东经为正、西经为负;北纬为正、南纬为负。

如果你的数据是度分秒(DMS)格式(例如29°30'N, 31°15'E),可以用这个函数转换为十进制:

dms_to_decimal <- function(dms_str) {
  parts <- stringr::str_match(dms_str, "([0-9]+)°([0-9]+)'([0-9.]+)\"([NSEW])")
  degrees <- as.numeric(parts[2])
  minutes <- as.numeric(parts[3])
  seconds <- as.numeric(parts[4])
  direction <- parts[5]
  
  decimal <- degrees + minutes/60 + seconds/3600
  if (direction %in% c("S", "W")) decimal <- -decimal
  return(decimal)
}

如果数据是其他投影坐标系(比如埃及常用的UTM 36N),用sf包转换为WGS84:

library(sf)
# 读取下载的Shapefile
data_sf <- st_read("your_egypt_provinces.shp")
# 转换为WGS84坐标系
data_wgs84 <- st_transform(data_sf, crs = 4326)

获取埃及省级边界数据的可行方法

方法1:用sf包直接获取GADM数据

GADM提供全球高精度行政区划边界,包含埃及所有省份:

library(sf)
library(ggplot2)

# 获取埃及一级行政区(省份)数据
egypt_provinces <- gadm_sf(country = "EGY", level = 1)

# 绘制省级地图
ggplot() +
  geom_sf(data = egypt_provinces, fill = "#aed6f1", color = "#2c3e50") +
  labs(title = "埃及省级行政区划地图") +
  coord_sf()

方法2:用rnaturalearth包获取官方边界

rnaturalearth提供公开地理数据,可直接提取埃及省级边界:

library(rnaturalearth)
library(rnaturalearthdata)
library(ggplot2)

# 获取埃及省级数据
egypt_provinces <- ne_states(country = "egypt", returnclass = "sf")

# 绘制带填充的省份地图
ggplot() +
  geom_sf(data = egypt_provinces, aes(fill = name), color = "white") +
  scale_fill_viridis_d(option = "mako") +
  labs(title = "埃及省份地图", fill = "省份名称") +
  theme_minimal()

方法3:处理下载的Shapefile

如果已经从公开渠道下载了埃及省份Shapefile,按以下步骤处理:

  1. 用sf::st_read()读取文件
  2. 用st_crs(data_sf)检查当前坐标系
  3. 用st_transform(data_sf, crs = 4326)转换为WGS84
  4. 用geom_sf()绘制(自动处理坐标分组,避免geom_polygon的错乱问题)

修复现有代码的关键

你之前用geom_polygon绘制全国地图成功,但省级数据错乱,核心原因是坐标格式/坐标系不匹配,或者数据分组错误。改用sf包的geom_sf可以避免手动分组的麻烦,同时确保坐标系统一。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 14:40:15