准备工作

在正式进行3D地图开发前请先参考工程设置配置您的工程,并在这里获取检索服务SDK。

概述

检索SDK(iOS)是一套基于iOS5.1.1及以上设备的应用程序接口,通过该接口,您可以方便地调用腾讯地图检索服务,包括:poi检索、关键字提示、地址解析(地址转坐标)、逆地址解析(坐标转地址)、路线规划(包括步行、驾车、公交换乘)。通过这些服务可以完善您的LBS应用程序的功能。

注意:

由于检索sdk封装了腾讯webservice,因此每key每接口的默认日调用量为1W,并发为5。若用户想增加配额,请根据使用的接口功能按下表选择相应的webservice url到这里下载模板编辑并发送邮件。注意:请不要将模板作为附件发送,直接编辑模板作为正文发送。

检索服务参数 对应url
QMSGeoCodeSearchOption /ws/geocoder/v1/?address=*
QMSDrivingRouteSearchOption /ws/direction/v1/driving
QMSReverseGeoCodeSearchOption /ws/geocoder/v1/?location=*
QMSPoiSearchOption /ws/place/v1/search
QMSSuggestionSearchOption /ws/place/v1/suggestion
QMSWalkingRouteSearchOption /ws/direction/v1/walking

引入服务框架

在TARGETS -> Build Phases -> Link Binary with Libraries 点击“+”,弹出添加列表后,点击”Add Other…”,从frameworks文件夹中添加QMapSearchKit.framework到工程中

申请和添加key

1.申请用户key

1.访问http://lbs.qq.com/console/key.html,点击右上角申请秘钥,输入qq账号登录

2.填写应用名称,描述,验证码,阅读并同意使用条款

3.申请完成后,点击"我的秘钥"按钮,得到申请的key

2.在项目中添加key

在使用检索SDK时,需要对应用做Key机制验证,如果不添加key,将不能使用检索SDK,控制台会显示没有key的错误日志,在初始化检索之前将您在官网上申请的Key添加到如下:

3.示例代码

poi搜索

地点搜索(Search接口),提供三类范围条件的搜索功能:

1、指定城市的地点搜索:如在北京搜索餐馆;

2、圆形区域搜索:一般用于指定位置的周边(附近)地点搜索:如,搜索颐和园附近的酒店;

3、矩形区域的地点搜索:在地图应用中,往往用于视野内搜索,因为显示地图的区域是个矩形。

修改您的ViewController.m文件,添加以下代码,使您的ViewController实现QMSSearchDelegate协议:并添加搜索服务的对象QMSSearcher* searcher,可以通过使用如下方式设置POI检索参数:

当发起检索后,可以通过如下回调函数获取检索结果

更详细的代码示例请参考QmapSearchDemo中的PoiSearchViewController类

效果图如下:

智能提示,搜索建议

此接口用于获取输入关键字的补完与提示,帮助用户快速输入

修改您的ViewController.m文件,添加以下代码,使您的ViewController实现QMSSearchDelegate协议:并添加搜索服务的对象QMSSearcher* searcher,可以通过使用如下方式设置POI检索参数:

当发起检索后,可以通过如下回调函数获取检索结果

更详细的代码示例请参考QmapSearchDemo中的GeoAndSuggestionViewController类,下面是运行效果截图:

地址解析(地址转坐标)及逆地址解析(坐标位置描述)

此接口用于地址和坐标之间的转换

下面仅说明一下地址解析和逆地址解析的参数设置:

当发起检索后,可以通过如下回调函数获取检索结果

更详细的代码示例请参考QmapSearchDemo中的GeoAndSuggestionViewController类,下面是运行效果截图

步行路线规划

步行路线规划需要设置起点和终点坐标两个参数,设置示例如下:

当发起检索后,可以通过如下回调函数获取检索结果

此接口的返回的数据结构比较复杂,下面对QMSWalkingRouteSearchResult进行详细的介绍

返回结果中的routes字段是一个NSArray,表明结果可能有多条路线,其元素类型为QMSRoutePlan,包含了这条路线的方向、距离、所需时间、路线点串(用于在地图画出路线),以及分段的路线计划steps.

steps也是一个NSArray,其元素类型为QMSRouteStep,该类提供了用于导航的信息,这些信息的分析如下:

  • QMSRouteStep.accessorial_desc 本段的附加信息,可能为空,如“进入北四环西路”
  • QMSRouteStep.act_desc 本段的动作,如“右转”
  • QMSRouteStep.dir_desc 本段的方向,如“北”
  • QMSRouteStep.distance 本段的长度,单位:米
  • QMSRouteStep.duration 本段的用时,单位:分钟
  • QMSRouteStep.instruction 腾讯提供的本段的默认信息,如“向北步行100m,右转进入北四环西路”
  • QMSRouteStep.polyline_idx 本段的起点和终点在点串中的位置
  • QMSRouteStep.road_name 本段的路名,如“彩和坊路”

详细代码参考QMapSearchDemo中的RoutePlanViewController类

效果图如图:

驾车路线规划

驾车路线规划,起点和终点坐标两个参数是必须配置的,驾车规划还提供了多种规划策略的选择,同时支持多达10个途经点(包含起终点),设置示例如下:

当发起检索后,可以通过如下回调函数获取检索结果

此接口的返回的数据结构与步行规划返回的数据结构是一样的,可参考上节介绍

详细代码参考QMapSearchDemo中的RoutePlanViewController类

效果图如图:

公交换乘规划

公交换乘规划,起点和终点坐标两个参数是必须配置的,支持多种规划策略的选择,设置示例如下:

当发起检索后,可以通过如下回调函数获取检索结果

代码参考SOSOMapAPIDemo中的BusLineSearchViewControllerDemo.h可以通过如下方式发起公交线搜索

在返回结果中的routs字段是以QMSBusingRoutePlan类型为元素的NSArray,包含换乘的多种方案。这个类包含每种方案在地图上的范围:bounds;每种方案的距离和预计用时;以及每种方案的具体换乘信息:steps。steps字段是以QMSBusingSegmentRoutePlan类型为元素的NSArray。因为具体的换乘信息可能包含步行路段和乘车路段,这样才能获取完整的换乘信息。所以在解析steps字段的时候,需要判断每个元素的具体类型,才能进行正确的解析。TransitResultObject.Walking这个类的解析和步行的规划结果是类似的。

TQMSBusingSegmentRoutePlan类包含lines字段,是以QMSBusingRouteTransitLine为元素的NSArray,这个类用于表示方案中换乘的公共交通线路的信息,包含:

  • QMSBusingRouteTransitLine.destination 终点站,用于表示乘坐线路的方向
  • QMSBusingRouteTransitLine.distance 距离,单位:米
  • QMSBusingRouteTransitLine.duration 估计用时,单位:分钟
  • QMSBusingRouteTransitLine.getoff QMSBusStation类型表示站点,包含坐标位置location和站名title
  • QMSBusingRouteTransitLine.geton QMSBusStation类型表示站点,包含坐标位置location和站名title
  • QMSBusingRouteTransitLine.id 线路id
  • QMSBusingRouteTransitLine.polyline 路线的坐标点串,用于将线路绘制到地图上,需要注意的是这个只需要取lines中的第一个元素。比如在公交路线中,两个站点间有多条线路选择,而且走的路线时相同的时,就会被归于同一个lines列表中。
  • QMSBusingRouteTransitLine.station_count 本线路中经过的站点数目
  • QMSBusingRouteTransitLine.title 线路名称,如“1”、“地铁1号线”等
  • QMSBusingRouteTransitLine.vehicle 线路类型,“RAIL”,“BUS”,“SUBWAY”三者之一

详细代码参考QMapSearchDemo中的RoutePlanViewController类

效果图如图: