前言:騰訊位置服務為各類應用廠商和開發者提供領先的LBS服務和解決方案;有針對Web應用的JavaScript API, 適合手機端Native APP的各種SDK, WebService介面,適合小程式的插件和各類地圖API等,

目錄
接入指南
地圖組件(H5)
地圖javaScript API
定位SDK (Android定位 SDK | IOS定位 SDK)
地圖SDK(Android地圖SDK | IOS地圖SDK)
WebService API:參考檔案
地主認證通道:
常見問題
騰訊位置服務控制臺
行業解決方案
騰訊位置服務技術教程
騰訊位置特色產品實體
接入指南
接入步驟:(快速通道:騰訊位置官網)

作為開發者應該如何選擇對應的API?
地圖組件(H5)
手機組件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
地圖javaScript API
用于瀏覽器端地圖顯示與應用,兼容手機端及PC端——》參考檔案
JavaScript API V2可用于在網站中加入互動性強的街景、地圖,能很好地支持PC及手機設備,身材小巧,影片效果順滑流暢,動感十足,提供地圖操作、標注、地點搜索、出行規劃、地址決議、街景等介面,功能豐富,并免費開放各種附加工具庫,JavaScript API V2是免費服務,任何提供免費訪問的網站都可以呼叫,
可視化組件是JSAPI的附加庫,在加載JavaScript API服務請求中通過libraries引數指明引入
<script charset=“utf-8” src=“https://map.qq.com/api/js?v=2.exp&key=YOUR_KEY&libraries=visualization”>
介面均定義在qq.maps.visualization全域變數中,需在地圖初始化完成之后使用
var map = new qq.maps.Map(container, mapOpts);
var dots = new qq.maps.visualization.Dots({
map: map
});
dots.setData(data);
例如:我們要顯示以北京的天安門為中心的 603x300 地圖:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>孫叫獸測驗天安門地圖</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
<style type="text/css">
html,body{
width:100%;
height:100%;
}
*{
margin:0px;
padding:0px;
}
body, button, input, select, textarea {
font: 12px/16px Verdana, Helvetica, Arial, sans-serif;
}
p{
width:603px;
padding-top:3px;
overflow:hidden;
}
.btn{
width:142px;
}
#container{
width:100%;
height:100%;
}
</style>
<script charset="utf-8" src="https://map.qq.com/api/js?v=2.exp&key=OB4BZ-D4W3U-B7VVO-4PJWW-6TKDJ-WPB77"></script>
<script>
window.onload = function(){
//直接加載地圖
//初始化地圖函式 自定義函式名init
function init() {
//定義map變數 呼叫 qq.maps.Map() 建構式 獲取地圖顯示容器
var map = new qq.maps.Map(document.getElementById("container"), {
center: new qq.maps.LatLng(39.916527,116.397128), // 地圖的中心地理坐標,
zoom:8 // 地圖的中心地理坐標,
});
}
//呼叫初始化函式地圖
init();
}
</script>
</head>
<body>
<!-- 定義地圖顯示容器 -->
<div id="container"></div>
</body>
</html>
效果:

加載地圖API:
方式一:頁面直接引入,
<script charset="utf-8" src="https://map.qq.com/api/js?v=2.exp&key=OB4BZ-D4W3U-B7VVO-4PJWW-6TKDJ-WPB77"></script>
方式二:異步加載 JavaScript API
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>異步加載地圖</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
<style type="text/css">
html,body{
width:100%;
height:100%;
}
*{
margin:0px;
padding:0px;
}
body, button, input, select, textarea {
font: 12px/16px Verdana, Helvetica, Arial, sans-serif;
}
p{
width:603px;
padding-top:3px;
overflow:hidden;
}
#container{
width:100%;
height:100%;
}
.btn{
width:142px;
}
</style>
<script>
function init() {
//設定地圖中心點
var myLatlng = new qq.maps.LatLng(39.916527,116.397128);
//定義工廠模式函式
var myOptions = {
zoom: 8, //設定地圖縮放級別
center: myLatlng, //設定中心點樣式
mapTypeId: qq.maps.MapTypeId.ROADMAP //設定地圖樣式詳情參見MapType
}
//獲取dom元素添加地圖資訊
var map = new qq.maps.Map(document.getElementById("container"), myOptions);
}
//異步加載地圖庫函式檔案
function loadScript() {
//創建script標簽
var script = document.createElement("script");
//設定標簽的type屬性
script.type = "text/javascript";
//設定標簽的鏈接地址
script.src = "https://map.qq.com/api/js?v=2.exp&key=OB4BZ-D4W3U-B7VVO-4PJWW-6TKDJ-WPB77&callback=init";
//添加標簽到dom
document.body.appendChild(script);
}
window.onload = loadScript; // dom檔案加載結束開始加載 此段代碼
</script>
</head>
<body>
<div id="container"></div>
</body>
</html>
效果:

有如下功能:
| 疊加覆寫物 | 強大的附加庫 | 定義自己的地圖 |
| 提供點標注、折線、圓、多邊形、資訊窗 口等覆寫物,用戶可以定義個性化地圖, | 提供了滑鼠繪制工具箱、幾何運算、坐標 轉換、文本輸入提示等附加庫, | 支持用戶可以自定義地圖型別,使用自己 的資料或圖片,自定義切圖、取圖規則, |
定位SDK (Android定位 SDK | IOS定位 SDK)
騰訊地圖定位SDK是一套基于Android 4.1及以上版本設備的應用程式介面,通過該介面,您可以輕松使用騰訊地圖定位服務,構建LBS應用程式,
定位SDK包括GPS定位與網路定位,實作了經緯度坐標偏轉與當前位置的POI名稱、地址或者行政區劃的查詢,采用了移動快取策略,節省流量與電量,
定位SDK是提供給具有一定Android編程經驗和了解面向物件概念的開發者使用,
本android示例采用后臺定位方式:
當用戶行程出于后臺時,有時也會有需求使用定位服務,但應用處于后臺時Android系統會對定位做諸多限制,因此我們通過設定前臺Service的方式來提高行程級別,使定位服務由后臺轉向前臺,
1.manifest增加Service宣告
<service android:name="com.tencent.map.geolocation.s" />
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檔案下配置如下權限:)
<!-- 通過GPS得到精確位置 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- 通過網路得到粗略位置 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- 訪問網路. 某些位置資訊需要從網路服務器獲取 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 訪問WiFi狀態. 需要WiFi資訊用于網路定位 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- 修改WiFi狀態. 發起WiFi掃描, 需要WiFi資訊用于網路定位 -->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<!-- 訪問網路狀態, 檢測網路的可用性. 需要網路運營商相關資訊用于網路定位 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 訪問網路的變化, 需要某些資訊用于網路定位 -->
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<!-- 訪問手機當前狀態, 需要device id用于網路定位 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!-- 支持A-GPS輔助定位 -->
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<!-- 用于 log 日志 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
說明:隨著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, //!< 錯誤碼,未知錯誤
};
地圖SDK(Android地圖SDK | IOS地圖SDK)
用于手機端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/ 檔案夾下,

右鍵該jar包,選擇add as library,彈出如下視窗:
點擊OK即可,變成下圖所示就是匯入成功: 
- 將 jniLibs 目錄下的所有檔案按照原目錄格式,拷貝到AndroidStudio專案對應的 app/src/main/jniLibs/ 目錄下,

騰訊地圖Android SDK還提供了地圖組件庫TencentMapUtils,目前地圖組件包含了點聚合組件、小車平滑移動組件, 組件
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 的軟體源 “http://mirrors.tencent.com/rubygems/” 被墻阻攔導致 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' # 地圖SDK
end
#當有多個target時,不同的target也需要各自設定
#target "QMapKitDemo1" do # 工程的名字
# pod 'Tencent-MapSDK' # 地圖SDK
#end
#target "QMapKitDemo2" do # 工程的名字
# pod 'Tencent-MapSDK' # 地圖SDK
#end
2. 安裝SDK
#用于保證本地地圖相關 SDK 為最新版
pod repo update
#安裝 SDK
pod 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
# 安裝 SDK
pod install
WebService API:參考檔案
騰訊地圖WebService API 是基于HTTPS/HTTP協議的資料介面,開發者可以使用任何客戶端、服務器和開發語言,按照騰訊地圖WebService API規范,按需構建HTTPS請求,并獲取結果資料(目前支持JSON/JSONP方式回傳),
注意:這個有呼叫 配額限制說明(其他產品均無呼叫限制):https://lbs.qq.com/service/webService/webServiceGuide/webServiceQuota
騰訊位置服務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
多種安全策略配置請參考:安全策略說明
地主認證通道:
如果你是某個地點的經營者,所有者等,可以自行申請認證,審核通過即可在地圖上展示申請地點,入口
各類企事業單位、個體工商戶,對自己的經營場所、物體店鋪希望騰訊地圖進行收錄的,均可申請商戶標注,提交商戶標注后,您所填寫的資訊會被所有用戶看到,因此請確認您提交的位置資訊符合國家相關法律(例如軍事設施,保密地點等資訊根據國家相關法律不能提交),已有商戶標注存在有誤的,可以提交地點糾錯修改,


常見問題
地主認證常見問題

接入認證常見問題

騰訊位置服務控制臺
一文帶你了解騰訊位置服務的開發與接入
行業解決方案
參考檔案

騰訊位置服務技術教程
參考檔案

騰訊位置特色產品實體
參考檔案

好啦,本期騰訊位置服務內容就分享到這里,我們下期見!
需要騰訊位置服務可以從下方通道快速進入,填寫邀請碼獲得更多技術支持!
騰訊位置服務注冊地址:https://lbs.qq.com?lbs_invite=3Z2RFL3
邀請碼:3Z2RFL3
CSDN認證博客專家
HTTPS
Node.js
JavaScript
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/240562.html
標籤:其他
上一篇:C#開發Android App--05--獲取加速度傳感器資料并顯示在textView控制元件上面
下一篇:求助,wifi控制
