R语言中转换QGIS投影坐标至地理坐标的报错问题求助
解决投影坐标转地理坐标的报错问题
看起来你踩了个很常见的小坑——proj4string()和st_transform()这两个函数只认空间对象,而你手里的data是普通的数据框,所以才会抛出“找不到对应方法”的错误。别担心,几步就能搞定:
关键步骤说明
首先你得明确一个前提:必须知道QGIS导出这些坐标时用的是什么投影坐标系(比如EPSG代码或者proj4字符串)。你可以打开QGIS,找到导出坐标的图层,右键→属性→坐标系,就能看到对应的信息(刚果民主共和国常用的是UTM南半球的带,比如EPSG:32733、32734这类,你要根据自己的实际情况确认)。
接下来用sf包(现在R处理空间数据的主流工具)来操作:
1. 先构造你的数据(如果还没准备好)
data <- data.frame( id = c(1,2,3,4), x = c(306908, 347492, 544430, 662290), y = c(9809006, 9540309, 9618657, 9613788) )
2. 加载sf包
library(sf)
3. 将普通数据框转为空间对象(sf)
这里的crs参数要替换成你QGIS里查到的坐标系代码,比如假设是EPSG:32733:
# coords指定你的坐标列(x和y),crs是原始投影的EPSG代码 data_sf <- st_as_sf(data, coords = c("x", "y"), crs = 32733)
4. 转换为WGS84地理坐标(经纬度)
EPSG:4326就是标准的WGS84地理坐标系,直接用这个参数转换:
data_wgs84 <- st_transform(data_sf, crs = 4326)
5. 验证结果&计算距离
现在你可以查看转换后的经纬度:
print(data_wgs84)
计算点之间的距离也很简单,比如计算第一个点到其他所有点的距离(单位默认是米,因为UTM是米制投影):
distances <- st_distance(data_wgs84[1,], data_wgs84) print(distances)
为什么之前会报错?
proj4string()(属于旧的sp包)和st_transform()(sf包)都是专门为空间对象设计的函数,普通数据框没有空间属性,自然找不到对应的处理方法。先用st_as_sf()给数据加上空间信息,后续的转换和分析就都能正常进行啦。
内容的提问来源于stack exchange,提问作者Coralie




