产品提出的一个需求是, 通过道路名字, 把道路描绘出来. 这功能在各大地图上都是可以看到的, 所以他们觉得做出来也很简单.

但是百度地图本身是没有任何接口可以查询这个信息. 网上能找到的方法, 无非都是通过导航接口, 定义道路的起点和终点进行描绘. 但这种方法只要仔细推敲就有不妥:

  1. 如果道路有分岔怎么办? 每个分岔口都找出来然后不断调用导航接口吗?
  2. 如果道路是弯曲而不是直线怎么办? 导航走的是最近线路, 不一定会完全跟着某条路来走啊.

所以导航的方法并不完美. 我希望制找到的方法是最简单的, 通过路名就要找到整条道路的坐标数据. 但是这谈何容易? 研究过高德地图的都知道, 在javascript api里有虽然有Amap.RoadInfoSearch这个方法

但在web api里就只有搜索API, 搜索出来的对象是place对象, 里面的数据并不足以描绘道路.

那能不能调用javascript api的方法, 通过抓包看看他是怎样调用web api的呢? 测试代码html如下.

<!doctype html>
<html>
<head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width"><title>关键字查询-使用默认皮肤</title><link rel="stylesheet" href="http://cache.amap.com/lbs/static/main.css?v=1.0"/><script type="text/javascript"src="http://webapi.amap.com/maps?v=1.3&key=您申请的key值"></script><style type="text/css">#panel {position: absolute;background-color: white;max-height: 90%;overflow-y: auto;top: 10px;right: 10px;width: 280px;}</style>
</head>
<body>
<div id="mapContainer"></div>
<div id="panel">
</div>
<script type="text/javascript">var map = new AMap.Map("mapContainer", {resizeEnable: true});AMap.service(["AMap.RoadInfoSearch"], function() {var roadSearch = new AMap.RoadInfoSearch({ //构造地点查询类pageSize: 5,pageIndex: 1,city: "020"});//关键字查询roadSearch.roadInfoSearchByRoadName('元岗路', function(status, result) {alert(result.roadInfo[0].path[0]);});});
</script>

抓包后获取到一条非常有用的信息, 有这么一条调用

http://restapi.amap.com/v3/road/roadname?pageIndex=1&city=020&offset=5&key=608d75903d29ad471362f8c58c550daf&s=rsv3&output=json&keywords=%E5%85%83%E5%B2%97%E8%B7%AF&callback=jsonp_749020_&platform=JS&logversion=2.0&sdkversion=1.3&appname=http%3A%2F%2Flbs.amap.com%2Fapi%2Fjavascript-api%2Fexample%2Fpoi-search%2Finput-prompt%2F&csid=C23EE7C1-3ADE-4366-AEF3-D45E622F8568

返回的信息里有一段非常有用的结果, 就是roads数组,

roads:[{id: "020F49F01004315432", name: "元岗路", citycode: "020", width: "12", type: "次要道路(城市次干道)",…},…]
0:{id: "020F49F01004315432", name: "元岗路", citycode: "020", width: "12", type: "次要道路(城市次干道)",…}

进一步分析这个数组的第一个结果, 应该就是roadInfo对象,里面又存在一个polylines数组, 看起来非常像是一段段路的坐标列表.

polylines:
0:"113.3395181,23.16999083;113.3395219,23.17012167;113.3395264,23.17016972;113.3395328,23.17021472;113.3395481,23.17026139;113.3395786,23.17032556;113.3396211,23.17040139;113.3398214,23.17073139;113.339885,23.17084444"
1:"113.3367803,23.1771625;113.3364894,23.17720583;113.3362911,23.17723556;113.3362022,23.17724806;113.3361247,23.17725278;113.3360547,23.17724611;113.3359106,23.17722222;113.3358153,23.17720611;113.3357439,23.17719806;113.3356853,23.17719639;113.3356281,23.17720111;113.3355678,23.17721056;113.3355075,23.17722611;113.3354678,23.17724111;113.3354061,23.17726389;113.335265,23.17732556;113.3348517,23.17749778;113.3347969,23.17751472;113.3347408,23.177525;113.3346953,23.17753139;113.334695,23.17753139"
2:"113.3416042,23.17464861;113.3416194,23.1746825;113.3419189,23.17532083;113.3421011,23.17574861;113.3422519,23.17612111;113.3422869,23.17621917;113.3423011,23.17629222;113.3423103,23.17636083"
...

说到这里, 不得不提 一下地图的道路是怎么画出来的.只要将道路放大, 就会发现各大地图都是用直线一段一段地把整条道路描绘出来, 所以说, 很可能这一段一段的数据就是上面道路信息的数组!

接下来就是要验证这个想法, 方法就是把上面得到的数组上的坐标, 放到高德地图拾取器里验证. 经过仔细验证, 果然数组的每组坐标列表, 就是代表一小段道路!

既然这样就直接使用上面那个抓出来的restapi来用吧, 谁知道一把那个url放浏览器就傻眼了, 返回了以下东西.

jsonp_749020_({"status":"0","info":"INVALID_USER_DOMAIN","infocode":"10006"})

看来这接口不能这么照搬地调用啊, 必须找出高德web api的套路. 于是又参考了一下他的搜索API 是怎么使用的, 文档给出的例子是这样的:

http://restapi.amap.com/v3/place/text?&keywords=北京大学&city=beijing&output=xml&offset=100&page=1&key=<用户的key>&extensions=all

既然这个rest api, 那我把place换成road就应该是查需road的信息, 而截取出来的URL的确有这么一段http://restapi.amap.com/v3/road/roadname , 那就把road替换了他的place, roadname替换他的text, keywords换成路名. 果然得到一条有正确返回的接口了! 虽然这接口他文档没写出来, 但还是被我揪出来了.

http://restapi.amap.com/v3/road/roadname?city=020&key=<用户的key>&keywords=元岗路

后记:
离开丰石科技也两年了,回头再看看这篇文章,看到很多人点赞,更怀念那几年沉浸在技术海洋的日子。

通过高德地图API获得某条道路上的所有坐标用于描绘道路相关推荐

  1. 项目 - Web地图开发【高德地图API】(一)

    导航兔: Web地图开发 [高德地图API] 导航地址 Web地图开发[高德地图API](一) https://qianmoer.blog.csdn.net/article/details/12842 ...

  2. Android 高德地图API(详细步骤+源码)

    高德地图API使用详解 前言 正文 一.创建应用 ① 获取PackageName ② 获取调试版安全码SHA1 ③ 获取发布版安全码SHA1 二.配置Android Studio工程 ① 导入SDK ...

  3. 项目 - Web地图开发【高德地图API】(二)

    导航兔: Web地图开发 [高德地图API] 导航地址 Web地图开发[高德地图API](一) https://qianmoer.blog.csdn.net/article/details/12842 ...

  4. 高德地图api如何不显示logo_Python爬取高德地图POI数据获取「洗浴推拿指南」

    学习交流群 认识高德地图API 打开"高德开放平台",点击"开发文档",在"Web服务"下寻找并点击"搜索API". 我 ...

  5. Vue 中使用高德地图api

    比较简单的原生方式 <template><div style="margin: 0px;padding: 0px"><div id="pan ...

  6. 利用高德地图API获取任意两座城市之间的距离!异地也有惊喜!

    工作中有时会遇到这样一种场景:年末需要统计所有员工该年的航旅出差情况,然后根据他们的飞行距离补贴一定的交通费.例如如下所示情况: 然而,如果我们使用地图APP等工具逐一进行手工查询,在一家规模稍大的公 ...

  7. 利用vue+高德地图API 实现用户的运动轨迹

    利用vue+高德地图API 实现用户的运动轨迹 高德地图网址:https://lbs.amap.com/api/jsapi-v2/guide/abc/prepare 任务一:实现地图显示 先完成准备工 ...

  8. 高德地图API POI分类编码表(mysql版)

    高德地图API POI分类编码表(mysql版)   编码表更新时间:2017年8月10日   注意:本编码表为高德地图自定义编码格式,数据会根据行政区划变动不定期进行更新. sql文件下载地址: h ...

  9. 高德地图api实现导航功能(使用经验)避坑关注

    关于导航功能的实现实际上就是使用市面上开放的地图api,按照操作文档进行开发实现功能的. 业内流行的无非是两种,一种高德地图api,另一种是百度地图api,博主这里选用了高德地图api,进行避坑讲解. ...

最新文章

  1. excel筛选排序从小到大_数据横向排序和筛选,Ctrl+F搭配通配符quot;*quot;,只需简单四步完成...
  2. 当百度更新算法时,网站优化应注意哪些事项?
  3. 熟读《阿里巴巴java开发手册》(二、异常日志)
  4. gNB,ng-eNB和NR
  5. stl向量_用户定义大小的C ++ STL中的2D向量
  6. C语言实现ICMP协议Ping命令
  7. 灰色预测模型matlab_Matlab数据分析,2020研究生报名人数灰色预测
  8. 用element-ui的走马灯carousel轻松实现自适应全屏banner图 解决el-carousel默认高度300问题  组件代码
  9. ip地址规划工具_ROS、Simulink、Carsim的互联与规划、控制算法的验证
  10. Android 中文 API (24) —— MultiAutoCompleteTextView.CommaTokenizer
  11. matlab遗传算法输出参数太多,用遗传算法工具箱时错误提示太多输出参数?
  12. cad导出jpg格式什么像素最清晰
  13. Xcode 模拟器Simulator手动下载(iOS 8 - iOS 12)
  14. python爬虫之数据提取、正则表达式、xml、XPath、etree、CSS选择器 BeautifulSoup4
  15. Python爬虫实战--小猪短租爬虫
  16. 冯.诺依曼结构 总线 接口 南桥 北桥
  17. UI设计师必备素材|功能性UI线性图标
  18. ZYNQ学习之旅--PS_AXI_VDMA(利用VDMA实现将PS端的数据显示在PL端的HDMI上)
  19. R plot图片背景设置为透明_一文学会网络分析——Cooccurrence网络图在R中的实现...
  20. 使用循环语句打印菱形梅花阵

热门文章

  1. 先宏观后微观:房源维护
  2. emqtt 启动报错 Erlang closed the connection 查看状态报错 Node 'emq@192.168.*.*' not responding to pings.
  3. FreeSWITCH GUI (fs图形化配置程序介绍)
  4. 解决 fatal: unable to access ‘https://github.com/qweertu/git-demo.git/‘: error setting certificate...
  5. 2020技术类博客撰写发布一揽子解决方案
  6. 实例:建立一个触发器,当scott.emp被删除一条记录时,把被删除记录写到删除日志里面去
  7. cydia java_Cydia for Android
  8. 人脸检测与美颜技术介绍(OpenCV)
  9. 我们工作到底为了什么(HP大中华区总裁孙振耀退休感言 )
  10. 基于JavaWeb的表格实例