如何通过百度地图,判断两个城市之间的行车距离?
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
讨论一个实用的话题,如何得到两个城市之间的距离。这个并不是啥心血来潮想的话题,是一个实际的需求。苏南大叔以前做过高德地图和百度地图的开发,所以知道,可以使用相关的接口来获得数据。所以,随手选用了百度地图来实现这个需求。
本文测试环境:php@7.3.4
,bmap@2.0
。
基本情况
本文的主要范例基于官方的demo
,链接如下:
// 百度地图API功能
var map = new BMap.Map("allmap");
map.centerAndZoom(new BMap.Point(116.404, 39.915), 12);
var output = "从上地到西单驾车需要";
var searchComplete = function (results){
if (transit.getStatus() != BMAP_STATUS_SUCCESS){
return ;
}
var plan = results.getPlan(0);
output += plan.getDuration(true) + "\n"; //获取时间
output += "总路程为:" ;
output += plan.getDistance(true) + "\n"; //获取距离
}
var transit = new BMap.DrivingRoute(map, {renderOptions: {map: map},
onSearchComplete: searchComplete,
onPolylinesSet: function(){
setTimeout(function(){alert(output)},"1000");
}});
transit.search("上地", "西单");
获得接口地址
这个例子中,在代码中传入了两个地名,然后就计算出来了行车路径及距离,正好符合苏南大叔的要求。因为苏南大叔需要的数据比较多。如果使用百度官方的地图开发者申请到的key
的话,估计会比较崩溃。所以,这里苏南大叔使用抓包的方式,获得了接口地址(使用官方无限制的key
)。
然后使用php
来请求接口,获得json
返回值,进而解析出城市距离。抓包的方式,这里就不说了。苏南大叔的博客里面,有很多种方法介绍。例如:
发起请求,从唐山市到北京市,进而获得的接口地址是:
http://api.map.baidu.com/?qt=nav&c=131&sn=2%24%24%24%24%24%24唐山市%24%240%24%24%24%24&en=2%24%24%24%24%24%24北京市%24%240%24%24%24%24&sy=0&ie=utf-8&oue=1&fromproduct=jsapi&res=api&callback=BMap._rd._cbk94060&ak=E4805d16520de693a3fe707cdc962045
这个链接很长很长,替换里面的出发地和目的地就可以获得json
结果了。不过需要注意的是:地址名需要唯一无异议。否则会触发选择出发地的功能,这个并不是我们想要的。
php
解析到距离值
使用php
解析到这个距离值,当然,使用其它语言,也是可以获得结果的。这里就是因为苏南大叔使用php
比较顺手一点。
newsn.net:这里是【评论】可见内容
传入出发地和目的地就行了,就可以获得乘车距离了。
相关链接
- https://newsn.net/say/php-json-function.html
- https://newsn.net/say/php-file_get_contents.html
- https://newsn.net/say/php-openssl-cafile.html
- https://newsn.net/say/bmap-dev.html
- https://newsn.net/say/amap-api-border.html
总结
本文的需求,仅仅停留在接口层面上,也不是传统意义上的地图开发功能,就是通过接口拿数据功能。接口能调通的前提是:百度的接口访问限制比较松,允许空referer
的访问。当然了,代码也是可以模拟出任何合法的referer
的。这里不多说。
哪天,接口做了更严格的设置的话,那就到时候再说吧~ 下面的链接是百度相关的文字,感谢您阅读苏南大叔的博客:
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
烙铁666