代码改变世界

2016.11.28经验积累(获取规划路线距离,导航API配置)

2016-11-28 10:30  一片阴凉  阅读(701)  评论(0)    收藏  举报

这近几天活比较少(公司年底不接活了),利用这段时间好好规划一下自己,保养一下身体(周末身体不舒服,去医院检查出心肌酶有问题,差点就死了),同时也冲冲电.

1.获取驾车距离.项目经理提需求,要求根据工单的出发经纬度和到达经纬度算出实际规划距离(就是百度地图的driving距离),然而根据百度提供的经纬度对象进不了OnGetRoutePlanResultListener,于是跟项目经理说实现不了,项目经理没办法让把经纬度传到后台,后台计算.虽然工作上应付过去了,但要是问题不解决会对技术人员心理造成阴影和造成突破瓶颈的障碍(也许有的人没这种心理,但我就是这样的),于是 我又看了一下,发现框架里老版本的API 可以通过 地名 获取规划距离,经纬度获取不到, 新版本的API可以通过经纬度获取,地名获取不到...,可能还是哪有问题,但我手上的问题解决了,也不求甚解了.

如何破:逻辑代码跟百度提供的示例代码一样,直接贴上来了

implements OnGetRoutePlanResultListener//接口

RoutePlanSearch mSearch = null; // 搜索模块,也可去掉地图模块独立使用(局部变量)

//oncreate() 放在setContentView()前面
SDKInitializer.initialize(getApplicationContext());
mSearch = RoutePlanSearch.newInstance();
mSearch.setOnGetRoutePlanResultListener(this);

//请求距离,在监听里获取
PlanNode stNode = PlanNode.withCityNameAndPlaceName("潍坊",servDispatch.getDepartLongLatAddress());// 开始地点
PlanNode enNode = PlanNode.withCityNameAndPlaceName("潍坊", servDispatch.getArriveLongLatAddress());//结束地点

mSearch.drivingSearch((new DrivingRoutePlanOption()).from(stNode)
.to(enNode));// 发请求

//接口里获取规划距离方法
@Override
	public void onGetDrivingRouteResult(DrivingRouteResult result) {
		if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {
			// 未找到结果
			return;
		}
		if (result.error == SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR) {
			// 起终点或途经点地址有岐义,通过以下接口获取建议查询信息
			result.getSuggestAddrInfo();
			return;
		}
		if (result.error == SearchResult.ERRORNO.NO_ERROR) {
			int distance = result.getRouteLines().get(0).getDistance();
			// 获取距离
			if (distance > 0)
				servDispatch.setDistance(distance + "");
		}

	}

2.导航api找不到本地方法.java.lang.UnsatisfiedLinkError: Native method not found: com.baidu.nplatform.comjni.tools.JNITools.BD2GCJ:(DD)Landroid/os/Bundle;同事研究了半天,没找到原因,于是问我,百度了一下一大堆解决方案.但想这种找不到API的.class里方法的错误,很可能是因为少配置了什么导致的,我这里没有亲身体验问题解决看到的效果,配置在这贴一下.

如何破:在调用的action里添加配置

mBMapMan=new BMapManager(getApplication());
mBMapMan.init("Key", null);
这两行代码,应该放在setContentView()之前。