R中st_transform转换EPSG3857至3035后坐标位置不匹配问题排查
问题原因及修复方案
你的问题核心是坐标系定义错误:
- 你输入的
lat(纬度)和long(经度)是WGS84地理坐标系的十进制度数值,对应的EPSG代码是4326,而非你指定的3857。 - EPSG3857是伪墨卡托投影坐标系,单位为米,直接把经纬度度数当成3857坐标传入,相当于在错误的坐标系下定位,后续转换自然会完全偏离正确位置。
修复后的代码
# 创建示例数据框 lat <- c("48.109", "52.221") long <- c("9.212", "13.338") df <- data.frame(lat, long) # 将字符型经纬度转为数值型(避免后续隐性错误) df$lat <- as.numeric(df$lat) df$long <- as.numeric(df$long) # 正确指定原始坐标系为WGS84(EPSG:4326) df$coords_sf <- st_as_sf(df, coords = c("long", "lat"), crs = 4326) # 转换为ETRS-LAEA(EPSG:3035) df$transformed_coords_sf <- st_transform(df$coords_sf, 3035)
额外说明
- 如果你的原始数据确实是EPSG3857的坐标,输入值应该是类似
800000, 6000000这样的米级数值,而非经纬度度数。 - 转换前确保坐标为数值类型,字符型数据可能导致
sf包处理时出现非预期问题。
内容的提问来源于stack exchange,提问作者kommoder_Waran
相关产品推荐
相关产品推荐

