前言

华为Map Kit提供的路径规划API是一套以HTTPS形式提供的步行、骑行、驾车路径规划以及行驶距离计算接口,通过JSON格式返回路径查询数据,提供路径规划能力。

路径规划具体提供如下功能:

步行路径规划 API提供100km以内的步行路径规划能力。

骑行路径规划 API提供100km以内的骑行路径规划能力。

驾车路径规划 API提供驾车路径规划能力,支持以下功能:

-支持一次请求返回多条路线,最多支持3条路线。

-最多支持5个途经点。

-支持未来出行规划。

-支持根据实时路况进行合理路线规划。

场景

用车服务:利用即时和未来出行路线规划为订单提供准确的价格预估。在派单场景中,利高性能批量到达时间预估(ETA)服务,提升派单效率。

物流:利用驾车和骑行路线规划,为支干线物流和末端配送提供准确的路线规划、耗时预估和道路收费预测。

旅游:用户在预定酒店、设计旅游线路时,通过路线规划分析酒店、景点、交通站点之间的路线距离,帮助用户更高效规划行程。

开发前准备

l 路径规划服务使用前,需要在开发者联盟网站上获取API KEY。

说明

如果API KEY包含特殊字符,则需要进行encodeURI编码。例如:原始API KEY:ABC/DFG+ ,转换结果: ABC%2FDFG%2B。

l 在AndroidManifest.xml文件里面申请访问网络权限

代码开发关键步骤

初始化map,用于路径规划结果的展示

private MapFragment mMapFragment;

private HuaweiMap hMap;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_directions);

mMapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.mapfragment_mapfragmentdemo);

mMapFragment.getMapAsync(this);

}

获取用户当前位置,作为路径规划的起点

private void getMyLocation() {

Task locationTask = LocationServices.getFusedLocationProviderClient(this).getLastLocation();

locationTask.addOnCompleteListener(param0 -> {

if (param0 != null) {

Location location = param0.getResult();

double Lat = location.getLatitude();

double Lng = location.getLongitude();

myLocation = new LatLng(Lat, Lng);

Log.d(TAG, " Lat is : " + Lat + ", Lng is : " + Lng);

CameraUpdate CameraUpdate = CameraUpdateFactory.newLatLng(myLocation);

hMap.moveCamera(CameraUpdate);

}

}).addOnFailureListener(param0 -> Log.d(TAG, "lastLocation is error"));

}

添加map长按事件,用于响应用户设定的路径规划终点

hMap.setOnMapLongClickListener(latLng -> {

if (null != mDestinationMarker) {

mDestinationMarker.remove();

}

if (null != mPolylines) {

for (Polyline polyline : mPolylines) {

polyline.remove();

}

}

enableAllBtn();

MarkerOptions options = new MarkerOptions().position(latLng).title("dest");

mDestinationMarker = hMap.addMarker(options);

mDestinationMarker.setAnchor(0.5f,1f);

StringBuilder dest = new StringBuilder(String.format(Locale.getDefault(), "%.6f", latLng.latitude));

dest.append(", ").append(String.format(Locale.getDefault(), "%.6f", latLng.longitude));

((TextInputEditText)findViewById(R.id.dest_input)).setText(dest);

mDest = latLng;

});

根据起点和终点信息,生成路径规划请求

private JSONObject buildRequest() {

JSONObject request = new JSONObject();

try {

JSONObject origin = new JSONObject();

origin.put("lng", myLocation.longitude);

origin.put("lat", myLocation.latitude);

JSONObject destination = new JSONObject();

destination.put("lng", mDest.longitude);

destination.put("lat", mDest.latitude);

request.put("origin", origin);

request.put("destination", destination);

} catch (JSONException e) {

e.printStackTrace();

}

return request;

}

根据路径规划响应,在地图上绘制路径规划结果

JSONObject route = new JSONObject(result);

JSONArray routes = route.optJSONArray("routes");

JSONObject route1 = routes.optJSONObject(0);

JSONArray paths = route1.optJSONArray("paths");

JSONObject path1 = paths.optJSONObject(0);

JSONArray steps = path1.optJSONArray("steps");

for (int i = 0; i < steps.length(); i++) {

PolylineOptions options = new PolylineOptions();

JSONObject step = steps.optJSONObject(i);

JSONArray polyline = step.optJSONArray("polyline");

for (int j = 0; j < polyline.length(); j++) {

JSONObject polyline_t = polyline.optJSONObject(j);

options.add(new LatLng(polyline_t.getDouble("lat"), polyline_t.getDouble("lng")));

}

Polyline pl = hMap.addPolyline(options.color(Color.BLUE).width(3));

mPolylines.add(pl);

}

Demo效果

Github源码

如果你对实现方式感兴趣,可以查看Github上的源码:github.com/HMS-Core/hms-mapkit-demo-java

原作者:胡椒

java 路径规划_应用内路径规划的简单实现相关推荐

  1. matlab文件目录表示,Matlab - 文件目录路径操作_读取不同路径下的相同文件名表格...

    Matlab - 文件目录路径操作_读取不同路径下的相同文件名表格 tr1   str1   for   max   imp   mda   eva   目录   xls clear;clc; clo ...

  2. wxhtmltopdf 图片路径问题_图片引入路径问题

    在这几日的学习中,发现这两种方式的图片引入有一定的差异,和url() 前者定义: 标签的 src 属性是必需的.它的值是图像文件的 URL,也就是引用该图像的文件的的绝对路径或相对路径. 后者定义: ...

  3. java 高德地图路线规划_公交出行路线规划-出行路线规划-开发指南-Android 地图SDK | 高德地图API...

    公交路径规划可以根据起终点和公交换乘的数据,使用 BusRouteOverlay 画出公交路线图层,包括起终点和换乘点.另外也可以自定义起终点和换乘点的图标. 目前支持跨城公交路线规划,提供不同城市之 ...

  4. 货车进货路线问题java代码实现_货车出行路线规划-出行路线规划-开发指南-Android 地图SDK | 高德地图API...

    从搜索功能6.1.0 版本开始支持货车出行路线规划功能,货车出行路线规划的具体策略可参见服务文档. 第 1 步,初始化 RouteSearch 对象 mRouteSearch = new RouteS ...

  5. java swing 组织机构_课内资源 - 基于Java Swing的小型社团成员管理系统

    一.需求分析 1.1 个人信息 学号.姓名.性别.年级.系别.专业.出生日期.联系方式.个性签名.地址.照片. 1.2 基本功能要求管理员信息管理 登录.注销功能 修改密码功能 部落成员信息管理 添加 ...

  6. 中小企业网络安全建设规划_小型企业网络安全规划指南

    中小企业网络安全建设规划 Businesses rely on their networks for their most critical operations and with so much a ...

  7. 使用内连接查询选修了Java程序基础_使用内连接 查询选修了“java程序基础”课程的学生学号、姓名、课程号、课程名和期末成绩_学小易找答案...

    [简答题]BOD5/COD比值说明什么? [单选题]在制图中有一实物的某个尺寸为10,绘图时采用的比例为1:2.标注是应标注( ) [判断题]在表格布局中,有多少列就看最多的一个行中添加多少个控件,直 ...

  8. 基于java酒店管理系统_课内资源 - 基于JAVA实现的互联网酒店管理系统

    1 逻辑视角 互联网酒店管理系统中,选择了分层体系结构的风格,将系统分为3层(展示层.业务逻辑层.数据层)能够很好的示意整个高层抽象.展示层包括GUI页面的实现,业务逻辑层包含业务逻辑处理的实现,数据 ...

  9. flume java 安装部署_[Hadoop] Flume安装部署与简单使用

    1. Flume Flume是一个分布式的日志收集框架,针对日志数据进行采集汇总,把日志从A地方搬运到B地方去. 使用场景: RDBMS ==> Sqoop ==> Hadoop 分散在各 ...

  10. java websocket广播_使用 Spring 对 Websocket 进行简单的消息广播和单播

    最近在做毕业设计,需要用到 Websocket 实现消息的推送. 在 Spring 官网上查看文档,发现 Spring 对 Websocket 的功能进行了太多扩展,引入了 STOMP 和 Broke ...

最新文章

  1. 测试方案_何小伟:ABTest测试方案
  2. How to hide index.php on nginx
  3. pycharm导入python环境是空的_PyCharm导入python项目并配置虚拟环境的教程详解
  4. matlab colorbar采用对数,matlab colorbar的使用 | 學步園
  5. 【转】[完全免费] 在线UML Sequence Diagram 时序图工具 - 教程第3部分
  6. JS传值中文乱码解决方案
  7. 前台如何正确接收流信息_如何绕过 Android 8.0 startService 限制?
  8. ansible 第二次练习
  9. 二维码扫码登陆流程设计
  10. Linux vim字符串替换
  11. fgo服务器中断020202,fgo2.6版本更新 8月18日更新维护内容一览
  12. html 数据可视化
  13. 计算机显存影响什么,纯干货!显存大小究竟有什么用?
  14. 微信小商店设置服务器,微信小商店绑定运营者微信号步骤流程
  15. 做带团长的社区团购吗?必死那种。
  16. 手机rar压缩包密码忘了怎么办,rar压缩包不能复制打印、rar压缩包忘记密码怎么办?
  17. MindManager思维导图画法教程
  18. 订单超时自动取消3种方案——我们用这种!
  19. 涉及数字的英语表示——几点钟、年月日、世纪、年代、年龄
  20. ad被锁定的账户_AD账号频繁被锁定原因

热门文章

  1. Java的身份证号码工具类
  2. PyQt5,资源文件 .qrc 的使用
  3. HTML——超链接、音视频
  4. 递归下降算法语法分析c语言
  5. 异步通信在生活中的例子_通信技术在日常生活中的作用
  6. 如何设计一张合格的日志表
  7. 常见打印机故障有哪些
  8. 《李宗仁回忆录》完整版在线及电子书下载
  9. IP地址是什么?它怎样分类?它和子网掩码的关系是什么?以太网和令牌环网分别是什么?
  10. Java多线程编程-(17)-多线程异步调用之Future模式