From 1b9876101411331d99642df0dfdaf99a525e076b Mon Sep 17 00:00:00 2001 From: tongchenfei Date: Tue, 9 Mar 2021 15:43:34 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=81=93=E8=B7=AF=E7=BC=93?= =?UTF-8?q?=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/gradle.xml | 1 + .../com/mogo/launcher/MogoApplication.java | 2 +- libraries/map-custom/build.gradle | 2 +- .../mogo/map/impl/custom/AMapViewWrapper.java | 32 ++++++++--- .../map/impl/custom/RoadCacheWrapper.java | 54 +++++++++++++++++++ .../custom/uicontroller/AMapUIController.java | 4 +- .../uicontroller/IMogoMapUIController.java | 2 +- .../com/mogo/map/MogoMapUIController.java | 4 +- .../drawer/AdasRecognizedResultDrawer.java | 2 +- .../mogo/module/common/drawer/BaseDrawer.java | 4 +- .../common/utils/SimpleHandlerThreadPool.java | 3 +- 11 files changed, 92 insertions(+), 18 deletions(-) create mode 100644 libraries/map-custom/src/main/java/com/mogo/map/impl/custom/RoadCacheWrapper.java diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 83405b8de1..4ff10f68a5 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -91,6 +91,7 @@ diff --git a/app/src/main/java/com/mogo/launcher/MogoApplication.java b/app/src/main/java/com/mogo/launcher/MogoApplication.java index 2f482f9288..f67bb6e068 100644 --- a/app/src/main/java/com/mogo/launcher/MogoApplication.java +++ b/app/src/main/java/com/mogo/launcher/MogoApplication.java @@ -214,7 +214,7 @@ public class MogoApplication extends AbsMogoApplication { // 设置是否是第三APP登录 clientConfig.setThirdLogin(false); // 设置是否输出日志 - clientConfig.setShowDebugLog(false); + clientConfig.setShowDebugLog(true); // 设置从蘑菇AI开放平台获取的APPKey clientConfig.setThirdPartyAppKey("wbvpzgar"); // 设置应用服务AppId 长链、鉴权 diff --git a/libraries/map-custom/build.gradle b/libraries/map-custom/build.gradle index cbccabe03f..a32f01a3ab 100644 --- a/libraries/map-custom/build.gradle +++ b/libraries/map-custom/build.gradle @@ -67,7 +67,7 @@ dependencies { implementation project(':foudations:mogo-commons') } - implementation 'com.zhidaoauto.machine:map:1.0.0-vr-8.2.2' + implementation 'com.zhidaoauto.machine:map:1.0.0-vr-8.2.4' // implementation 'com.zhidaoauto.machine:map:1.0.0-vr-test-3.4' } diff --git a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/AMapViewWrapper.java b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/AMapViewWrapper.java index f1ae0079e5..442391396f 100644 --- a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/AMapViewWrapper.java +++ b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/AMapViewWrapper.java @@ -9,6 +9,7 @@ import android.location.Location; import android.os.Bundle; import android.os.Trace; import android.text.TextUtils; +import android.util.ArrayMap; import android.util.Log; import android.view.MotionEvent; import android.view.View; @@ -1034,19 +1035,36 @@ public class AMapViewWrapper implements IMogoMapView, } } + Map roadCacheMap = new ArrayMap<>(); + @Override - public double[] matchRoad( double lon, double lat, double angle, boolean isGpsLocation, boolean isRTK ) { + public double[] matchRoad( String id, double lon, double lat, double angle, boolean isGpsLocation, boolean isRTK ) { double wgs[] = new double[]{lon, lat}; long start = System.currentTimeMillis(); - SinglePointRoadInfo singlePointRoadInfo = MapDataApi.INSTANCE.getSinglePointMatchRoad( ( ( float ) wgs[0] ), ( ( float ) wgs[1] ), ( ( float ) angle ), isGpsLocation, isRTK ); + RoadCacheWrapper roadCache = roadCacheMap.get(id); + if(roadCache == null){ + SinglePointRoadInfo singlePointRoadInfo = MapDataApi.INSTANCE.getSinglePointMatchRoad( ( ( float ) wgs[0] ), ( ( float ) wgs[1] ), ( ( float ) angle ), isGpsLocation, isRTK ); + if (singlePointRoadInfo != null && singlePointRoadInfo.getCoords() != null && !singlePointRoadInfo.getCoords().isEmpty()) { + roadCache = new RoadCacheWrapper(singlePointRoadInfo.getCoords()); + } + } + Log.i("timer-matchRoad-1", "cost " + (System.currentTimeMillis() - start) + "ms"); - if ( singlePointRoadInfo != null - && singlePointRoadInfo.getCoords() != null - && !singlePointRoadInfo.getCoords().isEmpty() ) { + if ( roadCache != null + && roadCache.getRoad() != null + && !roadCache.getRoad().isEmpty() ) { start = System.currentTimeMillis(); - double matchedPoint[] = PointInterpolatorUtil.mergeToRoad( wgs[0], wgs[1], singlePointRoadInfo.getCoords() ); + double matchedPoint[] = PointInterpolatorUtil.mergeToRoad( wgs[0], wgs[1], roadCache.getRoad() ); + double diff = CoordinateUtils.calculateLineDistance(lon, lat, roadCache.getLastLon(), roadCache.getLastLon()); + if ( (roadCache.getLastDistanceDiff() == 0 || roadCache.getLastDistanceDiff() > diff)) { + roadCache.setLastDistanceDiff(diff); + roadCacheMap.put(id, roadCache); + Log.i("timer-matchRoad-3", "cost " + (System.currentTimeMillis() - start) + "ms"); + return matchedPoint; + } + roadCacheMap.put(id, null); Log.i("timer-matchRoad-2", "cost " + (System.currentTimeMillis() - start) + "ms"); - return matchedPoint; + return matchRoad(id, lon, lat, angle, isGpsLocation, isRTK); } return null; } diff --git a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/RoadCacheWrapper.java b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/RoadCacheWrapper.java new file mode 100644 index 0000000000..f64dc116c8 --- /dev/null +++ b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/RoadCacheWrapper.java @@ -0,0 +1,54 @@ +package com.mogo.map.impl.custom; + +import com.zhidaoauto.map.sdk.open.query.LonLatPoint; + +import java.util.List; + +/** + * 道路数据缓存 + * + * @author tongchenfei + */ +public class RoadCacheWrapper { + private List road; + private double lastDistanceDiff; + private int roadLength = -1; + + public RoadCacheWrapper(List road) { + this.road = road; + } + + public List getRoad() { + return road; + } + + public void setRoad(List road) { + this.road = road; + if(road!=null) { + roadLength = road.size(); + } + } + + public double getLastDistanceDiff() { + return lastDistanceDiff; + } + + public void setLastDistanceDiff(double lastDistanceDiff) { + this.lastDistanceDiff = lastDistanceDiff; + } + + public double getLastLat(){ + if (roadLength != -1) { + return road.get(roadLength - 1).getLatitude(); + } + return 0; + } + + public double getLastLon(){ + if (roadLength != -1) { + return road.get(roadLength - 1).getLongitude(); + } + return 0; + } + +} diff --git a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/uicontroller/AMapUIController.java b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/uicontroller/AMapUIController.java index 7ce8f4d8c6..fd2d79c2e1 100644 --- a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/uicontroller/AMapUIController.java +++ b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/uicontroller/AMapUIController.java @@ -315,9 +315,9 @@ public class AMapUIController implements IMogoMapUIController { } @Override - public double[] matchRoad( double lon, double lat, double angle, boolean isGpsLocation, boolean isRTK ) { + public double[] matchRoad( String id, double lon, double lat, double angle, boolean isGpsLocation, boolean isRTK ) { if ( mClient != null ) { - return mClient.matchRoad( lon, lat, angle, isGpsLocation, isRTK ); + return mClient.matchRoad( id, lon, lat, angle, isGpsLocation, isRTK ); } return null; } diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java index f888406782..2edd64b0d1 100644 --- a/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java @@ -285,7 +285,7 @@ public interface IMogoMapUIController { * @param isRTK * @return */ - default double[] matchRoad( double lon, double lat, double angle, boolean isGpsLocation, boolean isRTK ) { + default double[] matchRoad(String id, double lon, double lat, double angle, boolean isGpsLocation, boolean isRTK ) { return null; } diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java b/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java index 18b6892bed..6060688593 100644 --- a/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java +++ b/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java @@ -355,10 +355,10 @@ public class MogoMapUIController implements IMogoMapUIController { } @Override - public double[] matchRoad( double lon, double lat, double angle, boolean isGpsLocation, boolean isRTK ) { + public double[] matchRoad( String id, double lon, double lat, double angle, boolean isGpsLocation, boolean isRTK ) { initDelegate(); if ( mDelegate != null ) { - return mDelegate.matchRoad( lon, lat, angle, isGpsLocation, isRTK ); + return mDelegate.matchRoad( id, lon, lat, angle, isGpsLocation, isRTK ); } return null; } diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/AdasRecognizedResultDrawer.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/AdasRecognizedResultDrawer.java index 2d5c46bf19..242bdcaa4b 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/AdasRecognizedResultDrawer.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/AdasRecognizedResultDrawer.java @@ -172,7 +172,7 @@ class AdasRecognizedResultDrawer extends BaseDrawer { return; } - double[] matchedPoint = SnapshotSetDataDrawer.getInstance().matchRoad( recognizedListResult.lon, + double[] matchedPoint = SnapshotSetDataDrawer.getInstance().matchRoad( recognizedListResult.uuid, recognizedListResult.lon, recognizedListResult.lat, recognizedListResult.heading, true diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/BaseDrawer.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/BaseDrawer.java index 0744946fd7..b6acbd9bd4 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/BaseDrawer.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/BaseDrawer.java @@ -199,13 +199,13 @@ class BaseDrawer { * @param isRtk * @return */ - public double[] matchRoad( double lon, double lat, double angle, boolean isRtk ) { + public double[] matchRoad( String id, double lon, double lat, double angle, boolean isRtk ) { final long start = System.currentTimeMillis(); double[] matchRoad = MogoApisHandler.getInstance() .getApis() .getMapServiceApi() .getMapUIController() - .matchRoad( lon, lat, angle, true, isRtk ); + .matchRoad( id, lon, lat, angle, true, isRtk ); Log.i("timer-matchRoad", "cost " + (System.currentTimeMillis() - start) + "ms"); return matchRoad; } diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/utils/SimpleHandlerThreadPool.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/utils/SimpleHandlerThreadPool.java index efe6e6d94c..1c4e6f1304 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/utils/SimpleHandlerThreadPool.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/utils/SimpleHandlerThreadPool.java @@ -188,7 +188,8 @@ public class SimpleHandlerThreadPool { } } - double[] matchedPoint = SnapshotSetDataDrawer.getInstance().matchRoad( cloudRoadData.getWgslon(), + double[] matchedPoint = SnapshotSetDataDrawer.getInstance().matchRoad( cloudRoadData.getUniqueKey(), + cloudRoadData.getWgslon(), cloudRoadData.getWgslat(), cloudRoadData.getHeading(), true