使用R语言转换坐标:SWEREF转WGS84遇异常求助
解决SWEREF 99 TM到WGS84坐标转换异常的问题
你遇到的转换后纬度接近赤道、偏离瑞典区域的问题,大概率是坐标输入格式或工具使用细节导致的。下面给你分析原因并提供修复方案:
1. 核心问题排查
proj4包的ptransform()函数要求输入的坐标为**(东向x, 北向y)**的UTM格式,但直接传入data.frame时可能出现解析偏差;另外旧版proj4的稳定性也不如现在主流的空间数据处理工具。
2. 修复方案
方案一:调整输入格式(适配proj4包)
先将data.frame转为矩阵格式,确保坐标顺序正确传入:
library(proj4) # 原始坐标数据 temp <- data.frame( x = c(598223, 598812, 598824, 598232, 597614, 597629), y = c(7095460, 7095426, 7094827, 7094227, 7094821, 7095433) ) # 转为矩阵格式,保证x(东向)、y(北向)顺序正确 temp_mat <- as.matrix(temp) # 执行坐标转换 result <- ptransform( temp_mat, src.proj = '+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs', dst.proj = '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs', silent = TRUE ) # 查看转换结果(第一列为经度,第二列为纬度,对应瑞典北部区域) print(result)
方案二:使用更可靠的sf包(推荐)
proj4包已停止维护,现在R语言中优先推荐用sf包处理空间坐标转换,稳定性更强:
library(sf) # 将原始数据转为sf空间对象,指定原始坐标系为SWEREF 99 TM temp_sf <- st_as_sf(temp, coords = c("x", "y"), crs = "+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs") # 转换为WGS84坐标系 temp_wgs84 <- st_transform(temp_sf, crs = "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs") # 提取转换后的经纬度坐标 coords_wgs84 <- st_coordinates(temp_wgs84) print(coords_wgs84)
3. 结果验证
正确转换后的坐标应该落在东经19-20度、北纬63.5-64度之间,对应瑞典北部区域,以此判断转换是否成功。
内容的提问来源于stack exchange,提问作者AEM
相关产品推荐
相关产品推荐

