JS实现坐标系转换(wgs84、bd09ll、gcj02)百度、GPS、高德、腾讯地图相互转换

12 篇文章 0 订阅

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. 输出结果

 

感谢您的支持,写的文章如对您有所帮助,开源不易,请您打赏,谢谢啦~

 

 

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值