R语言UTM坐标转DD十进制度时如何保留标签列
R空间坐标转换后属性字段丢失的解决方法
问题原因
字段丢失是因为你最后调用coordinates(spgeo)时,仅提取了经纬度数值构成的矩阵,原Spatial对象绑定的站点名、分区名称等所有属性字段都没有被保留,自然无法和坐标做匹配。
修复方案
不要单独抽离坐标矩阵使用,直接从转换完成的空间对象中同时提取属性和坐标即可,两种常用实现方式:
- 方案1(推荐,无错位风险):直接在转换后的空间对象上追加经纬度列,再导出为普通数据框
# 前序坐标转换步骤无需修改 coordinates(Spatial)<-~Longitude+Latitude sputm <- SpatialPoints(Spatial, proj4string=CRS("+proj=utm +zone=32V +datum=WGS84")) spgeo <- spTransform(sputm, CRS("+proj=longlat +datum=WGS84")) # 将转换后的经纬度作为新字段写入空间对象属性表 spgeo$lon_dd <- coordinates(spgeo)[, 1] spgeo$lat_dd <- coordinates(spgeo)[, 2] # 转为普通数据框,原有所有字段+新转换的十进制度经纬度会完整保留 final_data <- as.data.frame(spgeo)
- 方案2(仅适用于未对空间对象做筛选/排序的场景):如果已经单独生成了
lnlt坐标矩阵,确认行顺序和原数据完全一致的前提下,可以直接按列绑定
lnlt <- coordinates(spgeo) colnames(lnlt) <- c("lon_dd", "lat_dd") final_data <- cbind(as.data.frame(Spatial), lnlt)
注意:方案2存在行顺序错位的风险,如果转换过程中做过点的去重、筛选、重排操作,不要使用该方法,优先选择方案1。
转换完成后建议随机抽取3-5条记录,核对站点名、分区信息和坐标的对应关系,避免匹配错误。
内容的提问来源于stack exchange,提问作者Lene
相关产品推荐
相关产品推荐

