|
1 | 1 | package com.didichuxing.doraemonkit.gps_mock.map;
|
2 | 2 |
|
3 |
| -import android.util.Log; |
4 |
| - |
5 | 3 | import com.amap.api.navi.AMapNavi;
|
6 | 4 | import com.amap.api.navi.AMapNaviListener;
|
7 | 5 | import com.amap.api.navi.model.AMapCalcRouteResult;
|
8 | 6 | import com.amap.api.navi.model.AMapLaneInfo;
|
9 | 7 | import com.amap.api.navi.model.AMapModelCross;
|
10 | 8 | import com.amap.api.navi.model.AMapNaviCameraInfo;
|
11 | 9 | import com.amap.api.navi.model.AMapNaviCross;
|
| 10 | +import com.amap.api.navi.model.AMapNaviLink; |
12 | 11 | import com.amap.api.navi.model.AMapNaviLocation;
|
13 | 12 | import com.amap.api.navi.model.AMapNaviPath;
|
14 | 13 | import com.amap.api.navi.model.AMapNaviRouteNotifyData;
|
| 14 | +import com.amap.api.navi.model.AMapNaviStep; |
15 | 15 | import com.amap.api.navi.model.AMapNaviTrafficFacilityInfo;
|
16 | 16 | import com.amap.api.navi.model.AMapServiceAreaInfo;
|
17 | 17 | import com.amap.api.navi.model.AimLessModeCongestionInfo;
|
18 | 18 | import com.amap.api.navi.model.AimLessModeStat;
|
19 | 19 | import com.amap.api.navi.model.NaviInfo;
|
20 | 20 | import com.amap.api.navi.model.NaviLatLng;
|
| 21 | +import com.baidu.mapapi.search.core.RouteNode; |
| 22 | +import com.baidu.mapapi.utils.CoordinateConverter; |
21 | 23 | import com.didichuxing.doraemonkit.DoKit;
|
| 24 | +import com.didichuxing.doraemonkit.config.GpsMockConfig; |
| 25 | +import com.didichuxing.doraemonkit.gps_mock.common.BdMapRouteData; |
22 | 26 | import com.didichuxing.doraemonkit.gps_mock.gpsmock.GpsMockManager;
|
23 | 27 | import com.didichuxing.doraemonkit.gps_mock.gpsmock.GpsMockProxyManager;
|
| 28 | +import com.didichuxing.doraemonkit.util.CoordinateUtils; |
| 29 | +import com.didichuxing.doraemonkit.util.LogHelper; |
24 | 30 |
|
| 31 | +import java.util.ArrayList; |
| 32 | +import java.util.Arrays; |
25 | 33 | import java.util.HashMap;
|
26 | 34 | import java.util.List;
|
27 | 35 |
|
@@ -75,10 +83,12 @@ public void onTrafficStatusUpdate() {
|
75 | 83 |
|
76 | 84 | @Override
|
77 | 85 | public void onLocationChange(AMapNaviLocation aMapNaviLocation) {
|
78 |
| - if (GpsMockManager.mockAMapNavLocation()) { |
79 |
| - aMapNaviLocation.setCoord(new NaviLatLng(GpsMockManager.getInstance().getLatitude(), GpsMockManager.getInstance().getLongitude())); |
| 86 | + if (GpsMockManager.getInstance().isMocking()) { |
| 87 | + double[] res = CoordinateUtils.bd09ToGcj02(GpsMockManager.getInstance().getLongitude(), GpsMockManager.getInstance().getLatitude()); |
| 88 | + aMapNaviLocation.setCoord(new NaviLatLng(res[1], res[0])); |
| 89 | + aMapNaviLocation.setSpeed(GpsMockConfig.getRouteMockSpeed()); |
80 | 90 | }
|
81 |
| -// LogHelper.i(TAG, "====aMapNaviLocation===" + aMapNaviLocation.getCoord().toString()); |
| 91 | + LogHelper.d(TAG, "===amap===onLocationChange" + aMapNaviLocation.getCoord().toString()); |
82 | 92 | if (aMapNaviListener != null) {
|
83 | 93 | aMapNaviListener.onLocationChange(aMapNaviLocation);
|
84 | 94 | }
|
@@ -149,7 +159,7 @@ public void onGpsOpenStatus(boolean b) {
|
149 | 159 |
|
150 | 160 | @Override
|
151 | 161 | public void onNaviInfoUpdate(NaviInfo naviInfo) {
|
152 |
| -// LogHelper.i(TAG, "====onNaviInfoUpdate====" + naviInfo.getPathRetainDistance()); |
| 162 | + LogHelper.d(TAG, "====onNaviInfoUpdate====" + naviInfo.getPathRetainDistance()); |
153 | 163 | if (aMapNaviListener != null) {
|
154 | 164 | aMapNaviListener.onNaviInfoUpdate(naviInfo);
|
155 | 165 | }
|
@@ -277,20 +287,76 @@ public void onPlayRing(int i) {
|
277 | 287 | @Override
|
278 | 288 | public void onCalculateRouteSuccess(AMapCalcRouteResult aMapCalcRouteResult) {
|
279 | 289 | try {
|
| 290 | + // 重新做了路径规划,则尝试打断当前模拟. |
| 291 | + GpsMockManager.getInstance().interruptRouteMockThread(); |
| 292 | + int[] routIds = aMapCalcRouteResult.getRouteid(); |
280 | 293 | // 获取路线数据对象
|
281 | 294 | HashMap<Integer, AMapNaviPath> naviPaths = AMapNavi.getInstance(DoKit.INSTANCE.getAPPLICATION()).getNaviPaths();
|
282 |
| - Log.i(TAG, "高德导航===onCalculateRouteSuccess $naviPaths " + naviPaths + " " + aMapCalcRouteResult.toString()); |
283 |
| - // 绘制显示路径 |
284 |
| - List<NaviLatLng> coords = naviPaths.get(12).getSteps().get(0).getCoords(); |
285 |
| - for (NaviLatLng latLng : coords) { |
286 |
| - Log.i(TAG, "高德导航===onCalculateRouteSuccess $naviPaths " + latLng.toString()); |
| 295 | + LogHelper.d(TAG, "===amap===onCalculateRouteSuccess $naviPaths " + naviPaths.size() + " routeId " + Arrays.toString(routIds)); |
| 296 | + |
| 297 | + CoordinateConverter converter = new CoordinateConverter().from(CoordinateConverter.CoordType.COMMON); |
| 298 | + // 将所有点转换成百度坐标点 |
| 299 | + List<com.baidu.mapapi.model.LatLng> bdPoints = new ArrayList<>(); |
| 300 | + AMapNaviPath naviPath = naviPaths.get(routIds[0]); |
| 301 | + List<AMapNaviStep> steps = naviPath.getSteps(); |
| 302 | + int linkSize = 0; |
| 303 | + int stepSize = 0; |
| 304 | + for (AMapNaviStep step : steps) { |
| 305 | + stepSize += step.getCoords().size(); |
| 306 | + List<AMapNaviLink> links = step.getLinks(); |
| 307 | + boolean notNavi = false; |
| 308 | + if (links != null && links.size() > 0){ |
| 309 | + for (AMapNaviLink link : links){ |
| 310 | + if (link == null) continue; |
| 311 | + int linkType = link.getLinkType(); // 获取道路类型 0-普通道路 1-航道 2-隧道 3-桥梁 4-高架桥 注意:该接口仅驾车模式有效 |
| 312 | + int roadClass = link.getRoadClass(); //获取该Link道路等级 * 0 高速公路 * 1 国道 * 2 省道 * 3 县道 * 4 乡公路 * 5 县乡村内部道路 * 6 主要大街、城市快速道 * 7 主要道路 * 8 次要道路 * 9 普通道路 * 10 非导航道路 |
| 313 | + List<NaviLatLng> coords = link.getCoords(); |
| 314 | + if (coords == null) continue; |
| 315 | + linkSize += coords.size(); |
| 316 | + // 过滤非开车导航坐标点(下车后) |
| 317 | + if (roadClass == 10){ |
| 318 | + notNavi = true; |
| 319 | + break; |
| 320 | + } |
| 321 | + } |
| 322 | + } |
| 323 | + |
| 324 | + if (notNavi) continue; |
| 325 | + for (NaviLatLng latLng : step.getCoords()){ |
| 326 | + com.baidu.mapapi.model.LatLng sourceLatLng = new com.baidu.mapapi.model.LatLng(latLng.getLatitude(), latLng.getLongitude()); |
| 327 | + //转换坐标 |
| 328 | + converter.coord(sourceLatLng); |
| 329 | + com.baidu.mapapi.model.LatLng desLatLng = converter.convert(); |
| 330 | + bdPoints.add(desLatLng); |
| 331 | + } |
287 | 332 | }
|
288 | 333 |
|
| 334 | + LogHelper.d(TAG, "===amap===total points==>" + naviPath.getCoordList().size() + " " + naviPath.getCoordList().get(naviPath.getCoordList().size() - 1) |
| 335 | + + " \n" + bdPoints.size() + " " + bdPoints.get(bdPoints.size() - 1) |
| 336 | + + "\nlinkSize=" + linkSize + " stepSize=" + stepSize); |
| 337 | + BdMapRouteData bdMapRouteData = new BdMapRouteData(); |
| 338 | + bdMapRouteData.setAllPoints(bdPoints); |
| 339 | + bdMapRouteData.setTotalDistance(naviPath.getAllLength()); |
| 340 | + |
| 341 | + RouteNode startNode = new RouteNode(); |
| 342 | + com.baidu.mapapi.model.LatLng sourceStartLatLng = new com.baidu.mapapi.model.LatLng(naviPath.getStartPoint().getLatitude(), naviPath.getStartPoint().getLongitude()); |
| 343 | + com.baidu.mapapi.model.LatLng desStartLatLng = converter.coord(sourceStartLatLng).convert(); |
| 344 | + startNode.setLocation(desStartLatLng); |
| 345 | + RouteNode terminalNode = new RouteNode(); |
| 346 | + com.baidu.mapapi.model.LatLng sourceTerminalLatLng = new com.baidu.mapapi.model.LatLng(naviPath.getEndPoint().getLatitude(), naviPath.getEndPoint().getLongitude()); |
| 347 | + com.baidu.mapapi.model.LatLng desTerminalLatLng = converter.coord(sourceTerminalLatLng).convert(); |
| 348 | + terminalNode.setLocation(desTerminalLatLng); |
| 349 | + bdMapRouteData.setStartNode(startNode); |
| 350 | + bdMapRouteData.setTerminalNode(terminalNode); |
| 351 | + bdMapRouteData.setRouteDataFromBiz(true); |
| 352 | + |
| 353 | + GpsMockManager.getInstance().setBdMockDrivingRouteLine(bdMapRouteData); |
| 354 | + |
289 | 355 | if (aMapNaviListener != null) {
|
290 | 356 | aMapNaviListener.onCalculateRouteSuccess(aMapCalcRouteResult);
|
291 | 357 | }
|
292 |
| - }catch (Exception e){ |
293 |
| - Log.e(TAG, e.getMessage()); |
| 358 | + } catch (Exception e) { |
| 359 | + LogHelper.e(TAG, "===amap===onCalculateRouteSuccess error " + e.getMessage()); |
294 | 360 | }
|
295 | 361 | }
|
296 | 362 |
|
|
0 commit comments