今天后台有小伙伴问题一个问题,刚好另一篇推文还没这么快,那就先插个队吧。
问题如题所示:高德地图怎么根据定位点获取附近的唯一道路名称?
这个小伙伴应该是看了强哥之前的写过的《高德地图根据输入地址查询轨迹路线以及获取到所有的路线上的经纬度点》所以来问相关问题的。刚好,我也是比较感兴趣,所以就试着找找解决办法。
首先强哥第一眼看到问题后,就被两个关键字吸引了,没错:附近。有做个地图功能或者经常用地图的小伙伴应该很容易联想到,高德地图上就带有附近的功能,而其相关的API应该就是搜索POI了。
于是不用多说,直接打开高德开放平台,定位到搜索POI,其中便有一个“周边搜索”相关的章节:
https://developer.amap.com/api/webservice/guide/api/search
嗯哼,看来问题还是比较好解决的嘛。看了下对应的接口参数中,有一个可选参数,解释如下:
哦,从解释中可以看出,types既然是一个类型编码,除了加油站、城市之类的应该也会有我们需要的道路名称,那对应的types会是什么呢?不用多说,直接点击下载图中的《POI分类编码和城市编码表》看看有没有就知道了。
下载下来后,果然有类似的道路名称信息类型:
嗯,图中190300和190301看着都是我们需要的,直接在页面试试就知道了。高德地图刚好也提供了比较方便的测试方法:
我们从返回的pois中便能获取到该定位点周边的道路名。是不是很快很方便。
有的小伙伴会问,返回的pois是个数组,这个怎么办呢?到底哪个才是当前定位点最近的道路呢?而且,radius为500米这个也太大了。
强哥经过多次测试后,确实也发现了一下问题,有的定位点,radius缩小到100都能找到数据,可是有的定位点就不行,或者找到多个数据。而如果是多个数据的情况,由于给出来的道路都带有坐标,其实并不是能简单的根据判断两个点的距离然后排序就能获取到最近道路的。以为你不懂得到底高德地图会拿这条路上的哪个点作为返回的定位点。有时候定位点就在这条路上,可是因为radius设置的距离关系,可能会返回多条路的定位信息。
所以,这个方法,粗略的用来找定位点周边有哪些路倒是没有问题,可是要找最近的道路名称就不是特别合适了。
既然不太行,那就再找找其他的API吧。其实高德地图开放出来的API也不算太多,只要你愿意多去试试还是能找到一些能解决问题的功能的。
搜索了一番之后,强哥在“地理/逆地理编码”这节中:
https://lbs.amap.com/api/webservice/guide/api/georegeo
找到了更合适的解决方法:逆地理编码。
同样的一套测试下来结果如下:
强哥通过多次测试,只要定位点离道路的距离不会非常远(同样跟设置的radius参数有关)。都能在返回结果中的roads中获取到最近的一条路的名称,虽然同样是数组,但是觉得精确很多。如果定位点在就在道路上,返回的肯定是当前这条道路的名称。
再者说,返回的结果名都叫roads,准确率明显比之前POI搜索中用types来区分的方式更明确也更靠谱。
由此我们便找到了解决问题的API。哈哈,看着是不是很简单。不过,整个过程还是需要花费一些时间去查找事例文档以及对API进行测试。直接给出答案,反而觉得较为容易。
不过,上面链接对应的解决方案是web API的接口解决方式,很多小伙伴开发地图都是通过前端jsApi来完成的。有没有对应的文档嘞,当然是有啦,贴心的强哥已经为大家把测试代码打包好了,感兴趣的同学,公众号后台留言:“高德定位获取道路名” ,便可以获取到对应的js代码啦。
对了,千万要记得自己替换高德地图的key哦,强哥已经被类似没替换key导致无法运行的问题回复了无数遍了。
好啦,如果还有一些其他问题的小伙伴,也可以在后台给强哥留言哦,你的留言,也是我出稿的一份动力啊,哈哈!!
就到这啦~