讨论一个实用的话题,如何得到两个城市之间的距离。这个并不是啥心血来潮想的话题,是一个实际的需求。苏南大叔以前做过高德地图和百度地图的开发,所以知道,可以使用相关的接口来获得数据。所以,随手选用了百度地图来实现这个需求。

苏南大叔:如何通过百度地图,判断两个城市之间的行车距离? - bmap-distance
如何通过百度地图,判断两个城市之间的行车距离?(图4-1)

本文测试环境:php@7.3.4,bmap@2.0

基本情况

本文的主要范例基于官方的demo,链接如下:

苏南大叔:如何通过百度地图,判断两个城市之间的行车距离? - bmap-city-distance-menu
如何通过百度地图,判断两个城市之间的行车距离?(图4-2)

// 百度地图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结果了。不过需要注意的是:地址名需要唯一无异议。否则会触发选择出发地的功能,这个并不是我们想要的。

苏南大叔:如何通过百度地图,判断两个城市之间的行车距离? - bmap-city-distance-js
如何通过百度地图,判断两个城市之间的行车距离?(图4-3)

php解析到距离值

使用php解析到这个距离值,当然,使用其它语言,也是可以获得结果的。这里就是因为苏南大叔使用php比较顺手一点。

newsn.net:这里是【评论】可见内容

传入出发地和目的地就行了,就可以获得乘车距离了。

苏南大叔:如何通过百度地图,判断两个城市之间的行车距离? - bmap-city-distance-php
如何通过百度地图,判断两个城市之间的行车距离?(图4-4)

相关链接

总结

本文的需求,仅仅停留在接口层面上,也不是传统意义上的地图开发功能,就是通过接口拿数据功能。接口能调通的前提是:百度的接口访问限制比较松,允许空referer的访问。当然了,代码也是可以模拟出任何合法的referer的。这里不多说。

哪天,接口做了更严格的设置的话,那就到时候再说吧~ 下面的链接是百度相关的文字,感谢您阅读苏南大叔的博客:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享。
转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议。
未经许可,规模化镜像抄袭本站内容的行为,将会根据有关法律法规进行维权。
程序如此灵动~》下所有原创文章,如被用于商业用途,请您按规定支付稿费。

 【加群】加入QQ群【175454274】和大家一起讨论这个问题

 【源码】本文代码片段及相关软件,请点此获取

 【绝密】秘籍文章入口,仅传授于有缘之人   baidu    bmap

本站的忠实读者小伙伴,正在阅读下面这些文章: