使用R语言将经纬度坐标转换为UTMX与UTMY
经纬度转UTM坐标(R语言实现)
1. 预处理原始数据
首先把数据框里的字符型坐标转为数值型,因为后续空间转换需要数值格式:
p <- c("a","b","c") x <- c("41.434931824218786","41.42672694456612","41.647157029217425") y <- c("2.1759165563219116","2.1954430374270455","1.4942063178224638") df <- data.frame(p,x,y) # 字符转数值 df$lat <- as.numeric(df$x) df$lon <- as.numeric(df$y)
2. 用sf包完成坐标转换
sf是R中处理空间数据的主流工具,操作简洁且兼容性强:
# 首次使用需安装包 # install.packages("sf") library(sf) # 将普通数据框转为空间对象,指定原始坐标系为WGS84(全球通用经纬度坐标系,EPSG:4326) sf_df <- st_as_sf(df, coords = c("lon", "lat"), crs = 4326) # 转换为UTM 31N坐标系(你的经度在2°左右,属于UTM 31带,北半球对应EPSG:32631) utm_sf <- st_transform(sf_df, crs = 32631) # 提取UTM坐标并合并到原数据框 df$UTMX <- st_coordinates(utm_sf)[,1] df$UTMY <- st_coordinates(utm_sf)[,2] # 查看最终结果 print(df[, c("p", "UTMX", "UTMY")])
3. 自动匹配UTM带号(可选)
如果不确定目标UTM带号,可以用以下代码自动计算对应EPSG编码:
# 根据经纬度计算UTM带号及对应EPSG get_utm_epsg <- function(lon, lat) { zone <- floor((lon + 180)/6) + 1 # 北半球用326xx,南半球用327xx epsg <- ifelse(lat >= 0, 32600 + zone, 32700 + zone) return(epsg) } # 对当前数据集自动获取目标EPSG target_epsg <- get_utm_epsg(df$lon[1], df$lat[1]) utm_sf_auto <- st_transform(sf_df, crs = target_epsg)
示例输出
运行代码后会得到类似如下结果:
p UTMX UTMY 1 a 457296.47 4587153.8 2 b 456538.68 4586304.7 3 c 402151.94 4613622.5
内容的提问来源于stack exchange,提问作者Amc
相关产品推荐
相关产品推荐

