其他地图坐标点在百度地图展示位置偏差较大--js开发百度地图服务类-Convertor

本文详细介绍如何使用百度地图API进行坐标转换,包括创建Convertor对象、调用translate方法及处理回调函数。适用于将不同地图服务间的坐标进行相互转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

做所有操作之前,应先引入百度地图开发的js文件

<script type="text/javascript"
            src="http://api.map.baidu.com/api?v=2.0&ak=你的秘钥"></script>

一、创建一个Convertor对象

var convertor = new BMap.Convertor();

二、Convertor的方法

translate(points: Array<BMap.Point>, from: number, to: number, callback: function)
描述:对指定的点数组进行坐标转换,转换规则为从from到to,转换完成后调用callback,callback的参数为Object 。一次最多10个点。

参数介绍:

1. points:需要转换的点数组,非常注意的是,一次只能转换10个点,如果有很多点,你需要用循环将转换后的点连起来
2. from和to
在这里插入图片描述
注意:from中的3还包含高德地图
举例:
如果把google地图坐标,转换为百度地图坐标convertor .translate(pointArr,3,5,function(data){});

3.第四个参数:回调函数callback

		convertor .translate(pointArr,3,5,function(data){});
		其中function(data){}可以写到上一个函数里,也可以单独拿出来,然后在上一个函数里调用

回调函数的参数有一个类型是:TranslateResults ,
它有两个属性:
在这里插入图片描述
第一个属性的状态码
在这里插入图片描述
第二个属性:是转换后的点数组

三、代码示例:

  1. 小于等于10个点:

    var points = [];   //要转换的点数组
    var  convertor = new BMap.Convertor();
    convertor.translate(points,3,5,function(data){
      console.log(data.status);
      console.log(data.points);   //转换后的点数组
    })
    
  2. 大于10个点

     var points = [];   //要转换的点数组
     var allPoint = [];   //转换后的点数组
     var  convertor = new BMap.Convertor();
     var translatePoint = [];    //中转数组
     for (var i=0; i<points.length;i+=10){
            translatePoint.push(points.slice(i,i+10));        //  从已有的数组中返回选定的元素,该方法并不会修改数组,而是返回一个子数组
          }
        for (var i=0 ;i<translatePoint.length;i++){
            (function (index) {
                 convertor.translate(translatePoint[index],3,5,function (data) {
                    console.log(data.points);
                     allPoint.push.apply(allPoint,data.points);
                 });
             })(i);
         }
    

关于百度地图其他详细功能请参考api文档:
http://lbsyun.baidu.com/cms/jsapi/reference/jsapi_reference_3_0.html#a7b55

web服务Api:
http://lbsyun.baidu.com/index.php?title=webapi/guide/changeposition

### 解决百度地图API中Geolocation获取当前位置不准确的问题 当遇到`Geolocation().getCurrentPosition()`在安卓设备上无法正常工作或返回位置偏差较大的情况时,可以考虑以下解决方案: #### 使用坐标转换提高精度 由于不同平台和服务提供商使用的地理坐标系可能有所不同,在某些情况下直接获得的经纬度数据并不适用于特定的地图服务。对于百度地图而言,可以通过调用其提供的坐标转换接口来改善这一状况。 ```javascript // 创建原始点对象并记录初始坐标 var pointBak = new BMap.Point(lng, lat); // 调用坐标转换函数,参数分别为待转数组、源类型(1代表GPS)、目标类型(5表示bd09ll),以及回调处理程序 convertor.translate([pointBak], 1, 5, function (resPoint){ var accuratePoint = resPoint.points[0]; // 此处可继续执行基于新坐标的其他操作... }); ``` 上述代码片段展示了如何利用百度地图API中的`translate`方法将来自HTML5 `geolocation`插件或其他途径得到的非标准坐标转化为更精确的BD09LL格式[^3]。 #### 结合浏览器原生功能优化体验 考虑到部分移动操作系统可能存在权限管理差异等因素影响定位效果,建议同时启用浏览器内置的支持机制作为补充方案之一。这不仅有助于提升兼容性和准确性,还能让用户更容易接受授权请求。 ```html <!-- HTML结构 --> <button id="getLocation">点击获取我的位置</button> <div id="locationInfo"></div> <script type="text/javascript"> document.getElementById('getLocation').onclick = function(){ navigator.geolocation.getCurrentPosition( successCallback, errorCallback, {timeout:7000} ); }; function successCallback(position){ let coords = position.coords; document.getElementById("locationInfo").innerHTML = "纬度:" + coords.latitude + "<br>经度:" + coords.longitude; // 进一步处理这些坐标值... } function errorCallback(error){ console.log("Error occurred. Error code:" + error.code); }; </script> ``` 这段脚本实现了简单的用户交互界面,并通过监听按钮事件触发地理位置查询过程;一旦成功,则显示相应的经纬度信息给前端页面[^2]。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值