如何用HMS Core位置和地圖服務實現附近地點路徑規劃功能

HMSCore發表於2022-05-31

日常出行中,路徑規劃是很重要的部分。使用者想要去往某個地點,獲取到該地點的所有路徑,再根據預估出行時間自行選擇合適的路線,極大方便出行。平時生活中也存在大量使用場景,在出行類App中,根據乘客的目的地可以為使用者規劃合適出行路線和預計到達時間;便捷生活類App中,使用者可以搜尋指定範圍內的周邊服務,檢視去每個服務點的路線;外賣App中,合理進行路徑規劃可以更方便騎手接單送貨。

HMS Core位置服務地圖服務結合即可實現該功能。可以先使用位置服務的位置搜尋能力,通過指定的關鍵字和可選的地理範圍對周邊的環境進行搜尋,然後再使用地圖服務的路徑規劃能力,展示出到達目的地的路徑。在確定位置時,基於GNSS、Wi-Fi、基站等多種混合定位模式,幫助應用快速、精準地獲取位置資訊。獲取位置資訊後,整合地圖服務,地圖資料可覆蓋超過200個國家和地區,支援數百種語言,全方位提升使用者體驗。不僅如此,地圖服務還可以根據不同的交通工具及實時路況資訊,給出不同路徑規劃方案及預估到達時間。

效果展示

地圖服務提供3種交通工具,駕車、騎行和步行。根據不同的交通工具,能快速計算出幾種合適的路徑規劃方案,給出距離及預估到達時間。

不同交通工具

不僅如此,地圖服務還可以根據路況資訊,提供距離短和速度快這兩種可供選擇的路線偏好,極大提升使用者體驗。

路線偏好設定

開發步驟

整合準備

  1. AGC賬號註冊,專案建立

1) 註冊成為開發者

註冊地址:請點選連結

2) 建立應用,新增sha256,開啟map/site開關,下載json檔案

  1. 整合華為地圖服務和位置服務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. 專案中用到的主要程式碼及功能

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);
            }
        });

瞭解更多詳情>>

訪問位置服務開發者聯盟官網

訪問地圖服務開發者聯盟官網

獲取位置服務開發指導文件

獲取地圖服務開發指導文件

訪問華為開發者聯盟官網
獲取開發指導文件
華為移動服務開源倉庫地址:GitHubGitee

關注我們,第一時間瞭解 HMS Core 最新技術資訊~

相關文章