1

百度地图api使用

简单说,申请一个ak,大部分api功能可以免费使用,一般的网站开发足够了。最近开发一个网页,关于货物配送路线规划的,有2个比较棘手的问题,一个是路线规划线条颜色和途径点;另外一个是定位不准或者定位不到,主要难点在于官方文档是2.0版本,社区关闭,文档不够详细。

逆地址解析

即一个经纬度坐标转换成中文地址,这种经纬度每个官方地图所得坐标大致上一直,因为保留6-8位小数,会有细微不同。
使用方式为,用官方提供的地址解析器对poit进行逆解析,输出结果;
var map = new BMap.Map("allmap");
var point = new BMap.Point(116.331398,39.897445);
map.centerAndZoom(point,12);
// 创建解析器
var myGeo = new BMap.Geocoder();
var pt = new BMap.Point(115.333333,39.555555);// 随便写个经纬度
myGeo.getLocation(pt,function(result){
    console.log(result);
});

image.png

地址解析

与逆解析相反,这个需要从中文地址解析成一个可以使用的包含经纬度的特殊对象,使用的方法是解析器调用 getPoint 方法
因为路线规划的api都是使用point作为参数,所以point需要动态获取。
myGeo.getPoint('河北省保定市涞水县',function(res){
    console.log(res);
})

image.png

嘿嘿,似乎一点问题没有,再看下:
image.png
可以明显看出来这个坐标值和我上面给定的误差有点大(可能是百度这里默认定位点在区域的行政中心,比如南京-南京政府大楼,涞水县-涞水县政府),这是其一;其二;实际使用中,比如你填写快递不一定将地址写全,比如金华:
image.png
我们将金华 这个地址放进去解析所得point实际是北京的,而官方文档并没有透露出中文地址解析的point会有出错的情况,甚至补全全地址依然如此:
image.png

地址编码

期间尝试过很多方式,比如补全省份,解决了部分定位;默认省份+市 解决了部分;直到遇到上面那个地址-金华,啥都不好使。
百般搜寻文档,终于在地址编码这里找到了思路:

http://api.map.baidu.com/geoc... //GET请求,返回信息中有point信息,经过对坐标点进行测试,定位准确;所以如果可以通过调用这个api,就能够获取到比较准确的经纬度信息,进而供业务使用。

这里直接上结论:使用任意的请求库,请求方式为get,强调的地方是dataType为jsonp!!!,否则会报跨域。代码如下:

$.ajax({
        url: 'http://api.map.baidu.com/geocoding/v3/',
        type: 'GET',
        data: {
          address: address,
          output: 'json',
          ak: '你的AK'
        },
        dataType: "JSONP",
        success: function (res) {
          if (res.status === 0) {
            var point = new BMap.Point(res.result.location.lng,res.result.location.lat);
            myGeo.getLocation(point, function (result) {
              console.log(address + '解析后为:' + result.address);
              address = result.address;
            })
          }
        }
      })

结尾

其实这次百度地图API使用过程中坑还有比较多的地方,相对本篇内容来说,处理方案不算完美,若有读者需要,下篇我可以分享出来,仅供参考交流,谢谢~


何弃疗
106 声望7 粉丝

前端路上摸爬滚打;野路子前端debug