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

使用Proj4转换Leaflet地图EPSG4326至EPSG31370时遇“31370未定义”错误

解决Leaflet坐标转换中EPSG:31370 undefined错误

错误根源

  1. proj4调用逻辑错误:你当前的转换代码既搞反了坐标顺序,也不符合proj4的语法规则。proj4要求坐标以[经度(lon), 纬度(lat)]传入,但Leaflet的map.getCenter()返回的是lat在前、lng在后;同时proj4的转换语法需要明确源坐标系(默认是EPSG:4326),或者按正确的参数顺序调用。
  2. 投影定义执行顺序问题:如果EPSG:31370的定义代码在转换逻辑之后运行,proj4会找不到该投影的配置,直接抛出undefined错误。

修正方案

  1. 优先定义投影:确保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";
  1. 修正转换代码的坐标顺序与语法:调整坐标为[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);
  1. 确认proj4库已正确引入:检查你的项目中是否已经加载了proj4库,无论是通过本地文件还是包管理工具安装,确保库文件在你的业务代码之前加载。

内容的提问来源于stack exchange,提问作者Muhammad Yasir Ali Khan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 20:15:55