CSV中NAD83/BC Albers转WGS84坐标未变化,如何解决?
NAD83/BC Albers(EPSG:3005)转WGS84(EPSG:4326)解决方案
QGIS 操作步骤
- 导入CSV时必须明确指定原投影,这是你之前转换失败的核心原因:
- 点击「图层」→「添加图层」→「添加分隔文本图层」
- 选择目标CSV文件,设置分隔符为逗号
- 在「几何图形定义」区域,选择「点坐标」,并对应选择你的X(东向)、Y(北向)列
- 点击「坐标系」,输入
3005,选择「NAD83 / BC Albers」,不要使用默认的WGS84 - 确定导入后,右键图层→「打开属性表」→「字段计算器」
- 新建两个字段:
- 字段名
lon_wgs84,类型选「实数」,精度设为10 - 字段名
lat_wgs84,类型同样选「实数」,精度设为10
- 字段名
- 分别输入表达式计算:
- 经度:
x(transform($geometry, 'EPSG:3005', 'EPSG:4326')) - 纬度:
y(transform($geometry, 'EPSG:3005', 'EPSG:4326'))
- 经度:
- 点击确定,即可得到转换后的WGS84经纬度
R 操作步骤(使用sf包)
用sf包可以精准处理投影转换,避免手动识别错误:
- 安装并加载sf包:
install.packages("sf") library(sf)
- 读取CSV并转换为带投影的sf对象:
# 替换为你的CSV路径和实际X/Y列名(比如你的东向列叫"x",北向列叫"y") df <- read.csv("your_file.csv") # 创建sf对象,指定原投影为EPSG:3005 sf_data <- st_as_sf(df, coords = c("x", "y"), crs = 3005)
- 转换到WGS84并提取经纬度:
# 转换投影到EPSG:4326 sf_wgs84 <- st_transform(sf_data, crs = 4326) # 把经纬度提取回原数据框 df$lon_wgs84 <- st_coordinates(sf_wgs84)[, 1] df$lat_wgs84 <- st_coordinates(sf_wgs84)[, 2] # 保存转换后的CSV write.csv(df, "converted_coords.csv", row.names = FALSE)
失败原因说明
你之前转换后坐标无变化,几乎可以确定是导入数据时未指定原投影,软件默认将NAD83/BC Albers的平面坐标当成了WGS84的经纬度,转换时相当于同一投影内的无效转换,因此坐标完全一致。
内容的提问来源于stack exchange,提问作者BabakK
相关产品推荐
相关产品推荐

