Android百度地图——路径规划(驾车、步行和公交线路搜索)

ubuntu18.04试玩openproject 教程及其简单,对于第一次搭建的人来说,顶多半天时间可以完全搭建好! 因为官方给了安装包,安装步骤只有简单的几步! 官网:https://www.openproject.org/download-and-installation/#installation 安装过于简单,看官网就行,关键说说我遇到的一些问题: 1.kvm创建虚拟机一直识别不了磁盘, 我怀疑是没加这个参数,建议多看man文档... 阅读详情

前段时间公司项目比较忙,百度地图这块拖了好久了,这篇续前面几篇有关百度地图的。好了废话不多说,今天要聊的是有关路径规划的,如何使用百度地图搜索驾车、步行和公交路线并标注在地图上。这篇是基于Android百度地图——搜索服务之周边检索,有什么不清楚的请查看前面的几篇博文。路径规划:从那里到那里的线路规划,比如:从上海市盛夏路益江路到陆家嘴的驾车、步行和公交路线。

一、从那里到那里:

        1、起始地点:

 // 上海市盛夏路益江路的GPS纬度经度值:121.637942,31.205889 
        MKPlanNode start = new MKPlanNode();
        start.pt = new GeoPoint((int) (31.205889 * 1E6), (int) (121.637942 * 1E6));

        2、目的地点:

 // 上海市陆家嘴的GPS纬度经度值: 121.509075,31.243319 
        MKPlanNode end = new MKPlanNode();
        end.pt = new GeoPoint( (int) (31.243319 * 1E6), (int) (121.509075 * 1E6));

        注:获取地点的GPS值可以到http://api.map.baidu.com/lbsapi/getpoint/index.html查询,要注意拿到的值的顺序,获取到的值是经纬度(也就是说第一个表示的是经度值,第二个表示的是纬度值)。而我们在地图上查找或标注时使用的顺序是GPS纬度经度值,因此记得调整顺序,不然在百度地图上就显示不出来。

二、如何到达,怎样到达:

        1、驾车线路:

            驾乘检索策略常量:时间优先

mMKSearch.setDrivingPolicy(MKSearch.ECAR_TIME_FIRST);
        mMKSearch.drivingSearch(null, start, null, end);

            驾乘检索策略常量:较少费用

mMKSearch.setDrivingPolicy(MKSearch.ECAR_FEE_FIRST);
        mMKSearch.drivingSearch(null, start, null, end);

            驾乘检索策略常量:最短距离

mMKSearch.setDrivingPolicy(MKSearch.ECAR_DIS_FIRST);
        mMKSearch.drivingSearch(null, start, null, end);

获取结果并展示时,需要实现MKSearchListener接口中的onGetDrivingRouteResult方法 :

    @Override
            public void onGetDrivingRouteResult(MKDrivingRouteResult result, int arg1) {
                if (result == null)
                    return;
                
                RouteOverlay routeOverlay = new RouteOverlay(BaiduMapRouteOverlayActivity.this, mMapView);   
                
                routeOverlay.setData(result.getPlan(0).getRoute(0)); 
                mMapView.getOverlays().add(routeOverlay);
                mMapView.refresh();//刷新地图
                
            }

        2、步行线路:

 // 步行线路搜索
        mMKSearch.walkingSearch(null, start, null, end);


获取结果并展示时,需要实现MKSearchListener接口中的onGetWalkingRouteResult方法

 @Override
            public void onGetWalkingRouteResult(MKWalkingRouteResult result, int arg1) {
                // TODO Auto-generated method stub
            	 RouteOverlay routeOverlay = new RouteOverlay(BaiduMapRouteOverlayActivity.this, mMapView);   
                 routeOverlay.setData(result.getPlan(0).getRoute(0)); 
                 mMapView.getOverlays().add(routeOverlay);
                 mMapView.refresh();//刷新地图
            }

 

        3、公交线路:

公交线路搜索的方法为transitSearch(String city, MKPlanNode start, MKPlanNode end),city:为待查公交线路所在城市,start和end分别是起点和终点;获取结果的方法改为重写onGetTransitRouteResult方法。

      // 公交线路搜索
        mMKSearch.transitSearch("上海市", start, end);

获取结果:

  @Override
            public void onGetTransitRouteResult(MKTransitRouteResult result, int arg1) {
            	 RouteOverlay routeOverlay = new RouteOverlay(BaiduMapRouteOverlayActivity.this, mMapView);   
                 routeOverlay.setData(result.getPlan(0).getRoute(0)); 
                 mMapView.getOverlays().add(routeOverlay);
                 mMapView.refresh();//刷新地图
                 
            }

四、完整代码:

package com.android.baidu.map;

import android.app.Activity;
import android.content.Context;
import android.content.res.Configuration;
import android.os.Bundle;
import android.widget.Toast;

import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.MKGeneralListener;
import com.baidu.mapapi.map.MKEvent;
import com.baidu.mapapi.map.MapController;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.RouteOverlay;
import com.baidu.mapapi.search.MKAddrInfo;
import com.baidu.mapapi.search.MKBusLineResult;
import com.baidu.mapapi.search.MKDrivingRouteResult;
import com.baidu.mapapi.search.MKPlanNode;
import com.baidu.mapapi.search.MKPoiResult;
import com.baidu.mapapi.search.MKSearch;
import com.baidu.mapapi.search.MKSearchListener;
import com.baidu.mapapi.search.MKSuggestionResult;
import com.baidu.mapapi.search.MKTransitRouteResult;
import com.baidu.mapapi.search.MKWalkingRouteResult;
import com.baidu.platform.comapi.basestruct.GeoPoint;

public class BaiduMapRouteOverlayActivity extends Activity {

	public static final String BAIDU_MAP_KEY = "07418AEC69BAAB7104C6230A6120C580DFFAEEBB";

	private BMapManager mMapManager = null;

	private MapView mMapView = null;

	private MKSearch mMKSearch = null;

	private Context mContext;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		mContext = BaiduMapRouteOverlayActivity.this.getApplicationContext();

		mMapManager = new BMapManager(getApplicationContext());
		mMapManager.init(BAIDU_MAP_KEY, new MKGeneralListener() {

			@Override
			public void onGetNetworkState(int errorCode) {
				if (errorCode == MKEvent.ERROR_NETWORK_CONNECT) {
					Toast.makeText(mContext, "您的网络出错啦!", Toast.LENGTH_LONG)
							.show();
				}
			}

			@Override
			public void onGetPermissionState(int errorCode) {
				if (errorCode == MKEvent.ERROR_PERMISSION_DENIED) {
					// 授权Key错误:
					Toast.makeText(mContext,
							"请在 DemoApplication.java文件输入正确的授权Key!",
							Toast.LENGTH_LONG).show();
				}
			}
		});

		setContentView(R.layout.main);

		mMapView = (MapView) this.findViewById(R.id.bmapsView);
		mMapView.setBuiltInZoomControls(true);

		MapController mMapController = mMapView.getController();
		// 上海市的GPS纬度经度值:31.243319,121.509075
		GeoPoint geoPoint = new GeoPoint((int) (31.243319 * 1E6),
				(int) (121.509075 * 1E6));
		mMapController.setCenter(geoPoint);
		mMapController.setZoom(12);

		// 检索从上海市盛夏路益江路到陆家嘴的驾车路线

		// 上海市盛夏路益江路的GPS纬度经度值:121.637942,31.205889
		MKPlanNode start = new MKPlanNode();
		start.pt = new GeoPoint((int) (31.205889 * 1E6),
				(int) (121.637942 * 1E6));

		// 上海市陆家嘴的GPS纬度经度值: 121.509075,31.243319
		MKPlanNode end = new MKPlanNode();
		end.pt = new GeoPoint((int) (31.243319 * 1E6), (int) (121.509075 * 1E6));

		mMKSearch = new MKSearch();
		mMKSearch.init(mMapManager, new MKSearchListener() {

			@Override
			public void onGetAddrResult(MKAddrInfo arg0, int arg1) {
				// TODO Auto-generated method stub

			}

			@Override
			public void onGetBusDetailResult(MKBusLineResult arg0, int arg1) {
				// TODO Auto-generated method stub

			}

			@Override
			public void onGetDrivingRouteResult(MKDrivingRouteResult result,
					int arg1) {
				if (result == null)
					return;

				RouteOverlay routeOverlay = new RouteOverlay(
						BaiduMapRouteOverlayActivity.this, mMapView);
				routeOverlay.setData(result.getPlan(0).getRoute(0));
				mMapView.getOverlays().add(routeOverlay);
				mMapView.refresh();// 刷新地图

			}

			@Override
			public void onGetPoiDetailSearchResult(int arg0, int arg1) {
				// TODO Auto-generated method stub

			}

			@Override
			public void onGetPoiResult(MKPoiResult arg0, int arg1, int arg2) {
				// TODO Auto-generated method stub

			}

			@Override
			public void onGetSuggestionResult(MKSuggestionResult arg0, int arg1) {
				// TODO Auto-generated method stub

			}

			@Override
			public void onGetTransitRouteResult(MKTransitRouteResult result,
					int arg1) {
				RouteOverlay routeOverlay = new RouteOverlay(
						BaiduMapRouteOverlayActivity.this, mMapView);
				routeOverlay.setData(result.getPlan(0).getRoute(0));
				mMapView.getOverlays().add(routeOverlay);
				mMapView.refresh();// 刷新地图

			}

			@Override
			public void onGetWalkingRouteResult(MKWalkingRouteResult result,
					int arg1) {
				// TODO Auto-generated method stub
				RouteOverlay routeOverlay = new RouteOverlay(
						BaiduMapRouteOverlayActivity.this, mMapView);
				routeOverlay.setData(result.getPlan(0).getRoute(0));
				mMapView.getOverlays().add(routeOverlay);
				mMapView.refresh();// 刷新地图
			}

		});

		// 设置驾车路线搜索策略,时间优先、费用最少或距离最短

		/*
		 * // 驾乘检索策略常量:时间优先
		 * mMKSearch.setDrivingPolicy(MKSearch.ECAR_TIME_FIRST);
		 * mMKSearch.drivingSearch(null, start, null, end);
		 * 
		 * // 驾乘检索策略常量:较少费用 mMKSearch.setDrivingPolicy(MKSearch.ECAR_FEE_FIRST);
		 * mMKSearch.drivingSearch(null, start, null, end);
		 * 
		 * // 驾乘检索策略常量:最短距离 mMKSearch.setDrivingPolicy(MKSearch.ECAR_DIS_FIRST);
		 * mMKSearch.drivingSearch(null, start, null, end);
		 */

		// 步行线路搜索
		mMKSearch.walkingSearch(null, start, null, end);

		// 公交线路搜索
		// mMKSearch.transitSearch("上海市", start, end);

	}

	@Override
	public void onConfigurationChanged(Configuration newConfig) {
		super.onConfigurationChanged(newConfig);
	}

	@Override
	protected void onSaveInstanceState(Bundle outState) {
		super.onSaveInstanceState(outState);
		mMapView.onSaveInstanceState(outState);
	}

	@Override
	protected void onRestoreInstanceState(Bundle savedInstanceState) {
		super.onRestoreInstanceState(savedInstanceState);
		mMapView.onRestoreInstanceState(savedInstanceState);
	}

	@Override
	protected void onResume() {
		mMapView.onResume();

		if (mMapManager != null) {
			mMapManager.start();
		}

		super.onResume();
	}

	@Override
	protected void onPause() {
		mMapView.onPause();
		if (mMapManager != null) {
			mMapManager.stop();
		}
		super.onPause();
	}

	@Override
	protected void onDestroy() {
		mMapView.destroy();
		if (mMapManager != null) {
			mMapManager.destroy();
			mMapManager = null;
		}
		super.onDestroy();
	}

}


 

OpenProject容器化部署实战与核心功能解析 本文详细介绍了OpenProject容器化部署的实战步骤与核心功能解析。从Docker环境准备、持久化存储配置到容器启动与优化,提供了完整的部署指南。同时深入解析了OpenProject的工作包管理系统、甘特图与敏捷看板等核心功能,帮助团队高效实现项目管理与协作。 阅读详情

相关推荐

Docker一键部署OpenProject:中小团队项目管理破局指南

项目管理平台是支撑需求跟踪、任务协同、进度可视化与工时分析的核心基础设施。其本质是将非结构化协作(如微信/Excel)升级为数据关联、状态可溯、权限可控的工程化流程。OpenProject作为开源可私有化部署的专业级平台,填补了Jira太重、TAPD不自主、Excel难追溯的中间空白;结合Docker容器化部署,实现5分钟快速落地、环境一致、配置即代码。本文聚焦中小技术团队真实痛点,详解如何用标准化镜像与声明式编排,构建高可用、易维护、全链路贯通的一体化项目管理环境。

weixin_33868027的博客 524

Android 百度地图SDK(三)路线规划

智能的实时和未来出行路线规划,更精准的路线选择和耗时预测支持驾车、跨城公交、骑行(含电动车)、步行多种智能出行方式满足用车、物流、外卖、旅游、交通等各行业个性化路线诉求主要讲解, 步行,自驾,公交、骑行等路线规划。

开启高效项目管理之旅 - OpenProject

OpenProject是一款功能强大的开源项目管理软件,支持项目规划、任务管理、敏捷开发、时间跟踪等核心功能,适用于各类团队协作。提供14天免费试用、社区版和企业版三种使用方式,并有详细文档和培训支持。相比Redmine、Trello等同类工具,OpenProject以全面功能和灵活部署著称,是提升团队效率的理想选择。

weixin_44626085的博客 624

百度地图路径规划API调用示例(python)

计算了两天内两个地点之间的通行时间,寻找最短出行时长的时间段!

weixin_48857697的博客 2526

保姆级教程:用Nginx Proxy Manager给OpenProject配置HTTPS反向代理,解决422登录错误

本文详细介绍了如何使用Nginx Proxy Manager为OpenProject配置HTTPS反向代理,并解决常见的CSRF 422登录错误。通过环境准备、基础配置、高级Nginx设置及安全加固,确保OpenProject在生产环境中稳定运行,适合企业级部署需求。

weixin_30394981的博客 499

别再折腾Docker了!4G小内存群晖也能丝滑运行OpenProject社区版(附避坑指南)

本文详细介绍了在4G内存的群晖NAS上轻量化部署OpenProject社区版的完整方案,包括系统级优化、Docker容器调参和性能调优技巧。通过内存分配策略调整、熵池问题解决和存储卷优化,实现在低配硬件上丝滑运行OpenProject,适合个人开发者和小团队使用。

weixin_30301449的博客 268

百度地图之多点步行路径连线问题

1:两点间步行实例:http://www.6969g.com body, html,#allmap {width: 100%;height: 100%;overflow: hidden;margin:0;} 您的密钥"> 步行导航检索 var map = new BMap.Map("allmap"); map.centerAndZoom

w561cn的专栏 5820

OpenProject Docker私有化部署实战:告别Excel协作断层

项目管理工具的本质是建立团队对任务状态、责任归属和数据依赖的统一认知。传统Excel因缺乏数据库支撑、操作留痕与工作流引擎,天然导致状态不一致、责任难追溯、甘特图失真等协作断层。OpenProject以开源+私有化部署为核心,通过Docker容器化实现开箱即用的权限体系、审计日志与实时依赖计算,兼顾安全性与可控性。它不仅替代Excel的表格功能,更重构了任务生命周期管理逻辑——从状态变更自动通知、工时强制登记,到跨项目资源透视,让项目数据真正成为可分析、可追溯、可驱动决策的组织资产。

weixin_31236101的博客 351

Android开发百度地图路径规划

在集成百度地图路径规划的时候遇到一些坑,还好解决了,特此记录一下,话不多说了,上步骤。 默认已经集成地图。 先看效果图 背景地图已通过添加图片打码. 1.初始化 private void initGh() { OnGetRoutePlanResultListener listener = new OnGetRoutePlanResultListener() { @Override public void onGetWalkingRouteResult.

lian123456780的博客 1398

OpenProject Docker 部署实战:47分钟跑通甘特图

甘特图是项目管理中可视化任务依赖与进度的核心技术,其背后依赖于可靠的后端服务编排与时间轴计算引擎。OpenProject 作为开源项目管理平台,原生支持交互式甘特图,但部署难点常集中在 Docker 环境适配、多容器协同及时区/依赖配置等底层环节。本文聚焦开源项目管理工具的轻量级落地实践,基于 Docker Engine(非 Desktop)与 docker-compose 实现高兼容性部署,覆盖 Ubuntu 系统加固、PostgreSQL/Redis 服务拆分、时区同步、任务起止日期校验等关键原理,显著

weixin_33552698的博客 207

群晖Docker跑OpenProject总失败?聊聊‘熵池不足’这个坑以及我的解决思路

本文深入解析了在群晖Docker部署OpenProject时遇到的‘熵池不足’问题,揭示了Linux熵池机制在低功耗ARM设备上的特殊表现。通过三种无需硬件升级的解决方案(安装haveged守护进程、使用rng-tools工具集、内核参数调优),帮助开发者有效解决容器崩溃问题,提升OpenProject在NAS设备上的运行稳定性。

weixin_42522148的博客 196

Android集成百度地图接口,实现定位+路径规划。新手教程

本文主要内容baoh

dqksky的专栏 1万+

私有云项目管理软件选型指南:7款自托管工具深度对比

私有云项目管理不是传统任务跟踪,而是融合代码、配置、基础设施与安全策略的声明式协作系统。其核心在于实现需求-代码-部署-审计的全链路可追溯,支撑Kubernetes、Terraform、CI/CD等现代技术栈的协同治理。关键技术价值体现在降低协作熵值、强化IaC变更追踪、满足等保与ISO27001审计要求,并打通开发、运维、安全、测试多角色工作流。典型应用场景包括K8s集群升级管控、灰度发布状态同步、OPA策略前置校验及一键合规报告生成。本文聚焦GitLab Self-Managed、Azure DevOp

weixin_33860553的博客 206

OpenProject+Docker:中小团队项目管理落地实战指南

项目管理工具选型本质是协作范式的升级——从Excel的碎片化协同,走向结构化、可追溯、权限可控的系统化协作。OpenProject作为轻量级开源项目管理平台,以工作包(Work Package)为核心,天然支持任务拆解、工时跟踪、Wiki知识沉淀、论坛决策留痕与Git代码联动,契合Scrum/Kanban等敏捷实践。其Docker一键部署能力大幅降低运维门槛,让10–50人团队无需专职DevOps即可私有化落地。本文聚焦真实场景适配:如何通过项目隔离、状态字段定制、邮件通知集成与HTTPS加固,将OpenP

weixin_30655569的博客 334

JFlash烧录STM32教程:从安装到命令行批量烧录

在嵌入式开发中,固件烧录是连接编译产物与硬件运行的关键环节。J-Link调试器通过SWD接口与目标芯片通信,调用厂商Flash算法完成数据写入,而JFlash正是SEGGER提供的独立烧录工具,让开发者无需依赖IDE即可高效完成STM32的固件部署。它专注烧录本身,支持hex、bin、elf等常见格式,配合命令行参数可快速搭建产线批量烧录流程,也能用于现场升级和变砖设备恢复。本文以STM32为例,从安装J-Link软件包、SWD四线接线、驱动自检开始,逐步介绍新建工程、配置芯片型号、烧录验证及常见故障排查,

weixin_29164091的博客 186

android百度地图步行骑行导航的简单DEMO

只是作为android百度地推API简单的导航测试程序,用于学习与交流,如果出现任何问题,请在下方留言,告知,我会补充相关的回答。

开源项目管理的利器:OpenProject Docker部署实战与避坑指南

本文详细介绍了如何使用Docker部署开源项目管理工具OpenProject,包括单容器和Docker Compose两种部署方案,以及常见问题的解决方案。文章还涵盖了安全配置、反向代理设置和日常维护等实用内容,帮助团队高效管理项目并避免常见陷阱。

weixin_30275415的博客 406

Android百度地图服务(定位,路径规划,步行,骑行导航)

基于百度地图api的服务,包含路径规划,输入地址获取目标经纬度,导航,定位等服务。

上一篇: Android基站定位——三基站(多基站)定位(三)
下一篇: Adnroid屏幕亮度调节——设置到指定的值与恢复到原来的值
android_ls
博客等级 码龄16年 662粉丝 87原创
评论 15
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值