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

英国地图数据点无法正常绘制问题求助

问题解决:英国地图数据点无法显示的修复方案

问题分析

你的代码存在两个核心问题,导致数据点无法正常显示:

  1. 坐标系参数错误:如果你的CSV文件已经是转换好的经纬度(WGS84坐标系,EPSG:4326),st_as_sf的crs参数应设为4326,而非英国国家格网的27700;如果CSV里是原始东/北坐标,则需用东、北坐标列作为coords参数,再设置crs=27700完成转换。
  2. 列名不匹配:st_coordinates()返回的结果列名为X(对应经度)和Y(对应纬度),但你在ggplot的geom_point中引用了不存在的longitude和latitude列,导致无法定位数据点。

修正后的代码

情况1:CSV已转换为经纬度(WGS84)

library(tidyverse)
library(sf)

# 读取经纬度数据
a <- read.csv('eastnorthtest.csv')

# 转换为sf对象(直接使用经纬度,坐标系设为4326)
a_sf <- st_as_sf(a, coords = c("longitude", "latitude"), crs = 4326)

# 读取英国行政区shapefile
eng_reg_map <- st_read("LAD_DEC_2023_UK_BFC.shp")

# 绘图:sf对象自动对齐坐标系,无需手动指定x/y
eng_reg_map |>
  ggplot() +
  geom_sf(colour = "black", fill = 'white') + 
  geom_sf(data = a_sf, size = 1, colour = 'red')

情况2:CSV为原始东/北坐标(英国国家格网,EPSG:27700)

library(tidyverse)
library(sf)

# 读取东/北坐标数据
a <- read.csv('eastnorthtest.csv')

# 从东/北坐标转换为经纬度格式的sf对象
a_sf <- a %>%
  st_as_sf(coords = c("east", "north"), crs = 27700) %>%  # 替换为你CSV里的东/北列名
  st_transform(4326)  # 转换为WGS84经纬度坐标系

# 读取英国行政区shapefile
eng_reg_map <- st_read("LAD_DEC_2023_UK_BFC.shp")

# 绘图
eng_reg_map |>
  ggplot() +
  geom_sf(colour = "black", fill = 'white') + 
  geom_sf(data = a_sf, size = 1, colour = 'red')

关键说明

  • 使用geom_sf()替代geom_point()绘制数据点,sf对象会自动匹配坐标系,彻底避免列名不匹配的问题。
  • 确认CSV中的列名是否对应:原始坐标用东、北列名,经纬度用longitude/latitude列名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 03:52:47