在R中用rgdal转换EPSG:4326至3857结果不符问题求助
坐标转换结果不一致的问题排查与解决
我一眼就揪出问题所在啦——你在设置空间坐标的时候,把纬度(lat)和经度(lon)的顺序搞反了!
问题根源
EPSG:4326(WGS84地理坐标系)的标准坐标顺序是先经度(X轴),后纬度(Y轴),但你在代码里写了:
coordinates(orig_coords) <- c('lat', 'lon')
把纬度放在了经度前面,这直接导致空间坐标系的基准错位,转换结果自然和epsg.io、ArcGIS的正确结果对不上。
修正后的代码
只需要调整坐标的传入顺序,就能得到正确结果:
library("rgdal", lib.loc="~/Library/R/3.4/library") orig_coords <- data.frame(lat=c(46.065830, 46.042211, 46.094612), lon=c(14.517220, 14.487756, 14.597046)) # 关键修正:按照EPSG标准,先传入经度(lon),再传入纬度(lat) coordinates(orig_coords) <- c('lon', 'lat') proj4string(orig_coords) <- CRS("+init=epsg:4326") print(summary(orig_coords)) # 转换到EPSG:3857坐标系 Metric_coords <- spTransform(orig_coords, CRS("+init=epsg:3857")) print(summary(Metric_coords))
验证结果
运行修正后的代码,你会得到和预期完全一致的结果:
- 第一组坐标:
1616049.538, 5790904.807 - 第二组坐标:
1612769.621, 5787116.145 - 第三组坐标:
1624935.728, 5795523.844
(注:spTransform输出的顺序是X轴(3857的经度值)、Y轴(3857的纬度值),和你给出的正确结果顺序完全匹配)
额外建议
如果你的R版本较新,推荐使用sf包来处理空间数据——它的接口更直观,也更符合现代空间数据处理的规范,避免这类顺序错误。示例代码如下:
library(sf) # 直接指定经纬度顺序和坐标系 orig_coords_sf <- st_as_sf(orig_coords, coords = c("lon", "lat"), crs = 4326) # 转换坐标系 Metric_coords_sf <- st_transform(orig_coords_sf, crs = 3857) print(Metric_coords_sf)
内容的提问来源于stack exchange,提问作者Istvan Gabor Hatvani
相关产品推荐
相关产品推荐

