1.问题
项目中需要进行测距,当前位置到指定位置的直线距离,目的坐标使用为百度坐标,而我们在微信里获取的当前坐标为wgs-48国际坐标这里需要对其进行转换
2.转化微信坐标到百度坐标
在这里百度为我们提供了转换工具,只要按照转换文档进行转换即可,大家可以到这个网址上看看http://lbsyun.baidu.com/index.php?title=webapi/guide/changeposition应该就知道如何进行转换了,当然这里我们会用到百度的jssdk
关于jssdk我们只需要引入相应的src路径即可
<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=你的ak"></script>
这里大家只需要改成你自己的ak就行了,关于这个秘钥怎么获取在上面的网址链接中百度会告诉如何取申请自己的ak
<script src="http://api.map.baidu.com/library/GeoUtils/1.2/src/GeoUtils_min.js" type="text/javascript"></script>
这里使我们下面要进行测距需要使用到的工具类
因为jssdk后我们就可以转换了,这里直接上代码
function getBaiduPosition(lng,lat) { var url ="http://api.map.baidu.com/geoconv/v1/?coords="+lng+","+lat+"&from=1&to=5&ak="+config.ak; $.ajax({ url: url, type: ‘GET‘, contentType: "application/json", dataType: ‘jsonp‘,//这里要用jsonp的方式不然会报错 success: function(data) { config.lng = data.result[0].x;//经度 config.lat = data.result[0].y;//纬度 } }); }
这段代码就是将其他坐标转换为百度坐标,至于里面的from和to参数大家还是参考上面的网址中知道去填写。
其中这里的lng是经度,lat是纬度,这里使用的是jsonp因为出现了跨域问题所以只能通过这种方式解决,幸好百度支持^_^,这里我是将获取到转换的经纬度坐标保存到了配置文件里方便后面使用。
3.进行测距
因为目的坐标是我们可以从服务器端获取的,这里我们也获取到了当前位置的坐标,这样我们就可以测距了,这里直接上代码:
function getDistance(lng,lat){ //测距需要的两点 var point1 = new BMap.Point(lng,lat); var point2 = new BMap.Point(config.lng,config.lat); //进行测距 var distance = BMapLib.GeoUtils.getDistance(point1, point2); return distance; // $.alert(distance); }
上面的这段代码就是进行测距的,主要使用到了工具类里面的东西,这个工具类百度是公开的源码的哦,大家有兴趣可以了解下 http://api.map.baidu.com/library/GeoUtils/1.2/docs/symbols/BMapLib.GeoUtils.html
好了经过上面的两段代码就实现了微信公众号获取到的当前位置转换成百度坐标,并进行测距。
这里需要大家注意的是两个js的引入以及转换坐标时的url的使用