R语言中同CRS(EPSG:3994)下新西兰坐标点叠加Shapefile失败
解决坐标点无法叠加到Shapefile的问题
以下是逐步排查和解决的方法:
1. 确认两个图层的CRS是否完全匹配
你提到两者都是EPSG:3994,但实际可能存在定义差异(比如proj4字符串或WKT格式不一致)。先运行以下代码检查:
# 查看两个图层的CRS详情 st_crs(eff_sp4) st_crs(CRA6_shp)
如果输出的EPSG代码、proj4字符串不完全一致,直接指定EPSG代码转换,而非依赖st_crs(CRA6_shp):
# 确保eff_sp4转换为标准EPSG:3994 eff_sp4 <- st_transform(eff_sp4, 3994)
如果eff_sp4本身已经是3994,直接删掉st_transform那行代码,避免重复转换导致错误。
2. 检查坐标点的范围是否在Shapefile范围内
坐标点可能不在Shapefile的显示区域内,导致被挤出画布。运行以下代码对比边界:
# 输出两个图层的边界框 st_bbox(eff_sp4) st_bbox(CRA6_shp)
EPSG:3994是以米为单位的坐标系,新西兰区域的坐标大概是x: 1000000-2000000,y: -5000000--3000000。如果eff_sp4的坐标是x: 160-180、y: -30--50,说明它实际是WGS84地理坐标系(EPSG:4326),而非3994,这时候需要从4326转换:
# 从WGS84地理坐标系转换为3994 eff_sp4 <- st_transform(eff_sp4, 3994, crs = 4326)
3. 验证坐标点图层本身是否可显示
先单独绘制eff_sp4,确认图层本身有效:
ggplot() + geom_sf(data = eff_sp4, color = "red", size = 5)
如果这一步看不到点,说明eff_sp4可能存在问题:
- 用
nrow(eff_sp4)检查是否有数据 - 用
st_is_valid(eff_sp4)检查几何对象是否有效
4. 简化代码排查
暂时去掉不必要的元素,用最简代码测试叠加:
ggplot() + geom_sf(data = CRA6_shp) + geom_sf(data = eff_sp4, color = "steelblue", size = 2)
如果能显示,再逐步加回标题、主题等元素,排查是否是其他代码影响。
内容的提问来源于stack exchange,提问作者Angela Russell
相关产品推荐
相关产品推荐

