使用Proj4转换Leaflet地图EPSG4326至EPSG31370时遇“31370未定义”错误
解决Leaflet坐标转换中EPSG:31370 undefined错误
错误根源
- proj4调用逻辑错误:你当前的转换代码既搞反了坐标顺序,也不符合proj4的语法规则。proj4要求坐标以
[经度(lon), 纬度(lat)]传入,但Leaflet的map.getCenter()返回的是lat在前、lng在后;同时proj4的转换语法需要明确源坐标系(默认是EPSG:4326),或者按正确的参数顺序调用。 - 投影定义执行顺序问题:如果EPSG:31370的定义代码在转换逻辑之后运行,proj4会找不到该投影的配置,直接抛出undefined错误。
修正方案
- 优先定义投影:确保EPSG:31370的定义代码在所有转换代码之前执行,保证proj4能识别该投影:
// 定义EPSG:31370投影,放在转换代码之前 proj4.defs["EPSG:31370"] = "+proj=lcc +lat_1=51.16666723333333 +lat_2=49.8333339 +lat_0=90 +lon_0=4.367486666666666 +x_0=150000.013 +y_0=5400088.438 +ellps=intl +towgs84=-106.8686,52.2978,-103.7239,0.3366,-0.457,1.8422,-1.2747 +units=m +no_defs";
- 修正转换代码的坐标顺序与语法:调整坐标为
[lng, lat]的顺序,同时使用正确的proj4调用方式(从EPSG:4326转换到EPSG:31370):
const mapCenter = map.getCenter(); // 正确的坐标顺序:[经度(lng), 纬度(lat)] const convertedCoords = proj4('EPSG:4326', 'EPSG:31370', [mapCenter.lng, mapCenter.lat]); console.log(convertedCoords);
或者利用proj4默认源坐标系为EPSG:4326的特性,简化为:
const mapCenter = map.getCenter(); const convertedCoords = proj4('EPSG:31370', [mapCenter.lng, mapCenter.lat]); console.log(convertedCoords);
- 确认proj4库已正确引入:检查你的项目中是否已经加载了proj4库,无论是通过本地文件还是包管理工具安装,确保库文件在你的业务代码之前加载。
内容的提问来源于stack exchange,提问作者Muhammad Yasir Ali Khan
相关产品推荐
相关产品推荐

