本文共 11627 字,大约阅读时间需要 38 分钟。
前言:腾讯位置服务为各类应用厂商和开发者提供领先的LBS服务和解决方案;有针对Web应用的JavaScript API, 适合手机端Native APP的各种SDK, WebService接口,适合小程序的插件和各类地图API等。
目录
接入步骤:(快速通道:)
作为开发者应该如何选择对应的API?
手机组件H5,完整应用,不需要开发者进行开发,——》
位置展示组件,可以在地图上展示一个或多个位置点。数据来源支持三种方式:通过URL传递数据、地图检索数据和自有定制数据。 可以展示每个位置点的名称、地址等详细信息,也可查看该位置点的街景信息或发起到该位置的路线规划。
例如:
调用地址:
https://apis.map.qq.com/tools/poimarker?type=0&marker=coord:39.96554,116.26719;title:成都;addr:北京市海淀区复兴路32号院|coord:39.87803,116.19025;title:成都园;addr:北京市丰台区射击场路15号北京园博园|coord:39.88129,116.27062;title:老成都;addr:北京市丰台区岳各庄梅市口路西府景园六号楼底商|coord:39.9982,116.19015;title:北京园博园成都园;addr:北京市丰台区园博园内&key=yourkey&referer=myapp
用于浏览器端地图显示与应用,兼容手机端及PC端——》
JavaScript API V2可用于在网站中加入交互性强的街景、地图,能很好地支持PC及手机设备,身材小巧,动画效果顺滑流畅,动感十足,提供地图操作、标注、地点搜索、出行规划、地址解析、街景等接口,功能丰富,并免费开放各种附加工具库。JavaScript API V2是免费服务,任何提供免费访问的网站都可以调用。
可视化组件是JSAPI的附加库,在加载JavaScript API服务请求中通过libraries参数指明引入
接口均定义在qq.maps.visualization全局变量中,需在地图初始化完成之后使用
var map = new qq.maps.Map(container, mapOpts);var dots = new qq.maps.visualization.Dots({ map: map});dots.setData(data);
例如:我们要显示以北京的天安门为中心的 603x300 地图:
孙叫兽测试天安门地图
效果:
加载地图API:
方式一:页面直接引入。
方式二:异步加载 JavaScript API
异步加载地图
效果:
有如下功能:
叠加覆盖物 | 强大的附加库 | 定义自己的地图 |
提供点标注、折线、圆、多边形、信息窗 口等覆盖物,用户可以定义个性化地图。 | 提供了鼠标绘制工具箱、几何运算、坐标 转换、文本输入提示等附加库。 | 支持用户可以自定义地图类型,使用自己 的数据或图片,自定义切图、取图规则。 |
腾讯地图定位SDK是一套基于Android 4.1及以上版本设备的应用程序接口。通过该接口,您可以轻松使用腾讯地图定位服务,构建LBS应用程序。
定位SDK包括GPS定位与网络定位,实现了经纬度坐标偏转与当前位置的POI名称、地址或者行政区划的查询。采用了移动缓存策略,节省流量与电量。
定位SDK是提供给具有一定Android编程经验和了解面向对象概念的开发者使用。
本android示例采用后台定位方式:
当用户进程出于后台时,有时也会有需求使用定位服务,但应用处于后台时Android系统会对定位做诸多限制。因此我们通过设置前台Service的方式来提高进程级别,使定位服务由后台转向前台。
1.manifest增加Service声明
2.在启动定位之前,调用enableForegroundLocation
mLocationManager.enableForegroundLocation(LOC_NOTIFICATIONID, buildNotification());mLocationManager.requestLocationUpdates(request, this, getMainLooper());
构建Notification(其中enableForegroundLocation的参数分别是一个整形的NotificationID,一个是Notification的实例。)
private Notification buildNotification() { Notification.Builder builder = null; Notification notification = null; if (android.os.Build.VERSION.SDK_INT >= 26) { //Android O上对Notification进行了修改,如果设置的targetSDKVersion>=26建议使用此种方式创建通知栏 if (notificationManager == null) { notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); } String channelId = getPackageName(); if (!isCreateChannel) {NotificationChannel notificationChannel = new NotificationChannel(channelId, NOTIFICATION_CHANNEL_NAME, NotificationManager.IMPORTANCE_DEFAULT); notificationChannel.enableLights(true);//是否在桌面icon右上角展示小圆点 notificationChannel.setLightColor(Color.BLUE); //小圆点颜色 notificationChannel.setShowBadge(true); //是否在久按桌面图标时显示此渠道的通知 notificationManager.createNotificationChannel(notificationChannel); isCreateChannel = true; } builder = new Notification.Builder(getApplicationContext(), channelId); } else { builder = new Notification.Builder(getApplicationContext()); } builder.setSmallIcon(R.drawable.ic_launcher) .setContentTitle("LocationDemo") .setContentText("正在后台运行") .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher)) .setWhen(System.currentTimeMillis()); if (android.os.Build.VERSION.SDK_INT >= 16) { notification = builder.build(); } else { notification = builder.getNotification(); } return notification;}
3.在停止定位之后,调用disableForegroundLocation停止前台服务
LocationManager.removeUpdates(this);mLocationManager.disableForegroundLocation(true);
权限配置(请在manifest文件下配置如下权限:)
说明:随着Android版本的升级,权限使用方面也有变动,具体可参考实用文档中针对Android各个版本的适配文档。
定位服务是一个重度依赖用户授权的功能,因此在App设计时必须充分考虑获取用户权限的方式,合理引导用户授予权限。
腾讯 iOS 定位 SDK 提供了不依赖于地图定位的定位功能,开发者可以无地图显示的场景中便捷地为应用程序添加定位功能。 iOS定位SDK提供了单次定位、连续定位、逆地理信息等功能。兼容iOS7.0 及以上版本。
定位权限申请
(1) 需要在https://lbs.qq.com/dev/console/key/add上面申请一个apiKey,对应在TencentLBSLocationManager的apiKey属性上设置才可以使用。
(2) 需要在info.plist中追加 NSLocationWhenInUseUsageDescription 或NSLocationAlwaysUsageDescription 字段,以申请定位权限。
(3) allowsBackgroundLocationUpdates表示是否允许后台定位。默认为 NO。只在iOS 9.0 及以后起作用。设置为 YES 的时候必须保证 Background Modes 中的 Location updates 处于选中状态,否则会抛出异常。注意,如果不设置为YES,不需要申请该权限,否则会审核不通过!
引入定位包: 将库文件 TencentLBS.framework 拷贝到您的APP的工程目录下,在Xcode的Target中选择 “Build Phases”->“Link Binary With Libraries”->“Add”->“Add Other…”-> 选择 TencentLBS.framework 目录并添加。
引入系统库文件:仿照上面的操作 ("Add"的时候直接在列表中查找选择 )添加系统库libz.1.2.5.tbd 在 Build Setting - Linking - Other Linker Flags 里 添加 -lstdc++.6.0.9, -lsqlite3(注意:在 Xcode9 以上,不再需要这两个库) 。
- (void)configLocationManager{ self.locationManager = [[TencentLBSLocationManager alloc] init]; [self.locationManager setDelegate:self]; [self.locationManager setApiKey:@"对应于申请的apiKey "]; [self.locationManager setPausesLocationUpdatesAutomatically:NO]; // 需要后台定位的话,可以设置此属性为YES。 [self.locationManager setAllowsBackgroundLocationUpdates:YES]; // 如果需要POI信息的话,根据所需要的级别来设定,定位结果将会根据设定的POI级别来返回,如: [self.locationManager setRequestLevel:TencentLBSRequestLevelName]; // 申请的定位权限,得和在info.list申请的权限对应才有效 CLAuthorizationStatus authorizationStatus = [CLLocationManager authorizationStatus]; if (authorizationStatus == kCLAuthorizationStatusNotDetermined) { [self.locationManager requestWhenInUseAuthorization]; }} // 单次定位- (void)startSingleLocation { [self.locationManager requestLocationWithCompletionBlock: ^(TencentLBSLocation *location, NSError *error) { NSLog(@"%@, %@, %@", location.location, location.name, location.address); }];} // 连续定位- (void)startSerialLocation { //开始定位 [self.locationManager startUpdatingLocation];} - (void)stopSerialLocation { //停止定位 [self.locationManager stopUpdatingLocation];} - (void)tencentLBSLocationManager:(TencentLBSLocationManager *)manager didFailWithError:(NSError *)error { CLAuthorizationStatus authorizationStatus = [CLLocationManager authorizationStatus]; if (authorizationStatus == kCLAuthorizationStatusDenied || authorizationStatus == kCLAuthorizationStatusRestricted) { [self.displayLabel setText:@"定位权限没开启!"]; UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"提示" message:@"定位权限未开启,是否开启?" preferredStyle:UIAlertControllerStyleAlert]; [alert addAction:[UIAlertAction actionWithTitle:@"是" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { if( [[UIApplication sharedApplication]canOpenURL: [NSURL URLWithString:UIApplicationOpenSettingsURLString]] ) { [[UIApplication sharedApplication] openURL: [NSURL URLWithString:UIApplicationOpenSettingsURLString]]; } }]]; [alert addAction:[UIAlertAction actionWithTitle:@"否" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { }]]; [self presentViewController:alert animated:true completion:nil]; } else { [self.displayLabel setText:[NSString stringWithFormat:@"%@", error]]; }} - (void)tencentLBSLocationManager:(TencentLBSLocationManager *)manager didUpdateLocation:(TencentLBSLocation *)location { //定位结果 NSLog(@"location:%@", location.location);}
报错状态提示:
typedef NS_ENUM(NSUInteger, TencentLBSLocationError) { TencentLBSLocationErrorUnknown = 0, //!< 错误码,表示目前位置未知,但是会一直尝试获取 TencentLBSLocationErrorDenied = 1, //!< 错误码,表示定位权限被禁止 TencentLBSLocationErrorNetwork = 2, //!< 错误码,表示网络错误 TencentLBSLocationErrorHeadingFailure = 3, //!< 错误码,表示朝向无法确认 TencentLBSLocationErrorOther = 4, //!< 错误码,未知错误};
用于手机端APP嵌入地图与应用。
安卓3D适用于对地图强依赖场景,如导航、打车、代驾等。也可用于可穿戴设备。2D适用于辅助位置展示场景,如选择发送位置、地址展示、轨迹展示等,建议对包大小敏感的开发者选择用。
AndroidStudio配置
第1步: 获取Key
[点我获取Key>>](/mobile/androidMapSDK/developerGuide/getKey)第2步:创建AndroidStudio项目
在AndroidStudio中创建一个空的Android项目。第3步:在项目中集成SDK
在 AndroidStudio 项目中集成腾讯地图 SDK 主要有两种方式: 1. 手动将腾讯地图 sdk 的 jar 包和 so 库导入到工程 2. 通过 Gradle 配置 maven 或 jcenter 仓库集成 SDK我们更推荐用户使用第二种方式,即,通过 maven 导入腾讯地图 SDK,下面我们详细介绍下两种方式。
通过拷贝 jar 包、so 库添加 SDK
首先,请您在获取腾讯地图 SDK for Andorid 及其 demo。
解压下载的压缩包并拷贝文件
以4.3.4版本的地图功能为例,解压后,得到一个 libs文件夹,该文件夹中包含tencent-mapsdk-release-4.3.4.b8edc92f.jar文件和一个jniLibs文件夹(文件中包含所有的so库文件)将 libs 目录下的"*.jar"文件拷贝到 AndroidStudio 项目对应的 app/libs/ 文件夹下。
点击OK即可,变成下图所示就是导入成功:
IOS自动部署如下:
用户使用腾讯地图 iOS SDK 支持项目开发时,可以通过 Cocoapods 自动部署将 SDK 添加到工程当中。自动部署目前仅支持 腾讯地图 iOS SDK 4.2.6.2 及以上版本。
获取CocoaPods
CocoaPods 是一种支持 Swift 和 Objective-C 项目的第三方库资源管理器,用户可通过 Cocoapods 获取腾讯地图 iOS SDK。
如果您已安装了CocoaPods,请直接跳到第二步:通过CocoaPods安装SDK。
1. 配置 ruby 的软件源
建议通过ruby安装CocoaPods。由于默认的 ruby 的软件源 “” 被墙阻拦导致 CocoaPods 安装失败,因此需要更新一下 ruby 的源。依次执行如下命令:
# 添加 TUNA 源并移除默认源gem sources --add http://mirrors.tencent.com/rubygems/ --remove https://rubygems.org/ #(查看当前ruby的源是否成功更换)gem sources -l
完成上述命令后,显示如下文字则表示更新成功
*** CURRENT SOURCES *** http://mirrors.tencent.com/rubygems/
2. 升级 gem
将 gem 的版本更新到最新确保 Cocoapods 安装成功
sudo gem update --system
3. 安装 Cocoapods
请使用以下命令安装 Cocoapods:
sudo gem install -n /usr/local/bin cocoapods pod setup
注:Cocoapods 安装过程可能会耗时较长,也有可能受网络的状况导致失败,如果安装失败请再次尝试
通过 CocoaPods 安装 SDK
1. 创建 Podfile
在当前 工程文件 (.xcodeproj) 所在文件夹下创建一个名为 Podfile 的文件。Podfile 内容如下:
platform :ios, "8.0" # 手机系统版本target "QMapKitDemo" do # 工程的名字pod 'Tencent-MapSDK' # 地图SDKend #当有多个target时,不同的target也需要各自设置#target "QMapKitDemo1" do # 工程的名字# pod 'Tencent-MapSDK' # 地图SDK#end #target "QMapKitDemo2" do # 工程的名字# pod 'Tencent-MapSDK' # 地图SDK#end
2. 安装SDK
#用于保证本地地图相关 SDK 为最新版 pod repo update #安装 SDKpod install
命令执行成功后,会生成 .xcworkspace 文件,打开.xcworkspace 文件以启动工程(注意:此时不能同时开启.xcodeproj文件,示例:
3. 升级 SDK
若已通过自动部署安装了腾讯地图 iOS SDK,想要更新到最新版本,可在 Podfile 文件所在目录下执行以下指令:
pod repo update # 用于保证本地地图相关SDK为最新版 pod update
4. 安装指定版本 SDK
自动部署目前仅支持地图 iOS SDK 4.2.6.2及以上版本,使用指定版本 SDK,需修改 Podfile 文件,示例:
platform :ios, "8.0" # 手机系统版本target "QMapKitDemo" do # 工程的名字pod 'Tencent-MapSDK', '~> 4.2.6.2' # 在此修改或添加 3D SDK 版本号end
然后执行命令:
#用于保证本地地图相关 SDK 为最新版 pod repo update # 安装 SDKpod install
腾讯地图WebService API 是基于HTTPS/HTTP协议的数据接口,开发者可以使用任何客户端、服务器和开发语言,按照腾讯地图WebService API规范,按需构建HTTPS请求,并获取结果数据(目前支持JSON/JSONP方式返回)。
注意:这个有调用 配额限制说明(其他产品均无调用限制):
腾讯位置服务API Key,在调用时用于唯一标识开发者身份,API KEY是各产品通用的,也就是说同一个Key可以用在地图SDK,也可以用在JavascriptAPI,也可以用在WebServiceAPI以及其它各产品中,可针对不同产品可独立启用(开关)。
假设您的某个Key只会调用地图SDK,可在Key配置界面,将其它产品关闭,以降低安全风险。
在Key设置中,勾中WebService复选框,即为启用产品,该Key才可调用WebServiceAPI服务 未启用时请求服务,会返回:
{ "status": 199, "message": "此key未开启webservice功能" }
示例:
https://apis.map.qq.com/ws/place/v1/search?keyword=酒店&boundary=nearby(39.908491,116.374328,1000)&key=OB4BZ-D4W3U-B7VVO-4PJWW-6TKDJ-WPB77
多种安全策略配置请参考:说明
如果你是某个地点的经营者,所有者等,可以自行申请认证,审核通过即可在地图上展示申请地点,
各类企事业单位、个体工商户,对自己的经营场所、实体店铺希望腾讯地图进行收录的,均可申请商户标注。提交商户标注后,您所填写的信息会被所有用户看到,因此请确认您提交的位置信息符合国家相关法律(例如军事设施,保密地点等信息根据国家相关法律不能提交)。已有商户标注存在有误的,可以提交地点纠错修改。
好啦,本期腾讯位置服务内容就分享到这里,我们下期见!
需要腾讯位置服务可以从下方通道快速进入,填写邀请码获得更多技术支持!
腾讯位置服务注册地址:
邀请码:3Z2RFL3
转载地址:http://kwmof.baihongyu.com/