You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用R将英国国家网格(BNG)坐标转换为WGS84经纬度?

嘿,我完全理解你在转换英国国家网格(BNG)坐标到WGS84经纬度时的困惑——spTransform的文档确实有点晦涩,别担心,我给你拆解清楚两种靠谱的方法,一步步来操作:

第一步:先修正你的数据读取

你提供的read.table代码有点小问题,数值没有按行分组,导致无法正确读取每组East/North坐标,先改成这样:

df = read.table(text = 'Easting Northing
320875 116975
320975 116975
320975 116925
321175 116925
321175 116875
321275 116875', header = TRUE)
方法一:用rgdalspTransform(一步步拆解)

先明确两个坐标系的EPSG代码:BNG是27700,WGS84(GPS经纬度)是4326,这是转换的核心。

# 先安装并加载rgdal包
if (!require(rgdal)) install.packages("rgdal")
library(rgdal)

# 1. 将普通数据框转为SpatialPoints对象,同时指定原始坐标系是BNG
bng_points <- SpatialPoints(df, proj4string = CRS("+init=epsg:27700"))

# 2. 用spTransform转换到WGS84坐标系
wgs84_points <- spTransform(bng_points, CRS("+init=epsg:4326"))

# 3. 把转换后的坐标转回普通数据框,和原数据合并
df_wgs84 <- cbind(df, as.data.frame(wgs84_points))
# 重命名列名更直观
colnames(df_wgs84)[3:4] <- c("Longitude", "Latitude")

# 查看结果
print(df_wgs84)

简单来说:SpatialPointsrgdal需要的空间数据格式,proj4string用来告诉R你的原始坐标是什么系统,spTransform只需要传入原始空间对象和目标坐标系就可以完成转换。

方法二:用更友好的sf包(推荐!)

sf是现在R处理空间数据的主流工具,语法比rgdal直观太多,文档也更易懂:

# 安装并加载sf包
if (!require(sf)) install.packages("sf")
library(sf)

# 1. 将数据框转为sf空间对象,指定原始坐标系为BNG(EPSG:27700)
df_sf <- st_as_sf(df, coords = c("Easting", "Northing"), crs = 27700)

# 2. 转换到WGS84坐标系(EPSG:4326)
df_sf_wgs84 <- st_transform(df_sf, crs = 4326)

# 3. 提取经纬度到普通数据框,方便查看
df_wgs84_sf <- cbind(df, st_coordinates(df_sf_wgs84))
colnames(df_wgs84_sf)[3:4] <- c("Longitude", "Latitude")

# 查看结果
print(df_wgs84_sf)

这里st_as_sf直接把普通数据框转成空间对象,st_transform就是坐标系转换函数,全程不需要纠结复杂的空间对象类型,新手友好度拉满。

一些注意点
  • 确认你的Easting/Northing数值在BNG的有效范围内(Easting: 0-650000,Northing: 0-1250000),你的示例数据完全符合。
  • EPSG代码是坐标转换的关键,记住27700=BNG4326=WGS84就够日常用了。

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

火山引擎 最新活动