高德地图API之猎鹰服务
“猎鹰”是高德地图提供的一套轨迹管理服务。为了便于理解服务接口(API)中的术语,这里假想一个应用的场景:假设你有一个货物运输的车队,名叫“飞奔2020”,车队里每辆车都有一个车牌号,如“京Z54321”、“京A09876”,等等。你想做一款应用,追踪每辆车的历史轨迹,而高德地图提供的猎鹰服务恰好可以满足你的需求。
一、术语:
开发者密钥(key):要想利用高德地图API开发应用,首先必须注册成为开发者,具体方法见《加油2017-1:认识API》。注意,在申请key时,服务平台必须选择“Web服务”。
服务(Service):要想创建一个基于猎鹰服务的应用,首先必须申请一个服务,并给这个服务起个名字,例如“飞奔2020”。申请服务需要提供开发者密钥,服务名称不能重复,应用中的所有功能都建立在这个服务名称之下。
终端(Terminal):猎鹰服务追踪的是车的位置,因此车队里的每辆车都是一个终端,需要为每辆车注册一个名称,以车牌号为名称是不错的选择,如“京Z54321”。
轨迹(Trace):每辆车都会有既往的行使路线,在路线上会有许多标记点,如出发地库房、高速公路入出口、目的地库房等,这些标记点连在一起就组成了车辆的行驶轨迹。
标记点(Point):终端会在指定地点报告自己的位置信息,其中包括经纬度、时间、车速、行驶方向、海拔高度等等,这些信息中只有经纬度和时间是必填项,其他则是非必填项。
二、关键技术
如果按照信息的流向划分,猎鹰服务大致可以分为两类,一是信息抓取类服务,如查询服务、查询终端等,二是信息上传类服务,如申请服务、创建终端、上传标记点等等。
不同类型的服务在实现技术上也有所不同。同样是向服务端发出请求,请求的方式分为GET、POST两种,前者适用于信息的抓取,后者适用于信息的上传。我们在《加油2017》系列文章中采用的都是GET方式,而在本文的案例中,两种方式都会用到。
GET方式使用起来相对简单,所有请求的信息都被拼写成URL地址,如下面的字串:
https://tsapi.amap.com/v1/track/service/list?key=fcf656fd381b328bc36d5dd7fbf5f95e
这个网址用于获得开发者名下所有服务,其中“?key=…”是参数名和参数值。
POST方式使用起来稍显复杂,它的请求由三个部分组成:
请求网址:一个URL地址,如
https://tsapi.amap.com/v1/track/service/add(申请服务)请求头:指明信息的类型,如Content-Type= application/x-www-form-urlencoded(表单格式)
请求体:将要上传的数据
无论是GET方式,还是POST方式,在请求发出后,服务端都会给出响应,并在客户端触发一个“响应”事件,这个事件中携带了服务端返回的结果。
在App Inventor中,Web客户端组件用于向服务端发出请求,并侦听服务端的“响应”事件,在App Inventor中“响应”事件即“收到文本”事件。本文将采用这个组件,来实现一些简单的猎鹰服务功能。这里重点讲解服务、终端、轨迹的创建、删除及查询功能,其他功能请读者参照本文的例子,对照服务商提供的开发文档自行完成。技术文档地址:https://lbs.amap.com/api/track/summary。
在AppInventor中创建一个项目——猎鹰2019,在项目中添加一个按钮、一个标签及一个web客户端组件,然后将开发工具切换到编程视图,开始编写程序。
三、 服务的申请、删除及查询
1、服务的申请
(1)API接口规格
网址:
https://tsapi.amap.com/v1/track/service/add请求方式:POST
请求参数:
key:开发者密钥
name:即将申请的服务名称
desc:对于名称的描述,非必填项
(2)全局变量
将申请服务所需的数据保存在全局变量中,以避免重复输入字符,代码如图1所示。注意请求头和申请服务数据中的列表结构,它们都是两级列表。

图1 申请服务所需的全局变量
(3)按钮点击事件处理程序
代码如图2所示。

图2 申请服务所需的程序
(4)web客户端收到文本事件处理程序
代码如图3所示。

图3 Web客户端收到文本事件的处理程序
(5)测试
点击按钮,很快收到服务器返回的结果,如图4所示。注意图中的”sid”:98678,这是申请到的服务编号,具有唯一性,此后的所有操作都必须提供一个编号。

图4 申请服务的返回结果
2、删除服务
删除服务的操作需要提供两个参数:开发者key及服务编号sid,代码如图5所示。

图5 删除服务的相关代码
3、服务查询
服务查询操作只需要提供一个参数:开发者key,代码如图9所示。注意查询功能的请求方式是GET。

图6 查询全部申请过的服务
四、终端的创建、查询及删除
1、创建终端
(1)API接口规格
终端申请网址:
https://tsapi.amap.com/v1/track/service/add请求方式:POST
必填参数:
key:开发者密钥
sid:服务编号
name:终端名称(如京Z54321),在同一个sid之下终端名称不允许重复。
(2)编写程序
将创建终端的网址及数据保存为全局变量,代码如图7所示。

图7 与创建终端有关的程序
(3)测试
测试结果如图8所示,仔细察看服务端返回的信息,其中count表明共创建了一个终端,createtime是创建时间(毫秒数),name是车牌号,注意tid(233773284),这是系统自动生成的一个编号,具有唯一性,是后续修改或删除操作的必填项。

图8 测试:创建终端
2、删除终端
删除终端的操作需要提供三个参数:开发者key、服务编号sid及终端编号tid,代码如图9所示。

图9 删除终端的程序
3、查询终端
查终端的操作有两个必填项:开发者key及服务编号sid,此时将返回全部终端信息。如果同时提供的终端编号tid,则返回该终端的信息,代码如图10所示。

图10 查询终端的程序
五、轨迹的创建、标记点的上传与查询
1、创建轨迹
(1)接口规格
网址:
https://tsapi.amap.com/v1/track/trace/add请求方式:POST
请求参数:
key:开发者密钥
sid:服务的唯一编号
tid:终端的唯一编号
(2)编写程序
利用图10中的程序查询已有的终端,并为某个终端创建轨迹,代码如图11所示。

图11 创建轨迹的程序
(3)测试
测试结果如图12所示,观察服务端返回的信息,其中的”trid”:20就是刚刚创建的轨迹,下面的上传标记点操作需要用到这个trid。

图12 测试:创建轨迹
2、上传标记点
(1)接口规格
网址:
https://tsapi.amap.com/v1/track/point/upload请求方式:POST
请求参数:
key:开发者密钥
sid:服务的唯一编号
tid:终端的唯一编号
trid:轨迹的唯一编号
point2:标记点信息
○ location:经纬度
○ locatetime:当前时间(毫秒数)
○ speed:速度(非必填项)
注意:(1)可以上传单个标记点,也可以批量上传多个标记点;(2)标记点信息要求以JSON格式提供,下面是两个标记点批量上传的具体写法(只上传必填项)。
[{"location":"116.397428,39.90923","locatetime":1544176895000},
{"location":"116.397435,39.90935","locatetime":1544176913000}]
(2)编写程序
根据接口规格编写程序,注意提供正确的sid、tid、trid值,否则上传操作会失败。代码如图13所示。

图13 上传标记点的程序
(3)测试
测试结果如图14所示,返回的信息中最后显示的“OK”表明上传成功。

图14 测试:批量上传标记点
3、查询标记点
查询标记点的操作有四个必填项:开发者key、服务编号sid、终端编号tid及轨迹编号trid,请求方式为GET,具体代码如图15所示。

图15 查询标记点的程序
测试结果如图16所示。返回数据中有许多英文单词,如data、counts、distance等等,它们的具体含义请参见猎鹰服务的技术文档:
https://lbs.amap.com/api/track/lieying-kaifa/api/grasproad。

图16 测试:查询标记点
4、解析JSON数据
在图16中,返回的数据为JSON格式,这不是提供给人类阅读的格式,需要将数据转为列表,再逐一对列表项进行解析。具体代码如图17所示。这里只解析的外层数据,至于每个标记点的内部数据,也可以仿照此法加以解析。

图17 解析JSON数据的程序
上述程序的执行结果如图18所示。从图中可以看到我们刚刚上传的两个标记点,它们之间的空间距离是13米,时间距离是18秒。

图18 测试:解析JSON数据
以上是对猎鹰服务的简单介绍,更多的功能请参考地图服务商提供的开发文档。
