本文要说的是通过LabVIEW调用百度地图服务,并在程序中显示调用的地图信息。具体为以GPS或北斗等定位系统返回的地理位置经纬度信息为输入,通过调用百度地图对外开放的WEB服务API,实现在程序中调用百度地图,并可通过调用参数设置地图的大小、精度、定位标记等信息。
一、百度地图WEB服务API简介
百度地图Web服务API是百度地图为开发者提供的http/https接口,即开发者通过http/https形式发起检索请求,获取返回json或xml格式的检索数据。用户可以基于此开发JavaScript、C#、C++、Java等语言的地图应用。
Web服务API提供了一系列实用功能,经常使用到的有:
- 地点检索服务
地点检索服务提供多种场景的地点(POI)检索功能,包括城市检索、圆形区域检索、矩形区域检索。开发者可通过接口获取地点(POI)基础或详细地理信息。
注意:地点检索服务适用于【XX大厦】、【XX小区】等POI地点名称的检索,若需要检索结构化地址,如【北京市海淀区上地十街十号】,则推荐使用地理编码服务。
示例:
https://api.map.baidu.com/place/v2/search?query=ATM机&tag=银行®ion=北京&output=json&ak=您的ak //GET请求
- 地点输入提示服务
地点输入提示服务匹配用户输入内容,提供输入提示功能。常与地点检索服务搭配使用。也可作为轻量级地点检索服务单独使用。
示例:
https://api.map.baidu.com/place/v2/suggestion?query=天安门®ion=北京&city_limit=true&output=json&ak=你的ak //GET请求
- 地理编码服务
地理编码服务可将结构化地址(省/市/区/街道/门牌号)解析为对应的位置坐标。地址结构越完整,地址内容越准确,解析的坐标精度越高。;地理编码服务当前未推出国际化服务,解析地址仅限国内。
示例:
https://api.map.baidu.com/geocoding/v3/?address=北京市海淀区上地十街10号&output=json&ak=您的ak&callback=showLocation //GET请求
- 逆地理编码服务
逆地理编码服务可将位置坐标解析成对应的行政区划数据以及周边高权重地标地点分布情况,整体描述坐标所在的位置。
示例:
https://api.map.baidu.com/reverse_geocoding/v3/?ak=您的ak&output=json&coordtype=wgs84ll&location=31.225696563611,121.49884033194 //GET请求
- 路线规划服务
路线规划服务是一套REST风格的Web服务API,以HTTP/HTTPS形式提供了路线规划服务。目前,Direction API支持公交、骑行、驾车路线规划,Direction API支持中国大陆地区。
示例:
https://api.map.baidu.com/direction/v2/transit?origin=40.056878,116.30815&destination=31.222965,121.505821&ak=您的AK //GET请求
- 普通IP定位
普通IP定位是一套以HTTP/HTTPS形式提供的轻量级定位接口,利用IP获取大致位置,调用API接口,返回请求参数中指定上网IP的大致位置信息(一般为城市级别),位置信息包括:经纬度、省、市等地址信息。
示例:
https://api.map.baidu.com/location/ip?ak=您的AK&ip=您的IP&coor=bd09ll //HTTP协议
https://api.map.baidu.com/location/ip?ak=您的AK&ip=您的IP&coor=bd09ll //HTTPS协议
- 静态图
静态图API可实现将百度地图以图片形式嵌入到网页中。只需发送HTTP请求访问百度地图静态图服务,便可在网页上以图片形式显示地图。
示例:
http://api.map.baidu.com/staticimage?width=400&height=300¢er=116.413387,39.910924&zoom=11
- 地图调起
地图调起API是为开发者提供直接调起百度地图产品(百度地图手机客户端)以满足特定业务场景下应用需求的程序接口,开发者只需按照接口规范构造一条标准的URI,便可在PC和移动端浏览器或移动开发应用中调起百度地图产品,进行地图展示和检索、线路查询、导航等功能,无需进行复杂的地图功能开发。 该套API免费对外开放,无需申请ak。
示例:
http://api.map.baidu.com/marker?location=40.047669,116.313082&title=我的位置&content=百度大楼&output=html&src=webapp.baidu.openAPIdemo
//调起百度PC或web地图,且在(lat:39.916979519873,lng:116.41004950566)坐标点上显示名称"我的位置",内容"百度大楼"的信息窗口。
二、通过LabVIEW软件平台实现对百度地图服务的调用
通过调用百度地图的WEB服务API,即可实现在LabVIEW程序中调用百度地图。下面以静态图API的调用为例,具体讲解如何实现将百度地图嵌入至LabVIEW程序中。
1、前面板
首先看前面板的配置,总共就2个控件:
- 1个字符串输入控件,用于输入HTTP请求的服务地址;
- 1个WebBrowser输入控件,用于显示调用的百度地图静态图片,其位于控件选板的“.NET与ActiveX”→“网页浏览器”。
2、程序框图
通过LabVIEW调用百度地图的静态图API接口的程序框图如下图所示:
其中,程序框图说明如下:
- 通过“IWebBrowser.Silent”属性设置设置Map对象禁止显示对话框。
注:之所以要设置禁止显示对话框,是因为若不禁止,可能会在程序运行过程中弹出“当前页面的脚本发生错误”的情况,如下图所示。
- 通过“IWebBrowser.Navigate2”方法调用百度地图的静态图API,该方法节点必须的输入端为URL;
- 通过在While循环中的“IWebBrowser.ReadyState”方法不断地询问是否已完成静态图的调用,当完成调用时该方法节点将返回枚举型值“READYSTATE_COMPLETE”,并退出While循环;
- 调用完百度地图后,通过“关闭引用”函数关闭与WebBrowser控件的连接;
- 调用“简易错误处理函数”进行错误处理。
三、程序运行效果验证
以下是几个调用示例及调用结果。
- 示例1:
URL:http://api.map.baidu.com/staticimage?width=800&height=600¢er=113.106,27.855&zoom=17&markers=113.106,27.855&markerStyles=l,A
URL解析:
1)http://api.map.baidu.com:百度地图API接口访问地址;
2)/staticimage?...:访问静态图API,“?”后面的是相关参数,各参数之间通过&进行分隔;
3)width=800&height=600:返回地图大小参数,其中地图宽度为800,高度为600;
4)center=113.106,27.855:表示需要访问的地图中心点的经纬度坐标参数;
5)zoom=17:表示地图放大级别,值越大放大倍数越大;
6)markers=113.106,27.855:表示需要在地图上做标记的标记点经纬度坐标,若要标记多个位置,可用“|”对多个坐标点进行分隔;此处也可以直接通过中文描述在地图上自动寻找标记点,如“markers=株洲体育中心|石峰大桥”;
7)markerStyles=l,A:标记风格,其中A为在标记中显示的字符,其取值范围为A~Z,0~9。
示例运行结果如下图所示:
- 示例2:
下图示例的URL为:http://api.map.baidu.com/staticimage?width=800&height=600¢er=113.106,27.855&zoom=14&markers=株洲体育中心|石峰大桥&markerStyles=l,A|I,B
与第1个示例相比,其标记点是通过中文描述进行表达的,且有2个标记点。
- 示例3:
下图示例的URL为:http://api.map.baidu.com/staticimage?width=800&height=600¢er=113.086,27.838&zoom=17
与前2个示例相比,该示例没有设置标记点,但图例放大系数为17,可以展示更多的地图细节。注:zoom参数最大可设置为19级。
四、总结
通过LabVIEW自带的WebBrowser控件,通过调用百度地图提供的API接口,以http的方式可以以在线的方式轻松调用百度地图。