日常出行中,路径规划是很重要的部分。用户想要去往某个地点,获取到该地点的所有路径,再根据预估出行时间自行选择合适的路线,极大方便出行。平时生活中也存在大量使用场景,在出行类App中,根据乘客的目的地可以为用户规划合适出行路线和预计到达时间;便捷生活类App中,用户可以搜索指定范围内的周边服务,查看去每个服务点的路线;外卖App中,合理进行路径规划可以更方便骑手接单送货。

HMS Core位置服务地图服务结合即可实现该功能。可以先使用位置服务的位置搜索能力,通过指定的关键字和可选的地理范围对周边的环境进行搜索,然后再使用地图服务的路径规划能力,展示出到达目的地的路径。在确定位置时,基于GNSS、Wi-Fi、基站等多种混合定位模式,帮助应用快速、精准地获取位置信息。获取位置信息后,集成地图服务,地图数据可覆盖超过200个国家和地区,支持数百种语言,全方位提升用户体验。不仅如此,地图服务还可以根据不同的交通工具及实时路况信息,给出不同路径规划方案及预估到达时间。

效果展示

地图服务提供3种交通工具,驾车、骑行和步行。根据不同的交通工具,能快速计算出几种合适的路径规划方案,给出距离及预估到达时间。

不同交通工具

不仅如此,地图服务还可以根据路况信息,提供距离短和速度快这两种可供选择的路线偏好,极大提升用户体验。

路线偏好设置

开发步骤

集成准备

  1. AGC账号注册,项目创建
  1. 注册成为开发者

注册地址:请点击链接

  1. 创建应用,添加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()
}
}
  1. 在“dependencies ”中添加如下编译依赖
dependencies {
implementation 'com.huawei.hms:maps:{version}'
implementation 'com.huawei.hms:site:{version}'
}
  1. 在文件头添加配置
apply plugin: 'com.huawei.agconnect'
  1. 在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);
  1. 步行路径规划:通过调用地图服务的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 最新技术资讯~

如何用HMS Core位置和地图服务实现附近地点路径规划功能的更多相关文章

  1. 【HMS Core】集成地图服务不显示地图问题

    ​[问题描述] 关于华为HMS-地图服务不显示地图的问题. 背景:集成华为地图服务运行后页面不显示地图,运行app后不展示地图报错MapsInitializer is not initialized. ...

  2. 别再问WiFi密码了,HMS Core统一扫码服务让手机一键联网

    现代生活离不开网络.在餐厅.商场等公共场所,手机连接WiFi一直是高频使用场景.虽然公共场所的免费WiFi越来越多,但网络连接过程却很麻烦.有的需要打开网页注册或点击广告链接才能上网,还有的要求下载特 ...

  3. 【FAQ】接入HMS Core应用内支付服务过程中一些常见问题总结

    HMS Core应用内支付服务(In-App Purchases,IAP)为应用提供便捷的应用内支付体验和简便的接入流程.开发者的应用集成IAP SDK后,调用IAP SDK接口,启动IAP收银台,即 ...

  4. 【FAQ】干货满满,接入HMS Core应用内支付服务过程中一些常见问题总结(2)来啦

    HMS Core应用内支付服务(In-App Purchases,IAP)为应用提供便捷的应用内支付体验和简便的接入流程.该服务支持客户端和服务端两种开发形式,具体可以参考官方文档 上次,我们分享和总 ...

  5. 基于谷歌地图的Dijkstra算法水路路径规划

    最终效果图如下: 还是图.邻接表,可以模拟出几个对象=>节点.边.路径.三个类分别如下: Node 节点: using System; using System.Collections.Gene ...

  6. 如何用HMS Nearby Service给自己的APP开发一个名片交换功能?

      在工作和生活中,遇见新的同事或者合作伙伴,交换名片是一个常见的用户需求,纸质名片常忘带.易丢失,是客户的一个痛点.因此,市场上出现了很多交换电子名片的APP和小程序.那么,如何给自己的APP开发一 ...

  7. HMS Core挑战赛故事:鞋、街景、手办、玩具,原来这些都可以3D建模

    HMS Core线上Codelabs挑战赛第3期中,开发者通过学习和运用HMS Core开发的3D建模服务,生成3D建模应用demo,再使用demo为自己身边的一个实物完成建模.在提交的作品中,小编发 ...

  8. HMS Toolkit助力开发者高效集成HMS Core

    当你的应用想集成华为HMS Core服务和上线华为应用市场,或当你已经开发了一个Android应用并集成了第三方移动服务,需要迁移使用HMS Core服务和上线华为应用市场的时候,如何快速.便捷.高效 ...

  9. HMS Core Keyring携手航班管家和高铁管家,打造美好出行体验

    高铁管家是国内最早⽀持⼿机⽀付购买⽕⻋票App之⼀,日活用户超380万,为⽤户提供一站式铁路出⾏服务.高铁管家母公司--深圳市活⼒天汇科技股份有限公司是国内智能⼤出⾏的开创者,先后推出航班管家.⾼铁管 ...

随机推荐

  1. java语言和jdk、jre基础

    Java语言平台 * J2SE(Java 2 Platform Standard Edition)标准版  * 是为开发普通桌面和商务应用程序提供的解决方案,该技术体系是其他两者的基础,可以完成一些桌 ...

  2. SpringMVC注解环境搭建

    基本步骤 新建Maven项目(Web) 导入依赖 配置web.xml 配置springmvc配置文件 编写Controller 创建view页面 部署并启动Tomcat 开始搭建 新建Maven项目( ...

  3. 爬虫---scrapy架构和原理

    scrapy是一个为了爬取网站数据, 提取结构性数据而编写的应用框架, 它是基于Twisted框架开发而来, 而Twisted框架是事件驱动的, 比较适合异步代码. 对会阻塞线程的操作, 包括访问数据 ...

  4. 两数之和_LeetCode_1

    LeetCode_1原题链接:https://leetcode-cn.com/problems/two-sum/ 剑指 Offer 57原题链接: https://leetcode-cn.com/pr ...

  5. 从乘法求导法则到BPTT算法

    本文为手稿,旨在搞清楚为什么BPTT算法会多路反向求导,而不是一个感性的认识. 假设我们要对E3求导(上图中的L3),那么则有: 所以S2是W的函数,也就是说,我们不能说: 因为WS2 = WS2(w ...

  6. Adobe Xd 练习

    作业要求: 我的work: 下载练习: 2020_3/work.xd 参考教程: https://www.youtube.com/watch?v=dbpGJU4WL1U

  7. 安卓记账本开发学习day8之导入外部依赖

    以要使用的柱状图分析显示为例,项目文件夹最外层的build.gradle,加入下列语句 allprojects { repositories { google() jcenter() maven { ...

  8. 【面试普通人VS高手系列】CPU飙高系统反应慢怎么排查?

    面试过程中,场景类的问题更容易检测出一个开发人员的基本能力. 这不,一个小伙伴去阿里面试,第一面就遇到了关于"CPU飙高系统反应慢怎么排查"的问题? 对于这个问题,我们来看看普通人 ...

  9. Azure DevOps (十) 通过流水线完成Docker镜像的部署

    上一篇文章中,我们通过azure的流水线完成了镜像推送到镜像仓库中去,本篇文章我们继续开始完成下一步,通过流水线把镜像从仓库拉取到任意一台公网的服务器上去, 完成镜像部署的闭环. 首先我们需要先准备一 ...

  10. 20202127 实验二《Python程序设计》实验报告

    20202127 2021-2022-2 <Python程序设计>实验二报告 课程:<Python程序设计>班级: 2021姓名: 马艺洲学号:20202127实验教师:王志强 ...