百度地图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);
});
地址解析
与逆解析相反,这个需要从中文地址解析成一个可以使用的包含经纬度的特殊对象,使用的方法是解析器调用getPoint
方法
因为路线规划的api都是使用point作为参数,所以point需要动态获取。
myGeo.getPoint('河北省保定市涞水县',function(res){
console.log(res);
})
嘿嘿,似乎一点问题没有,再看下:
可以明显看出来这个坐标值和我上面给定的误差有点大(可能是百度这里默认定位点在区域的行政中心,比如南京-南京政府大楼,涞水县-涞水县政府),这是其一;其二;实际使用中,比如你填写快递不一定将地址写全,比如金华:
我们将金华 这个地址放进去解析所得point实际是北京的,而官方文档并没有透露出中文地址解析的point会有出错的情况,甚至补全全地址依然如此:
地址编码
期间尝试过很多方式,比如补全省份,解决了部分定位;默认省份+市 解决了部分;直到遇到上面那个地址-金华,啥都不好使。
百般搜寻文档,终于在地址编码这里找到了思路:
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使用过程中坑还有比较多的地方,相对本篇内容来说,处理方案不算完美,若有读者需要,下篇我可以分享出来,仅供参考交流,谢谢~
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。