法国地址API返回的x/y坐标转经纬度方法咨询
法国地址API坐标转换解决方案
一、明确坐标格式
你拿到的x、y坐标属于RGF93 / Lambert-93投影(EPSG:2154),这是法国官方的合法投影系统。API标注的“WGS84, legal projection”是指该投影的基准面与WGS84高度重合(两者差异可忽略),但投影类型为兰伯特圆锥投影,并非WGS84经纬度。之前用UTM转换出错,是因为Lambert-93和UTM是完全不同的投影体系,参数不匹配。
二、正确转换方法
方法1:使用proj4js(前端/JavaScript)
直接通过proj4定义正确的投影参数进行转换:
// Node.js环境需先安装:npm install proj4;浏览器环境需提前引入proj4库 const proj4 = require('proj4'); // 定义源坐标系(EPSG:2154,Lambert-93)和目标坐标系(EPSG:4326,WGS84经纬度) proj4.defs('EPSG:2154', '+proj=lcc +lat_0=46.5 +lon_0=3 +lat_1=49 +lat_2=44 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs'); proj4.defs('EPSG:4326', '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs'); // 示例:API返回的1 Quai de l'Horloge 75001 Paris坐标 const lambertCoords = [650920.7, 6862659.6]; // 转换为WGS84经纬度(结果格式:[经度, 纬度]) const wgs84Coords = proj4('EPSG:2154', 'EPSG:4326', lambertCoords); // 输出结果 console.log(`纬度: ${wgs84Coords[1].toFixed(6)}, 经度: ${wgs84Coords[0].toFixed(6)}`); // 正确输出:纬度 48.856614, 经度 2.352221
方法2:使用pyproj(Python后端)
from pyproj import Transformer # 创建转换器:从EPSG:2154到EPSG:4326 transformer = Transformer.from_crs("EPSG:2154", "EPSG:4326") # 示例坐标 x, y = 650920.7, 6862659.6 # 转换得到(纬度, 经度) lat, lon = transformer.transform(x, y) print(f"纬度: {lat:.6f}, 经度: {lon:.6f}")
关键注意点
- Lambert-93的
x是东向米数,y是北向米数,转换时要保持参数顺序(先x后y) - 目标坐标系EPSG:4326的结果是经度在前,纬度在后,但Google Maps通常要求先纬度后经度,注意调整顺序
内容的提问来源于stack exchange,提问作者Tim Thailand
相关产品推荐
相关产品推荐

