日常出行中,路徑規劃是很重要的部分。使用者想要去往某個地點,獲取到該地點的所有路徑,再根據預估出行時間自行選擇合適的路線,極大方便出行。平時生活中也存在大量使用場景,在出行類App中,根據乘客的目的地可以為使用者規劃合適出行路線和預計到達時間;便捷生活類App中,使用者可以搜尋指定範圍內的周邊服務,檢視去每個服務點的路線;外賣App中,合理進行路徑規劃可以更方便騎手接單送貨。
HMS Core位置服務和地圖服務結合即可實現該功能。可以先使用位置服務的位置搜尋能力,通過指定的關鍵字和可選的地理範圍對周邊的環境進行搜尋,然後再使用地圖服務的路徑規劃能力,展示出到達目的地的路徑。在確定位置時,基於GNSS、Wi-Fi、基站等多種混合定位模式,幫助應用快速、精準地獲取位置資訊。獲取位置資訊後,整合地圖服務,地圖資料可覆蓋超過200個國家和地區,支援數百種語言,全方位提升使用者體驗。不僅如此,地圖服務還可以根據不同的交通工具及實時路況資訊,給出不同路徑規劃方案及預估到達時間。
效果展示
地圖服務提供3種交通工具,駕車、騎行和步行。根據不同的交通工具,能快速計算出幾種合適的路徑規劃方案,給出距離及預估到達時間。
不同交通工具
不僅如此,地圖服務還可以根據路況資訊,提供距離短和速度快這兩種可供選擇的路線偏好,極大提升使用者體驗。
路線偏好設定
開發步驟
整合準備
- AGC賬號註冊,專案建立
1) 註冊成為開發者
註冊地址:請點選連結
2) 建立應用,新增sha256,開啟map/site開關,下載json檔案
- 整合華為地圖服務和位置服務SDK
1) 將“agconnect-services.json”檔案拷貝到應用級根目錄下
• 在“allprojects > repositories”中配置HMS Core SDK的Maven倉地址。
• 在“buildscript > repositories”中配置HMS Core SDK的Maven倉地址。
• 如果App中新增了“agconnect-services.json”檔案則需要在“buildscript > dependencies”中增加agcp配置。
buildscript {
repositories {
maven { url 'https://developer.huawei.com/repo/' }
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.3.2'
classpath 'com.huawei.agconnect:agcp:1.3.1.300'
}
}
allprojects {
repositories {
maven { url 'https://developer.huawei.com/repo/' }
google()
jcenter()
}
}
2) 在“dependencies ”中新增如下編譯依賴
dependencies {
implementation 'com.huawei.hms:maps:{version}'
implementation 'com.huawei.hms:site:{version}'
}
3) 在檔案頭新增配置
apply plugin: 'com.huawei.agconnect'
4) 在android中配置簽名。將生成簽名證書指紋生成的簽名檔案複製到您工程的app目錄下,並在“build.gradle”檔案中配置簽名
signingConfigs {
release {
// 簽名證書
storeFile file("**.**")
// 金鑰庫口令
storePassword "******"
// 別名
keyAlias "******"
// 金鑰口令
keyPassword "******"
v2SigningEnabled true
v2SigningEnabled true
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
debuggable true
}
debug {
debuggable true
}
}
- 專案中用到的主要程式碼及功能
1) 文字搜尋:通過實現位置服務中的textSearch功能實現文字內容搜尋並展示出來。
SearchResultListener<TextSearchResponse> resultListener = new SearchResultListener<TextSearchResponse>() {
// Return search results upon a successful search.
@Override
public void onSearchResult(TextSearchResponse results) {
List<Site> siteList;
if (results == null || results.getTotalCount() <= 0 || (siteList = results.getSites()) == null
|| siteList.size() <= 0) {
resultTextView.setText("Result is Empty!");
return;
}
mFirstAdapter.refresh(siteList);
StringBuilder response = new StringBuilder("\n");
response.append("success\n");
int count = 1;
AddressDetail addressDetail;
Coordinate location;
Poi poi;
CoordinateBounds viewport;
for (Site site : siteList) {
addressDetail = site.getAddress();
location = site.getLocation();
poi = site.getPoi();
viewport = site.getViewport();
response.append(String.format(
"[%s] siteId: '%s', name: %s, formatAddress: %s, country: %s, countryCode: %s, location: %s, poiTypes: %s, viewport is %s \n\n",
"" + (count++), site.getSiteId(), site.getName(), site.getFormatAddress(),
(addressDetail == null ? "" : addressDetail.getCountry()),
(addressDetail == null ? "" : addressDetail.getCountryCode()),
(location == null ? "" : (location.getLat() + "," + location.getLng())),
(poi == null ? "" : Arrays.toString(poi.getPoiTypes())),
(viewport == null ? "" : viewport.getNortheast() + "," + viewport.getSouthwest())));
}
resultTextView.setText(response.toString());
Log.d(TAG, "onTextSearchResult: " + response.toString());
}
// Return the result code and description upon a search exception.
@Override
public void onSearchError(SearchStatus status) {
resultTextView.setText("Error : " + status.getErrorCode() + " " + status.getErrorMessage());
}
};
// Call the place search API.
searchService.textSearch(request, resultListener);
2) 步行路徑規劃:通過呼叫地圖服務的api介面實現資料回撥並呈現在地圖上。
Api文件:請點選連結
NetworkRequestManager.getWalkingRoutePlanningResult(latLng1, latLng2,
new NetworkRequestManager.OnNetworkListener() {
@Override
public void requestSuccess(String result) {
generateRoute(result);
}
@Override
public void requestFail(String errorMsg) {
Message msg = Message.obtain();
Bundle bundle = new Bundle();
bundle.putString("errorMsg", errorMsg);
msg.what = 1;
msg.setData(bundle);
mHandler.sendMessage(msg);
}
});
瞭解更多詳情>>
訪問華為開發者聯盟官網
獲取開發指導文件
華為移動服務開源倉庫地址:GitHub、Gitee
關注我們,第一時間瞭解 HMS Core 最新技術資訊~