You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 01:47:35