JS 实现地图坐标相互转换,采用百度地图API的 BMap.Convertor(),所以使用时需要引入百度地图 v3 / v2 API,转换精准,无偏移!
GPS ( wgs84 ) 转 百度(bd09ll)
百度 ( bd09ll ) 转 高德/腾讯/MapABC ( gcj02 )
高德/腾讯/MapABC ( gcj02 ) 转 百度 ( bd09ll )
搜狗,图吧,51地图 转 百度 ( bd09ll )
搜狗,图吧,51地图 转 高德/腾讯/MapABC ( gcj02 )
1. 引入百度地图API v3 /v2
<script type="text/javascript" src="http://api.map.baidu.com/api?v=3.0&ak=秘钥"></script>
2. 引入JS代码片段( wgs84 转 bd09ll )
//坐标系转换 @author qiyulin @date 2022.10.17
var converMap = {
i:0,
groups:[],
arr:[],
init:function(points){
console.log("初始化点:",points);
var total = 0;
var groupCount = 0;
if (points.length % 10 > 0) {
groupCount = (points.length / 10) + 1;
}else {
groupCount = (points.length / 10);
}
for(var i=0;i<groupCount;i++){
var pos = [];
for(var j=0;j<10;j++){
if(total<points.length){
var point = new BMap.Point(points[(i * 10) + j].lng,points[(i * 10) + j].lat);
pos.push(point);
}
total++;
}
converMap.groups.push(pos);
}
},
start:function(cb){
if(converMap.i<converMap.groups.length){
var pos = converMap.groups[converMap.i];
if(pos.length>0){
var convertor = new BMap.Convertor();
/**
* 地图转换函数
* translate( points, form, to, callback )
*
* points : 坐标点数量,1次不能超过10个
*
* from : 参数说明
* 1:GPS标准坐标;
* 2:搜狗地图坐标;
* 3:火星坐标(gcj02),即高德地图、腾讯地图和MapABC等地图使用的坐标;
* 4:3中列举的地图坐标对应的墨卡托平面坐标;
* 5:百度地图采用的经纬度坐标(bd09ll);
* 6:百度地图采用的墨卡托平面坐标(bd09mc);
* 7:图吧地图坐标;
* 8:51地图坐标;
*
* to : 参数说明
* 3:火星坐标(gcj02),即高德地图、腾讯地图及MapABC等地图使用的坐标;
* 5:百度地图采用的经纬度坐标(bd09ll);
* 6:百度地图采用的墨卡托平面坐标(bd09mc);
*
* 这里:from = 1 , to = 5 是从 wgs84 坐标转 Bd09ll
* */
convertor.translate(pos, 1, 5, function(data){
for (var i = 0; i < data.points.length; i++) {
converMap.arr.push( data.points[i] );
}
converMap.i++;
//递归
converMap.start(cb);
});
}else{
converMap.i++;
//递归
converMap.start(cb);
}
}else{
console.log("转换结果:",converMap.arr);
cb(converMap.arr)
}
}
}
3. 使用方式
//arrP = {lng:92.32101749,lat:39.25321963} = new BMap.Point(92.32101749,39.25321963)
var arrP = [
{lng:92.32101749,lat:39.25321963},
{lng:92.32381195,lat:39.23467412},
{lng:92.33689469,lat:39.18944389},
{lng:92.33462026,lat:39.16550173},
{lng:92.32438307,lat:39.14640229},
{lng:92.34150646,lat:39.12996929},
{lng:92.36486257,lat:39.12714225},
{lng:92.78888514,lat:39.19405955},
{lng:92.84311121,lat:39.18927591},
{lng:92.88139011,lat:39.20919785},
{lng:92.90605774,lat:39.21617208}
]
// 初始化,加载需要转换的点 arrP
converMap.init(arrP);
// 执行转换,并返回转换结果 arrP2
converMap.start(function(arrP2){
//conver result
console.log(arrP2);
});
4. 输出结果
感谢您的支持,写的文章如对您有所帮助,开源不易,请您打赏,谢谢啦~