java 路径规划_应用内路径规划的简单实现
前言
华为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 路径规划_应用内路径规划的简单实现相关推荐
- matlab文件目录表示,Matlab - 文件目录路径操作_读取不同路径下的相同文件名表格...
Matlab - 文件目录路径操作_读取不同路径下的相同文件名表格 tr1 str1 for max imp mda eva 目录 xls clear;clc; clo ...
- wxhtmltopdf 图片路径问题_图片引入路径问题
在这几日的学习中,发现这两种方式的图片引入有一定的差异,和url() 前者定义: 标签的 src 属性是必需的.它的值是图像文件的 URL,也就是引用该图像的文件的的绝对路径或相对路径. 后者定义: ...
- java 高德地图路线规划_公交出行路线规划-出行路线规划-开发指南-Android 地图SDK | 高德地图API...
公交路径规划可以根据起终点和公交换乘的数据,使用 BusRouteOverlay 画出公交路线图层,包括起终点和换乘点.另外也可以自定义起终点和换乘点的图标. 目前支持跨城公交路线规划,提供不同城市之 ...
- 货车进货路线问题java代码实现_货车出行路线规划-出行路线规划-开发指南-Android 地图SDK | 高德地图API...
从搜索功能6.1.0 版本开始支持货车出行路线规划功能,货车出行路线规划的具体策略可参见服务文档. 第 1 步,初始化 RouteSearch 对象 mRouteSearch = new RouteS ...
- java swing 组织机构_课内资源 - 基于Java Swing的小型社团成员管理系统
一.需求分析 1.1 个人信息 学号.姓名.性别.年级.系别.专业.出生日期.联系方式.个性签名.地址.照片. 1.2 基本功能要求管理员信息管理 登录.注销功能 修改密码功能 部落成员信息管理 添加 ...
- 中小企业网络安全建设规划_小型企业网络安全规划指南
中小企业网络安全建设规划 Businesses rely on their networks for their most critical operations and with so much a ...
- 使用内连接查询选修了Java程序基础_使用内连接 查询选修了“java程序基础”课程的学生学号、姓名、课程号、课程名和期末成绩_学小易找答案...
[简答题]BOD5/COD比值说明什么? [单选题]在制图中有一实物的某个尺寸为10,绘图时采用的比例为1:2.标注是应标注( ) [判断题]在表格布局中,有多少列就看最多的一个行中添加多少个控件,直 ...
- 基于java酒店管理系统_课内资源 - 基于JAVA实现的互联网酒店管理系统
1 逻辑视角 互联网酒店管理系统中,选择了分层体系结构的风格,将系统分为3层(展示层.业务逻辑层.数据层)能够很好的示意整个高层抽象.展示层包括GUI页面的实现,业务逻辑层包含业务逻辑处理的实现,数据 ...
- flume java 安装部署_[Hadoop] Flume安装部署与简单使用
1. Flume Flume是一个分布式的日志收集框架,针对日志数据进行采集汇总,把日志从A地方搬运到B地方去. 使用场景: RDBMS ==> Sqoop ==> Hadoop 分散在各 ...
- java websocket广播_使用 Spring 对 Websocket 进行简单的消息广播和单播
最近在做毕业设计,需要用到 Websocket 实现消息的推送. 在 Spring 官网上查看文档,发现 Spring 对 Websocket 的功能进行了太多扩展,引入了 STOMP 和 Broke ...
最新文章
- 测试方案_何小伟:ABTest测试方案
- How to hide index.php on nginx
- pycharm导入python环境是空的_PyCharm导入python项目并配置虚拟环境的教程详解
- matlab colorbar采用对数,matlab colorbar的使用 | 學步園
- 【转】[完全免费] 在线UML Sequence Diagram 时序图工具 - 教程第3部分
- JS传值中文乱码解决方案
- 前台如何正确接收流信息_如何绕过 Android 8.0 startService 限制?
- ansible 第二次练习
- 二维码扫码登陆流程设计
- Linux vim字符串替换
- fgo服务器中断020202,fgo2.6版本更新 8月18日更新维护内容一览
- html 数据可视化
- 计算机显存影响什么,纯干货!显存大小究竟有什么用?
- 微信小商店设置服务器,微信小商店绑定运营者微信号步骤流程
- 做带团长的社区团购吗?必死那种。
- 手机rar压缩包密码忘了怎么办,rar压缩包不能复制打印、rar压缩包忘记密码怎么办?
- MindManager思维导图画法教程
- 订单超时自动取消3种方案——我们用这种!
- 涉及数字的英语表示——几点钟、年月日、世纪、年代、年龄
- ad被锁定的账户_AD账号频繁被锁定原因