乐趣区

关于android:如何用HMS-Core位置和地图服务实现附近地点路径规划功能

日常出行中,门路布局是很重要的局部。用户想要去往某个地点,获取到该地点的所有门路,再依据预估出行工夫自行抉择适合的路线,极大不便出行。平时生存中也存在大量应用场景,在出行类 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);
            }
        });

理解更多详情 >>

拜访位置服务开发者联盟官网

拜访地图服务开发者联盟官网

获取位置服务开发领导文档

获取地图服务开发领导文档

拜访华为开发者联盟官网
获取开发领导文档
华为挪动服务开源仓库地址:GitHub、Gitee

关注咱们,第一工夫理解 HMS Core 最新技术资讯~

退出移动版