From 812d6e0437d86d8302aee0c608520b3a5f2b9bbf Mon Sep 17 00:00:00 2001 From: liujing Date: Mon, 20 Jun 2022 22:30:57 +0800 Subject: [PATCH 1/3] =?UTF-8?q?[add]=20=E4=BD=BF=E7=94=A8=E5=AF=BC?= =?UTF-8?q?=E8=88=AA=E5=9C=B0=E5=9B=BE=E5=AE=9E=E7=8E=B0=E8=B5=B7=E5=A7=8B?= =?UTF-8?q?=E7=82=B9=E5=8A=A0=E7=BA=B9=E7=90=86=E8=87=AA=E5=AE=9A=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eagle/core/function/smp/CarOverlay.java | 290 +++++++++++++++ .../eagle/core/function/smp/NaviUtil.java | 121 +++++++ .../function/smp/SmallMapDirectionView.java | 339 ++++++++++++++++-- .../custtexture_bad.png | Bin 0 -> 162 bytes .../custtexture_grayred.png | Bin 0 -> 396 bytes .../custtexture_green.png | Bin 0 -> 179 bytes .../custtexture_slow.png | Bin 0 -> 139 bytes .../module_small_map_view_border_north.png | Bin 0 -> 29440 bytes .../main/res/layout/module_small_map_view.xml | 12 + 9 files changed, 727 insertions(+), 35 deletions(-) create mode 100644 core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/CarOverlay.java create mode 100644 core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/NaviUtil.java create mode 100644 core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi-2560x1440/custtexture_bad.png create mode 100644 core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi-2560x1440/custtexture_grayred.png create mode 100644 core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi-2560x1440/custtexture_green.png create mode 100644 core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi-2560x1440/custtexture_slow.png create mode 100644 core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi-2560x1440/module_small_map_view_border_north.png diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/CarOverlay.java b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/CarOverlay.java new file mode 100644 index 0000000000..ac995a7013 --- /dev/null +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/CarOverlay.java @@ -0,0 +1,290 @@ +package com.mogo.eagle.core.function.smp; + +import android.content.Context; +import android.graphics.BitmapFactory; + +import com.amap.api.maps.AMap; +import com.amap.api.maps.CameraUpdateFactory; +import com.amap.api.maps.TextureMapView; +import com.amap.api.maps.model.BitmapDescriptor; +import com.amap.api.maps.model.BitmapDescriptorFactory; +import com.amap.api.maps.model.CameraPosition; +import com.amap.api.maps.model.LatLng; +import com.amap.api.maps.model.Marker; +import com.amap.api.maps.model.MarkerOptions; +import com.amap.api.maps.model.Polyline; +import com.autonavi.amap.mapcore.IPoint; +import com.mogo.eagle.core.function.map.R; + +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +/** + * 包名: com.amap.api.navi.core + *

+ * 创建时间:2018/3/1 + * 项目名称:AndroidNavigationSDK + * + * @author guibao.ggb + * @email guibao.ggb@alibaba-inc.com + *

+ * 类说明:自车位置管理Overlay类 + */ +public class CarOverlay { + + protected static final int CAR_MOVE_ANIMATION_PERIOD = 50; + protected int carMoveAnimationFrameNum = 2; + protected boolean mIsLock = true; + protected IPoint mapAnchorBackup = null; + protected double dXOffStep; + protected double dYOffStep; + protected float dAngleOffStep; + protected int currentFrameIndex; + protected float angleStart = 0; + protected boolean isMoveStarted = false; + protected float newAngle = 0; + protected BitmapDescriptor carDescriptor = null; + protected BitmapDescriptor fourCornersDescriptor = null; + protected Marker carMarker; + protected Marker directionMarker; + protected AMap mAmap = null; + protected TextureMapView mapView; + protected boolean isDirectionVisible = true; + protected LatLng endLatLng = null; + protected Polyline leaderLine = null; + protected final int DISTANCE_OFFSET = 150;// 默认 500 偏差 + + // API 默认 1800 UI 默认 360 + protected int angleModValue = 1800; + + + private ScheduledExecutorService executorService; + + public CarOverlay(Context context, TextureMapView mapView) { + this.mapView = mapView; + + fourCornersDescriptor = BitmapDescriptorFactory.fromBitmap(BitmapFactory + .decodeResource(context.getResources(), + R.drawable.module_small_map_navi_direction)); + + carDescriptor = BitmapDescriptorFactory.fromBitmap(BitmapFactory + .decodeResource(context.getResources(), + R.drawable.module_small_map_view_my_location_logo)); + angleModValue = 1800; + + } + + /** + * 设置自车状态 + * + * @param lock true 锁车 false 非锁车 + */ + public void setLock(boolean lock) { + mIsLock = lock; + if (carMarker == null) { + return; + } + if (mAmap == null) { + return; + } + if (directionMarker == null) { + return; + } + carMarker.setFlat(true); + directionMarker.setGeoPoint(carMarker.getGeoPoint()); + carMarker.setGeoPoint(carMarker.getGeoPoint()); + carMarker.setRotateAngle(carMarker.getRotateAngle()); + if (mIsLock) { + CameraPosition cameraPosition = new CameraPosition.Builder().target(carMarker.getPosition()).bearing(newAngle).tilt(0).zoom(16).build(); + mAmap.moveCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)); + } + } + + public void reset() { + if (carMarker != null) { + carMarker.remove(); + } + if (directionMarker != null) { + directionMarker.remove(); + } + if (leaderLine != null) { + leaderLine.remove(); + } + leaderLine = null; + carMarker = null; + directionMarker = null; + + if (executorService != null) { + if (!executorService.isShutdown()) { + executorService.shutdown(); + } + isMoveStarted = false; + + executorService = null; + } + } + + /** + * 绘制自车 + * + * @param aMap + * @param mLatLng + * @param bearing + */ + public void draw(AMap aMap, LatLng mLatLng, float bearing) { + if (aMap == null || mLatLng == null || carDescriptor == null) { + return; + } + mAmap = aMap; + try { + if (carMarker == null) { + carMarker = aMap.addMarker(new MarkerOptions().anchor(0.5f, 0.5f).setFlat(true).icon(carDescriptor).position(mLatLng)); + } + + if (directionMarker == null) { + directionMarker = aMap.addMarker(new MarkerOptions().anchor(0.5f, 0.5f).setFlat(true).icon(fourCornersDescriptor).position(mLatLng)); + if (isDirectionVisible) { + directionMarker.setVisible(true); + } else { + directionMarker.setVisible(false); + } + } + carMarker.setVisible(true); + newAngle = bearing; + IPoint resultGeoPnt = IPoint.obtain(); + resultGeoPnt = NaviUtil.lonlat2Geo(mLatLng.latitude, mLatLng.longitude, 20); + updateCarPosition(resultGeoPnt); + resultGeoPnt.recycle(); + + } catch (Throwable e) { + e.printStackTrace(); + } + } + + + private void updateCarPosition(IPoint p) { + carMarker.setGeoPoint(p); + carMarker.setFlat(true); + carMarker.setRotateAngle(360 - newAngle); + if (directionMarker != null) { + directionMarker.setGeoPoint(p); + } + + if (mIsLock) { + CameraPosition cameraPosition = new CameraPosition.Builder().target(carMarker.getPosition()).bearing(newAngle).tilt(0).zoom(16).build(); + mAmap.moveCamera(CameraUpdateFactory.changeBearingGeoCenter(newAngle, p)); + } + } + + + public void setEndPoi(LatLng latlng) { + endLatLng = latlng; + } + + /** + * 释放自车资源 + */ + public void destroy() { + if (carMarker != null) { + carMarker.remove(); + carMarker = null; + } + if (directionMarker != null) { + directionMarker.remove(); + directionMarker = null; + } + carDescriptor = null; + + if (executorService != null && !executorService.isShutdown()) { + executorService.shutdown(); + isMoveStarted = false; + + executorService = null; + } + } + + private void calculateCarSmoothMoveOffset(IPoint newCenter, float newAngle) { + if (carMarker == null) { + return; + } + IPoint currentAnchorGeoPoint = carMarker.getGeoPoint(); + if (currentAnchorGeoPoint == null || currentAnchorGeoPoint.x == 0 || currentAnchorGeoPoint.y == 0) { + currentAnchorGeoPoint = newCenter; + } + currentFrameIndex = 0; + mapAnchorBackup = currentAnchorGeoPoint; + dXOffStep = (newCenter.x - currentAnchorGeoPoint.x) / carMoveAnimationFrameNum; + dYOffStep = (newCenter.y - currentAnchorGeoPoint.y) / carMoveAnimationFrameNum; + // 获取当前的旋转角度 + angleStart = carMarker.getRotateAngle(); + boolean isFirst = false; + + if (Float.compare(angleStart, newAngle) == 0) { + isFirst = true; + } else { + angleStart = 360 - angleStart; + } + // 校正旋转角度问题 + float dAngleDelta = newAngle - angleStart; + if (isFirst) { + dAngleDelta = 0; + } + if (dAngleDelta > 180) { + dAngleDelta = dAngleDelta - 360; + } + else if (dAngleDelta < -180) { + dAngleDelta = dAngleDelta + 360; + } + dAngleOffStep = dAngleDelta / carMoveAnimationFrameNum; + isMoveStarted = true; + } + +// protected void startSmoothMoveTimer() { +// if (executorService == null) { +// executorService = new ScheduledThreadPoolExecutor(1, new BasicThreadFactory.Builder().namingPattern("caroverlay-schedule-pool-%d").daemon(true).build()); +// +// executorService.scheduleAtFixedRate(new Runnable() { +// long currentSeconds; +// @Override +// public void run() { +// try{ +// currentSeconds = System.currentTimeMillis(); +// mapSmoothMoveTimerTick(); +// } catch(Throwable e){ +// e.printStackTrace(); +// } +// } +// }, 0, CAR_MOVE_ANIMATION_PERIOD, TimeUnit.MILLISECONDS); +// } +// } + + private void mapSmoothMoveTimerTick() { + if (!isMoveStarted) { + return; + } + if (carMarker == null) { + return; + } + if (mAmap == null) { + return; + } + try { + IPoint p = carMarker.getGeoPoint(); + double newX = 0, newY = 0; + if (currentFrameIndex++ < carMoveAnimationFrameNum) { + newX = mapAnchorBackup.x + dXOffStep * currentFrameIndex; + newY = mapAnchorBackup.y + dYOffStep * currentFrameIndex; + newAngle = angleStart + dAngleOffStep * currentFrameIndex; + newAngle %= angleModValue; + if (newX != 0 || newY != 0) { + p = new IPoint((int)newX, (int)newY); + } + updateCarPosition(p); + } + } catch (Throwable e) { + e.printStackTrace(); + } + } + +} diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/NaviUtil.java b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/NaviUtil.java new file mode 100644 index 0000000000..f009ec97c1 --- /dev/null +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/NaviUtil.java @@ -0,0 +1,121 @@ +package com.mogo.eagle.core.function.smp; + +import com.amap.api.maps.AMapUtils; +import com.amap.api.maps.model.LatLng; +import com.amap.api.navi.model.NaviLatLng; +import com.autonavi.amap.mapcore.IPoint; +import com.autonavi.amap.mapcore.MapProjection; + +/** + * 包名: com.amap.navi.demo.util + *

+ * 创建时间:2018/4/19 + * 项目名称:NaviDemo + * + * @author guibao.ggb + * @email guibao.ggb@alibaba-inc.com + *

+ * 类说明: + */ +public class NaviUtil { + + public static float calculateDistance(NaviLatLng start, NaviLatLng end) { + double x1 = start.getLongitude(); + double y1 = start.getLatitude(); + double x2 = end.getLongitude(); + double y2 = end.getLatitude(); + return AMapUtils.calculateLineDistance(new LatLng(y1, x1), new LatLng(y2, x2)); + } + + + public static NaviLatLng getPointForDis(NaviLatLng sPt, NaviLatLng ePt, double dis) { + double lSegLength = calculateDistance(sPt, ePt); + NaviLatLng pt = new NaviLatLng(); + double preResult = dis / lSegLength; + pt.setLatitude(((ePt.getLatitude() - sPt.getLatitude()) * preResult + sPt.getLatitude())); + pt.setLongitude(((ePt.getLongitude() - sPt.getLongitude()) * preResult + sPt.getLongitude())); + return pt; + } + + /** + * 根据经纬度计算需要偏转的角度 + * + * @param startPoi + * @param secondPoi + * @return + */ + public static float getRotate(NaviLatLng startPoi, NaviLatLng secondPoi) { + float rotate = 0; + try { + IPoint point1 = new IPoint(); + IPoint point2 = new IPoint(); + MapProjection.lonlat2Geo(startPoi.getLongitude(), startPoi.getLatitude(), point1); + MapProjection.lonlat2Geo(secondPoi.getLongitude(), secondPoi.getLatitude(), point2); + double x1 = point1.x; + double x2 = point2.x; + double y1 = point1.y; + double y2 = point2.y; + rotate = (float) (Math.atan2(y2 - y1, x2 - x1) / Math.PI * 180); + rotate = rotate + 90; + return rotate; + } catch (Exception e) { + e.printStackTrace(); + } + return rotate; + } + + + public static final int MAXZOOMLEVEL = 20; + public static final int PIXELSPERTILE = 256; + public static final double MINLATITUDE = -85.0511287798; + public static final double MAXLATITUDE = 85.0511287798; + public static final double MINLONGITUDE = -180; + public static final double MAXLONGITUDE = 180; + public static final int EARTHRADIUSINMETERS = 6378137; + public static final int TILESPLITLEVEL = 0; + + + public static final double EarthCircumferenceInMeters = 2 * Math.PI + * EARTHRADIUSINMETERS; + + + public static double clip(double n, double minValue, double maxValue) { + return Math.min(Math.max(n, minValue), maxValue); + } + + public static IPoint lonlat2Geo(double latitude, double longitude, + int levelOfDetail) { + IPoint rPnt = new IPoint(); + latitude = clip(latitude, MINLATITUDE, MAXLATITUDE) * Math.PI / 180; + longitude = clip(longitude, MINLONGITUDE, MAXLONGITUDE) * Math.PI / 180; + double sinLatitude = Math.sin(latitude); + double xMeters = EARTHRADIUSINMETERS * longitude; + double lLog = Math.log((1 + sinLatitude) / (1 - sinLatitude)); + double yMeters = EARTHRADIUSINMETERS / 2 * lLog; + long numPixels = (long) PIXELSPERTILE << levelOfDetail; + double metersPerPixel = EarthCircumferenceInMeters / numPixels; + rPnt.x = (int) clip((EarthCircumferenceInMeters / 2 + xMeters) + / metersPerPixel + 0.5, 0, numPixels - 1); + long tmp = (long) (EarthCircumferenceInMeters / 2 - yMeters); + rPnt.y = (int) clip((double) tmp / metersPerPixel + 0.5, 0, + numPixels - 1); + return rPnt; + } + + + + public static String formatKM(int d) { + if (d == 0) { + return "0米"; + } else if (d < 100) { + return d + "米"; + } else if ((100 <= d) && (d < 1000)) { + return d + "米"; + } else if ((1000 <= d) && (d < 10000)) { + return (d / 10) * 10 / 1000.0D + "公里"; + } else if ((10000 <= d) && (d < 100000)) { + return (d / 100) * 100 / 1000.0D + "公里"; + } + return (d / 1000) + "公里"; + } +} diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/SmallMapDirectionView.java b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/SmallMapDirectionView.java index 5e0d974a80..c5e962f0e3 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/SmallMapDirectionView.java +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/SmallMapDirectionView.java @@ -13,6 +13,7 @@ import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.widget.RelativeLayout; +import android.widget.TextView; import androidx.annotation.Nullable; @@ -38,8 +39,24 @@ import com.amap.api.navi.AMapNaviViewListener; import com.amap.api.navi.AMapNaviViewOptions; import com.amap.api.navi.ParallelRoadListener; import com.amap.api.navi.enums.AMapNaviParallelRoadStatus; +import com.amap.api.navi.model.AMapCalcRouteResult; +import com.amap.api.navi.model.AMapLaneInfo; +import com.amap.api.navi.model.AMapModelCross; +import com.amap.api.navi.model.AMapNaviCameraInfo; +import com.amap.api.navi.model.AMapNaviCross; +import com.amap.api.navi.model.AMapNaviInfo; +import com.amap.api.navi.model.AMapNaviLocation; +import com.amap.api.navi.model.AMapNaviPath; +import com.amap.api.navi.model.AMapNaviRouteNotifyData; +import com.amap.api.navi.model.AMapNaviTrafficFacilityInfo; +import com.amap.api.navi.model.AMapServiceAreaInfo; +import com.amap.api.navi.model.AimLessModeCongestionInfo; +import com.amap.api.navi.model.AimLessModeStat; +import com.amap.api.navi.model.NaviInfo; import com.amap.api.navi.model.NaviLatLng; import com.amap.api.navi.model.RouteOverlayOptions; +import com.amap.api.navi.view.RouteOverLay; +import com.autonavi.tbt.TrafficFacilityInfo; import com.mogo.cloud.commons.utils.CoordinateUtils; import com.mogo.eagle.core.data.map.MogoLatLng; import com.mogo.eagle.core.data.map.MogoLocation; @@ -63,7 +80,7 @@ import java.util.List; */ public class SmallMapDirectionView extends RelativeLayout - implements IMoGoMapLocationListener, ISmallMapDirectionView,ParallelRoadListener{ + implements IMoGoMapLocationListener, ISmallMapDirectionView, AMapNaviListener { //小地图名称 public static final String TAG = "SmallMapDirectionView"; @@ -72,11 +89,11 @@ public class SmallMapDirectionView private AMapNaviView mAMapNaviView; protected AMapNavi mAMapNavi; private AMap mAMap; - // private Marker mCarMarker; -// private Marker mStartMarker; + private Marker mCarMarker; + // private Marker mStartMarker; // private Marker mEndMarker; - protected NaviLatLng mEndLatlng = new NaviLatLng(40.032969, 116.313151); - protected NaviLatLng mStartLatlng = new NaviLatLng(40.106731, 116.248692); + protected NaviLatLng mEndLatlng = new NaviLatLng(26.817455, 112.579649); + protected NaviLatLng mStartLatlng = new NaviLatLng(26.818968, 112.571216); protected final List sList = new ArrayList(); protected final List eList = new ArrayList(); @@ -88,6 +105,12 @@ public class SmallMapDirectionView private Polyline mPolyline; private CameraUpdate mCameraUpdate; private Context mContext; + private float tilt = 20f; + private TextView overLayerView; + //自车位置,待定是否使用该类实现 + private CarOverlay carOverlay; + //路线Overlay + private RouteOverLay routeOverLay; public SmallMapDirectionView(Context context) { this(context, null); @@ -110,27 +133,31 @@ public class SmallMapDirectionView mContext = context; sList.add(mStartLatlng); eList.add(mEndLatlng); - mWayPointList.add(new NaviLatLng(40.048674, 116.308173)); - mWayPointList.add(new NaviLatLng(40.056558, 116.303023)); - mWayPointList.add(new NaviLatLng(40.069039, 116.2965)); - mWayPointList.add(new NaviLatLng(40.084144, 116.28311)); - mWayPointList.add(new NaviLatLng(40.089529, 116.275042)); - mWayPointList.add(new NaviLatLng(40.099115, 116.258391)); + //测试代码:路线指定路径 + mWayPointList.add(new NaviLatLng(26.81930638, 112.57276816)); + mWayPointList.add(new NaviLatLng(26.81930735, 112.57277308)); + mWayPointList.add(new NaviLatLng(26.81930829, 112.57277782)); + mWayPointList.add(new NaviLatLng(26.81930947, 112.57278384)); + mWayPointList.add(new NaviLatLng(26.81931044, 112.57278879)); + mWayPointList.add(new NaviLatLng(26.81931096, 112.57279149)); View smpView = LayoutInflater.from(context).inflate(R.layout.module_small_map_view, this); mAMapNaviView = smpView.findViewById(R.id.aMapNaviView); + overLayerView = findViewById(R.id.overLayer); mAMapNavi = AMapNavi.getInstance(context); -// mAMapNavi.addAMapNaviListener((AMapNaviListener) this); - mAMapNavi.addParallelRoadListener(this); mAMapNavi.setUseInnerVoice(true, true); + mAMapNavi.addAMapNaviListener(this); // rlSmallMapBorder = findViewById(R.id.rlSmallMapBorder); // rlSmallMapBorder.addView(mAMapNaviView); - - initAMapView(); + initAMapView(context); // 注册定位监听 CallerMapLocationListenerManager.INSTANCE.addListener(TAG, this); + //设置全览模式 + overLayerView.setOnClickListener(v -> { + mAMapNaviView.displayOverview(); + }); } @Override @@ -140,7 +167,10 @@ public class SmallMapDirectionView CallerMapLocationListenerManager.INSTANCE.removeListener(TAG); } - private void initAMapView() { + /** + * + */ + private void initAMapView(Context context) { mCameraUpdate = CameraUpdateFactory.zoomTo(zoomLevel); mAMap = mAMapNaviView.getMap(); // 地图文字标注 @@ -156,10 +186,10 @@ public class SmallMapDirectionView // mEndMarker = mAMap.addMarker(new MarkerOptions() // .icon(BitmapDescriptorFactory.fromResource(R.drawable.module_small_map_view_dir_end))); // 加载自定义样式 - CustomMapStyleOptions customMapStyleOptions = new CustomMapStyleOptions() - .setEnable(true) - .setStyleData(MapAssetStyleUtils.getAssetsStyle(getContext())) - .setStyleExtraData(MapAssetStyleUtils.getAssetsExtraStyle(getContext())); +// CustomMapStyleOptions customMapStyleOptions = new CustomMapStyleOptions() +// .setEnable(true) +// .setStyleData(MapAssetStyleUtils.getAssetsStyle(getContext())) +// .setStyleExtraData(MapAssetStyleUtils.getAssetsExtraStyle(getContext())); AMapNaviViewOptions options = mAMapNaviView.getViewOptions(); //不显示导航界面 @@ -174,20 +204,16 @@ public class SmallMapDirectionView options.setCompassEnabled(false); //关闭自动绘制路线,自行绘制路线 options.setAutoDrawRoute(false); - //自定义样式 - RouteOverlayOptions routeOverlayOptions = new RouteOverlayOptions(); //自车车标 options.setCarBitmap(BitmapFactory.decodeResource(this.getResources(), R.drawable.module_small_map_view_my_location_logo)); - options.setFourCornersBitmap(BitmapFactory.decodeResource(this.getResources(), R.drawable.module_small_map_navi_direction)); - options.setStartPointBitmap(BitmapFactory.decodeResource(this.getResources(), R.drawable.module_small_map_view_dir_start)); + options.setFourCornersBitmap(BitmapFactory.decodeResource(this.getResources(), R.drawable.module_small_map_view_border_north)); +// options.setStartPointBitmap(BitmapFactory.decodeResource(this.getResources(), R.drawable.module_small_map_view_dir_start)); //options.setWayPointBitmap(BitmapFactory.decodeResource(this.getResources(), R.drawable.navi_way)); - options.setEndPointBitmap(BitmapFactory.decodeResource(this.getResources(), R.drawable.module_small_map_view_dir_end)); - //驶过路段擦除 - routeOverlayOptions.setPassRoute(BitmapFactory.decodeResource(getResources(), R.drawable.module_small_map_view_dir_pass_route)); - options.setRouteOverlayOptions(routeOverlayOptions); +// options.setEndPointBitmap(BitmapFactory.decodeResource(this.getResources(), R.drawable.module_small_map_view_dir_end)); mAMapNaviView.setViewOptions(options); + // 设置自定义样式 - mAMap.setCustomMapStyle(customMapStyleOptions); +// mAMap.setCustomMapStyle(customMapStyleOptions); //设置希望展示的地图缩放级别 mAMap.moveCamera(mCameraUpdate); @@ -215,9 +241,6 @@ public class SmallMapDirectionView // mAMap.setCustomMapStyle(customMapStyleOptions1); // mAMapNaviView.getMap().setPointToCenter(mAMapNaviView.getWidth() / 2, mAMapNaviView.getHeight() / 2); // }); - //设置全览模式 - mAMapNaviView.displayOverview(); - int strategy = 0; try { //再次强调,最后一个参数为true时代表多路径,否则代表单路径 @@ -225,6 +248,8 @@ public class SmallMapDirectionView } catch (Exception e) { e.printStackTrace(); } + Log.d(TAG, "calculateDriveRoute:" + sList.toString() + "," + eList.toString() + "," + mWayPointList.toString()); + //指定路径绘制导航路线 mAMapNavi.calculateDriveRoute(sList, eList, mWayPointList, strategy); } @@ -249,7 +274,6 @@ public class SmallMapDirectionView // } CameraPosition cameraPosition; - float tilt = 20f; if (mCoordinatesLatLng.size() > 1) { // mCoordinatesLatLngCurrent.clear(); // for (LatLng lng : mCoordinatesLatLng) { @@ -284,7 +308,13 @@ public class SmallMapDirectionView cameraPosition = new CameraPosition.Builder().target(currentLatLng).tilt(tilt).bearing(location.getBearing()).zoom(zoomLevel).build(); // mAMap.moveCamera(CameraUpdateFactory.newLatLngZoom(currentLatLng, zoomLevel)); } - mAMap.moveCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)); +// mAMap.moveCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)); + + if (carOverlay != null) { + Log.d(TAG, "carOverlay != null"); + carOverlay.draw(mAMapNaviView.getMap(), new LatLng(mStartLatlng.getLatitude(), mStartLatlng.getLongitude()), location.getBearing()); + } + } private void removeLocation(Location latLng) { @@ -420,6 +450,23 @@ public class SmallMapDirectionView if (mAMapNaviView != null) { mAMapNaviView.onDestroy(); } + //since 1.6.0 不再在naviview destroy的时候自动执行AMapNavi.stopNavi();请自行执行 + if (mAMapNavi != null) { + mAMapNavi.stopNavi(); + mAMapNavi.destroy(); + } + if (carOverlay != null) { + carOverlay.destroy(); + } + + if (routeOverLay != null) { + routeOverLay.removeFromMap(); + routeOverLay.destroy(); + } + + if (mAMapNaviView != null) { + mAMapNaviView.onDestroy(); + } } public void convert(List coordinates) { @@ -430,9 +477,231 @@ public class SmallMapDirectionView } @Override - public void notifyParallelRoad(AMapNaviParallelRoadStatus aMapNaviParallelRoadStatus) { + public void onCalculateRouteSuccess(int[] ints) { + Log.d(TAG, "onCalculateRouteSuccess int"); + AMapNaviPath naviPath = mAMapNavi.getNaviPath(); + if (naviPath != null) { + Log.d(TAG, "naviPath != null"); + if (routeOverLay == null) { + Log.d(TAG, "routeOverLay == null"); + // 初始化路线参数 + routeOverLay = new RouteOverLay(mAMapNaviView.getMap(), naviPath, mContext); + routeOverLay.setWayPointBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.icon_module_small_map_four_corners)); + routeOverLay.setEndPointBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.module_small_map_view_dir_end)); + routeOverLay.setStartPointBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.module_small_map_view_dir_start)); + //自定义样式 + RouteOverlayOptions routeOverlayOptions = new RouteOverlayOptions(); + //驶过路段擦除 + routeOverlayOptions.setPassRoute(BitmapFactory.decodeResource(getResources(), R.drawable.module_small_map_view_dir_pass_route)); + routeOverlayOptions.setSmoothTraffic(BitmapFactory.decodeResource(getResources(), R.drawable.custtexture_green));//通畅路段 + routeOverlayOptions.setSlowTraffic(BitmapFactory.decodeResource(getResources(), R.drawable.custtexture_slow));//缓慢路段 + routeOverlayOptions.setJamTraffic(BitmapFactory.decodeResource(getResources(), R.drawable.custtexture_bad));//拥堵路段 + routeOverlayOptions.setVeryJamTraffic(BitmapFactory.decodeResource(getResources(), R.drawable.custtexture_grayred));//超级拥堵路段 + routeOverLay.setRouteOverlayOptions(routeOverlayOptions); + } + if (routeOverLay != null) { + Log.d(TAG, "routeOverLay != null"); + routeOverLay.setAMapNaviPath(naviPath); + routeOverLay.addToMap(); + } + float bearing = NaviUtil.getRotate(mStartLatlng, naviPath.getCoordList().get(1)); + if (mStartLatlng != null) { + Log.d(TAG, "mStartLatlng != null"); + carOverlay.reset(); + /** + * 绘制自车位置 + */ + carOverlay.draw(mAMapNaviView.getMap(), new LatLng(mStartLatlng.getLatitude(), mStartLatlng.getLongitude()), bearing); + if (naviPath.getEndPoint() != null) { + LatLng latlng = new LatLng(naviPath.getEndPoint().getLatitude(), naviPath.getEndPoint().getLongitude()); + carOverlay.setEndPoi(latlng); + } + } + } } + @Override + public void onInitNaviFailure() { + Log.d(TAG, "onInitNaviFailure"); + } + + @Override + public void onInitNaviSuccess() { + Log.d(TAG, "onInitNaviSuccess"); + + } + + @Override + public void onStartNavi(int i) { + Log.d(TAG, "onStartNavi"); + + } + + @Override + public void onTrafficStatusUpdate() { + + } + + @Override + public void onLocationChange(AMapNaviLocation aMapNaviLocation) { + Log.d(TAG, "onLocationChange"); + } + + @Override + public void onGetNavigationText(int i, String s) { + Log.d(TAG, "onGetNavigationText int"); + } + + @Override + public void onGetNavigationText(String s) { + Log.d(TAG, "onGetNavigationText ss"); + + } + + @Override + public void onEndEmulatorNavi() { + Log.d(TAG, "onEndEmulatorNavi"); + } + + @Override + public void onArriveDestination() { + Log.d(TAG, "onArriveDestination"); + } + + @Override + public void onCalculateRouteFailure(int i) { + Log.d(TAG, "onCalculateRouteFailure"); + } + + @Override + public void onReCalculateRouteForYaw() { + Log.d(TAG, "onReCalculateRouteForYaw"); + } + + @Override + public void onReCalculateRouteForTrafficJam() { + Log.d(TAG, "onReCalculateRouteForTrafficJam"); + } + + @Override + public void onArrivedWayPoint(int i) { + Log.d(TAG, "onArrivedWayPoint"); + } + + @Override + public void onGpsOpenStatus(boolean b) { + Log.d(TAG, "onGpsOpenStatus"); + } + + @Override + public void onNaviInfoUpdate(NaviInfo naviInfo) { + Log.d(TAG, "onNaviInfoUpdate"); + } + + @Override + public void onNaviInfoUpdated(AMapNaviInfo aMapNaviInfo) { + Log.d(TAG, "onNaviInfoUpdated"); + } + + @Override + public void updateCameraInfo(AMapNaviCameraInfo[] aMapNaviCameraInfos) { + Log.d(TAG, "updateCameraInfo"); + } + + @Override + public void updateIntervalCameraInfo(AMapNaviCameraInfo aMapNaviCameraInfo, AMapNaviCameraInfo aMapNaviCameraInfo1, int i) { + Log.d(TAG, "updateIntervalCameraInfo"); + } + + @Override + public void onServiceAreaUpdate(AMapServiceAreaInfo[] aMapServiceAreaInfos) { + Log.d(TAG, "onServiceAreaUpdate"); + } + + @Override + public void showCross(AMapNaviCross aMapNaviCross) { + Log.d(TAG, "showCross"); + } + + @Override + public void hideCross() { + Log.d(TAG, "hideCross"); + } + + @Override + public void showModeCross(AMapModelCross aMapModelCross) { + Log.d(TAG, "showModeCross"); + } + + @Override + public void hideModeCross() { + Log.d(TAG, "hideModeCross"); + } + + @Override + public void showLaneInfo(AMapLaneInfo[] aMapLaneInfos, byte[] bytes, byte[] bytes1) { + Log.d(TAG, "showLaneInfo"); + } + + @Override + public void showLaneInfo(AMapLaneInfo aMapLaneInfo) { + Log.d(TAG, "showLaneInfo"); + } + + @Override + public void hideLaneInfo() { + Log.d(TAG, "hideLaneInfo"); + } + + @Override + public void notifyParallelRoad(int i) { + + } + + @Override + public void OnUpdateTrafficFacility(AMapNaviTrafficFacilityInfo[] aMapNaviTrafficFacilityInfos) { + + } + + @Override + public void OnUpdateTrafficFacility(AMapNaviTrafficFacilityInfo aMapNaviTrafficFacilityInfo) { + + } + + @Override + public void OnUpdateTrafficFacility(TrafficFacilityInfo trafficFacilityInfo) { + + } + + @Override + public void updateAimlessModeStatistics(AimLessModeStat aimLessModeStat) { + + } + + @Override + public void updateAimlessModeCongestionInfo(AimLessModeCongestionInfo aimLessModeCongestionInfo) { + + } + + @Override + public void onPlayRing(int i) { + + } + + @Override + public void onCalculateRouteSuccess(AMapCalcRouteResult aMapCalcRouteResult) { + Log.d(TAG, "onCalculateRouteSuccess aMapCalcRouteResult" + aMapCalcRouteResult.toString()); + } + + @Override + public void onCalculateRouteFailure(AMapCalcRouteResult aMapCalcRouteResult) { + Log.d(TAG, "onCalculateRouteFailure"); + } + + @Override + public void onNaviRouteNotify(AMapNaviRouteNotifyData aMapNaviRouteNotifyData) { + Log.d(TAG, "onNaviRouteNotify"); + } } diff --git a/core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi-2560x1440/custtexture_bad.png b/core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi-2560x1440/custtexture_bad.png new file mode 100644 index 0000000000000000000000000000000000000000..d5d1e9d9500e9206bc5d8e4ad60d7b39a407a6d7 GIT binary patch literal 162 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJOivfbkcwMxuW#gSFyL_s>=$&8 zR1)40{OHVa1D1;$7*DiKyRc({Q~9O*wby5z*r?mG()jg_d7GowW-0ZDq%2#1J$cJU xQ`O5sXQHZEfySYN|I9jP+Qkd@KVSa+9qXsm1K#iI66HWjJYD@<);T3K0RZ#{If(!O literal 0 HcmV?d00001 diff --git a/core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi-2560x1440/custtexture_grayred.png b/core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi-2560x1440/custtexture_grayred.png new file mode 100644 index 0000000000000000000000000000000000000000..dbc7b4bd2bc3222dedc199cf8007aa38345f5410 GIT binary patch literal 396 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 literal 0 HcmV?d00001 diff --git a/core/function-impl/mogo-core-function-map/src/main/res/layout/module_small_map_view.xml b/core/function-impl/mogo-core-function-map/src/main/res/layout/module_small_map_view.xml index a14430dd88..ac5ed7b135 100644 --- a/core/function-impl/mogo-core-function-map/src/main/res/layout/module_small_map_view.xml +++ b/core/function-impl/mogo-core-function-map/src/main/res/layout/module_small_map_view.xml @@ -27,6 +27,17 @@ android:id="@+id/aMapNaviView" android:layout_width="match_parent" android:layout_height="match_parent" /> + + + \ No newline at end of file From 625987a19bdc2adaccf9e4a8540cfdc5b16d4777 Mon Sep 17 00:00:00 2001 From: liujing Date: Tue, 21 Jun 2022 23:33:18 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89=E8=B7=AF?= =?UTF-8?q?=E7=BA=BF=E7=BA=B9=E7=90=86,=E6=A8=A1=E6=8B=9F=E6=95=B0?= =?UTF-8?q?=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../function/smp/SmallMapDirectionView.java | 143 +++++++++++++----- 1 file changed, 105 insertions(+), 38 deletions(-) diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/SmallMapDirectionView.java b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/SmallMapDirectionView.java index c5e962f0e3..52e63d78fe 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/SmallMapDirectionView.java +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/SmallMapDirectionView.java @@ -39,6 +39,7 @@ import com.amap.api.navi.AMapNaviViewListener; import com.amap.api.navi.AMapNaviViewOptions; import com.amap.api.navi.ParallelRoadListener; import com.amap.api.navi.enums.AMapNaviParallelRoadStatus; +import com.amap.api.navi.enums.NaviType; import com.amap.api.navi.model.AMapCalcRouteResult; import com.amap.api.navi.model.AMapLaneInfo; import com.amap.api.navi.model.AMapModelCross; @@ -80,7 +81,7 @@ import java.util.List; */ public class SmallMapDirectionView extends RelativeLayout - implements IMoGoMapLocationListener, ISmallMapDirectionView, AMapNaviListener { + implements IMoGoMapLocationListener, ISmallMapDirectionView, AMapNaviListener, AMapNaviViewListener { //小地图名称 public static final String TAG = "SmallMapDirectionView"; @@ -142,12 +143,13 @@ public class SmallMapDirectionView mWayPointList.add(new NaviLatLng(26.81931096, 112.57279149)); View smpView = LayoutInflater.from(context).inflate(R.layout.module_small_map_view, this); - mAMapNaviView = smpView.findViewById(R.id.aMapNaviView); overLayerView = findViewById(R.id.overLayer); mAMapNavi = AMapNavi.getInstance(context); - mAMapNavi.setUseInnerVoice(true, true); +// mAMapNavi.setUseInnerVoice(true, true); + mAMapNavi.addAMapNaviListener(this); + mAMapNaviView.setAMapNaviViewListener(this); // rlSmallMapBorder = findViewById(R.id.rlSmallMapBorder); // rlSmallMapBorder.addView(mAMapNaviView); initAMapView(context); @@ -194,8 +196,6 @@ public class SmallMapDirectionView AMapNaviViewOptions options = mAMapNaviView.getViewOptions(); //不显示导航界面 options.setLayoutVisible(false); - //打开走过的路段自定义 - options.setAfterRouteAutoGray(true); //黑夜模式 options.setNaviNight(true); //导航全程光柱 @@ -207,11 +207,21 @@ public class SmallMapDirectionView //自车车标 options.setCarBitmap(BitmapFactory.decodeResource(this.getResources(), R.drawable.module_small_map_view_my_location_logo)); options.setFourCornersBitmap(BitmapFactory.decodeResource(this.getResources(), R.drawable.module_small_map_view_border_north)); -// options.setStartPointBitmap(BitmapFactory.decodeResource(this.getResources(), R.drawable.module_small_map_view_dir_start)); - //options.setWayPointBitmap(BitmapFactory.decodeResource(this.getResources(), R.drawable.navi_way)); -// options.setEndPointBitmap(BitmapFactory.decodeResource(this.getResources(), R.drawable.module_small_map_view_dir_end)); - mAMapNaviView.setViewOptions(options); + options.setStartPointBitmap(BitmapFactory.decodeResource(this.getResources(), R.drawable.module_small_map_view_dir_start)); +// options.setWayPointBitmap(BitmapFactory.decodeResource(this.getResources(), R.drawable.navi_way)); + options.setEndPointBitmap(BitmapFactory.decodeResource(this.getResources(), R.drawable.module_small_map_view_dir_end)); + options.setAfterRouteAutoGray(true); + RouteOverlayOptions routeOverlayOptions = new RouteOverlayOptions(); + routeOverlayOptions.setSmoothTraffic(BitmapFactory.decodeResource(getResources(), R.drawable.module_small_map_view_dir_pass_route)); + routeOverlayOptions.setPassRoute(BitmapFactory.decodeResource(getResources(), R.drawable.custtexture_slow));//走过的路段 + + //打开走过的路段自定义 + if (routeOverlayOptions != null) { + Log.d(TAG, "routeOverlayOptions != null"); + } + options.setRouteOverlayOptions(routeOverlayOptions); + mAMapNaviView.setViewOptions(options); // 设置自定义样式 // mAMap.setCustomMapStyle(customMapStyleOptions); @@ -262,6 +272,7 @@ public class SmallMapDirectionView @Override public void onLocationChanged(@org.jetbrains.annotations.Nullable MogoLocation location, int from) { + Log.d(TAG, "onLocationChanged location:" + location.toString()); if (location == null) { return; } @@ -476,6 +487,7 @@ public class SmallMapDirectionView mCoordinatesLatLng.addAll(latLngs); } + //多路径算路成功回调 @Override public void onCalculateRouteSuccess(int[] ints) { Log.d(TAG, "onCalculateRouteSuccess int"); @@ -485,39 +497,37 @@ public class SmallMapDirectionView if (routeOverLay == null) { Log.d(TAG, "routeOverLay == null"); // 初始化路线参数 - routeOverLay = new RouteOverLay(mAMapNaviView.getMap(), naviPath, mContext); - routeOverLay.setWayPointBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.icon_module_small_map_four_corners)); - routeOverLay.setEndPointBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.module_small_map_view_dir_end)); - routeOverLay.setStartPointBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.module_small_map_view_dir_start)); +// routeOverLay = new RouteOverLay(mAMapNaviView.getMap(), naviPath, mContext); +// routeOverLay.setWayPointBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.icon_module_small_map_four_corners)); +// routeOverLay.setEndPointBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.module_small_map_view_dir_end)); +// routeOverLay.setStartPointBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.module_small_map_view_dir_start)); //自定义样式 - RouteOverlayOptions routeOverlayOptions = new RouteOverlayOptions(); +// RouteOverlayOptions routeOverlayOptions = new RouteOverlayOptions(); //驶过路段擦除 - routeOverlayOptions.setPassRoute(BitmapFactory.decodeResource(getResources(), R.drawable.module_small_map_view_dir_pass_route)); - routeOverlayOptions.setSmoothTraffic(BitmapFactory.decodeResource(getResources(), R.drawable.custtexture_green));//通畅路段 - routeOverlayOptions.setSlowTraffic(BitmapFactory.decodeResource(getResources(), R.drawable.custtexture_slow));//缓慢路段 - routeOverlayOptions.setJamTraffic(BitmapFactory.decodeResource(getResources(), R.drawable.custtexture_bad));//拥堵路段 - routeOverlayOptions.setVeryJamTraffic(BitmapFactory.decodeResource(getResources(), R.drawable.custtexture_grayred));//超级拥堵路段 - routeOverLay.setRouteOverlayOptions(routeOverlayOptions); - } - if (routeOverLay != null) { - Log.d(TAG, "routeOverLay != null"); - routeOverLay.setAMapNaviPath(naviPath); - routeOverLay.addToMap(); +// routeOverlayOptions.setPassRoute(BitmapFactory.decodeResource(getResources(), R.drawable.module_small_map_view_dir_pass_route)); +// routeOverlayOptions.setSmoothTraffic(BitmapFactory.decodeResource(getResources(), R.drawable.custtexture_slow));//通畅路段 +// routeOverLay.setRouteOverlayOptions(routeOverlayOptions); } +// if (routeOverLay != null) { +// Log.d(TAG, "routeOverLay != null"); +// routeOverLay.setAMapNaviPath(naviPath); +// routeOverLay.addToMap(); +// } float bearing = NaviUtil.getRotate(mStartLatlng, naviPath.getCoordList().get(1)); - if (mStartLatlng != null) { - Log.d(TAG, "mStartLatlng != null"); - carOverlay.reset(); - /** - * 绘制自车位置 - */ - carOverlay.draw(mAMapNaviView.getMap(), new LatLng(mStartLatlng.getLatitude(), mStartLatlng.getLongitude()), bearing); - if (naviPath.getEndPoint() != null) { - LatLng latlng = new LatLng(naviPath.getEndPoint().getLatitude(), naviPath.getEndPoint().getLongitude()); - carOverlay.setEndPoi(latlng); - } - } +// if (mStartLatlng != null) { +// Log.d(TAG, "mStartLatlng != null"); +// carOverlay.reset(); +// /** +// * 绘制自车位置 +// */ +// carOverlay.draw(mAMapNaviView.getMap(), new LatLng(mStartLatlng.getLatitude(), mStartLatlng.getLongitude()), bearing); +// if (naviPath.getEndPoint() != null) { +// LatLng latlng = new LatLng(naviPath.getEndPoint().getLatitude(), naviPath.getEndPoint().getLongitude()); +// carOverlay.setEndPoi(latlng); +// } +// } +// mAMapNavi.startNavi(NaviType.EMULATOR); } } @@ -546,7 +556,7 @@ public class SmallMapDirectionView @Override public void onLocationChange(AMapNaviLocation aMapNaviLocation) { - Log.d(TAG, "onLocationChange"); + Log.d(TAG, "高德地图:onLocationChange"); } @Override @@ -690,9 +700,11 @@ public class SmallMapDirectionView } + //算路详情 @Override public void onCalculateRouteSuccess(AMapCalcRouteResult aMapCalcRouteResult) { Log.d(TAG, "onCalculateRouteSuccess aMapCalcRouteResult" + aMapCalcRouteResult.toString()); + mAMapNavi.startNavi(NaviType.EMULATOR); } @Override @@ -704,4 +716,59 @@ public class SmallMapDirectionView public void onNaviRouteNotify(AMapNaviRouteNotifyData aMapNaviRouteNotifyData) { Log.d(TAG, "onNaviRouteNotify"); } + + @Override + public void onNaviSetting() { + + } + + @Override + public void onNaviCancel() { + + } + + @Override + public boolean onNaviBackClick() { + return false; + } + + @Override + public void onNaviMapMode(int i) { + + } + + @Override + public void onNaviTurnClick() { + + } + + @Override + public void onNextRoadClick() { + + } + + @Override + public void onScanViewButtonClick() { + + } + + @Override + public void onLockMap(boolean b) { + + } + + @Override + public void onNaviViewLoaded() { + + } + + @Override + public void onMapTypeChanged(int i) { + + } + + @Override + public void onNaviViewShowMode(int i) { + + } } From 1aa40126b2b2f5b62b08fad9c538232da214eda7 Mon Sep 17 00:00:00 2001 From: liujing Date: Thu, 23 Jun 2022 20:11:56 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E9=AB=98=E5=BE=B7=E5=AF=BC=E8=88=AA?= =?UTF-8?q?=E8=B7=AF=E5=BE=84=E8=A7=84=E5=88=92,=E8=B7=AF=E7=AE=97?= =?UTF-8?q?=E8=83=BD=E5=8A=9B=E9=85=8D=E5=90=88=E8=87=AA=E5=8A=A8=E9=A9=BE?= =?UTF-8?q?=E9=A9=B6=E7=8A=B6=E6=80=81,=E6=A8=A1=E6=8B=9F=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E6=B7=BB=E5=8A=A0=E9=AA=8C=E8=AF=81,GPS=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E4=B8=8B=E5=AE=9E=E7=8E=B0=E8=B7=AF=E5=BE=84=E6=93=A6?= =?UTF-8?q?=E9=99=A4=E8=83=BD=E5=8A=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hmi/ui/setting/DebugSettingView.kt | 2 +- .../eagle/core/function/smp/CarOverlay.java | 5 +- .../function/smp/SmallMapDirectionView.java | 182 +++++++----------- 3 files changed, 74 insertions(+), 115 deletions(-) diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt index 29b3a37abe..5866b48885 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt @@ -776,7 +776,7 @@ class DebugSettingView @JvmOverloads constructor( SharedPrefsMgr.getInstance(context) .getString(MoGoConfig.AUTOPILOT_IP, FunctionBuildConfig.adasConnectIP) - etAutopilotIP.setText("172.30.10.10:41102") + etAutopilotIP.setText("192.168.1.102") etAutopilotIP.text?.let { etAutopilotIP.setSelection(it.length) } //设置工控机IP btnSetAutopilotIP.setOnClickListener { diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/CarOverlay.java b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/CarOverlay.java index ac995a7013..3f022fbf8b 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/CarOverlay.java +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/CarOverlay.java @@ -13,6 +13,7 @@ import com.amap.api.maps.model.LatLng; import com.amap.api.maps.model.Marker; import com.amap.api.maps.model.MarkerOptions; import com.amap.api.maps.model.Polyline; +import com.amap.api.navi.AMapNaviView; import com.autonavi.amap.mapcore.IPoint; import com.mogo.eagle.core.function.map.R; @@ -49,7 +50,7 @@ public class CarOverlay { protected Marker carMarker; protected Marker directionMarker; protected AMap mAmap = null; - protected TextureMapView mapView; + protected AMapNaviView mapView; protected boolean isDirectionVisible = true; protected LatLng endLatLng = null; protected Polyline leaderLine = null; @@ -61,7 +62,7 @@ public class CarOverlay { private ScheduledExecutorService executorService; - public CarOverlay(Context context, TextureMapView mapView) { + public CarOverlay(Context context, AMapNaviView mapView) { this.mapView = mapView; fourCornersDescriptor = BitmapDescriptorFactory.fromBitmap(BitmapFactory diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/SmallMapDirectionView.java b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/SmallMapDirectionView.java index 52e63d78fe..a64f44f612 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/SmallMapDirectionView.java +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/SmallMapDirectionView.java @@ -61,6 +61,7 @@ import com.autonavi.tbt.TrafficFacilityInfo; import com.mogo.cloud.commons.utils.CoordinateUtils; import com.mogo.eagle.core.data.map.MogoLatLng; import com.mogo.eagle.core.data.map.MogoLocation; +import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotPlanningListener; import com.mogo.eagle.core.function.api.map.listener.IMoGoMapLocationListener; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.eagle.core.function.call.map.CallerMapLocationListenerManager; @@ -70,18 +71,22 @@ import com.mogo.eagle.core.function.smp.view.ISmallMapDirectionView; import com.mogo.eagle.core.widget.RoundLayout; import com.mogo.module.common.utils.DrivingDirectionUtils; +import org.jetbrains.annotations.NotNull; + import java.util.ArrayList; import java.util.List; +import mogo.telematics.pad.MessagePad; + /** * 小地图的方向View - * + * 监听自动驾驶路径结束,结束高德地图导航 * @author donghongyu * @date 12/14/20 4:40 PM */ public class SmallMapDirectionView extends RelativeLayout - implements IMoGoMapLocationListener, ISmallMapDirectionView, AMapNaviListener, AMapNaviViewListener { + implements IMoGoMapLocationListener, ISmallMapDirectionView, AMapNaviListener, AMapNaviViewListener, IMoGoAutopilotPlanningListener { //小地图名称 public static final String TAG = "SmallMapDirectionView"; @@ -90,11 +95,16 @@ public class SmallMapDirectionView private AMapNaviView mAMapNaviView; protected AMapNavi mAMapNavi; private AMap mAMap; - private Marker mCarMarker; + // private Marker mCarMarker; // private Marker mStartMarker; // private Marker mEndMarker; - protected NaviLatLng mEndLatlng = new NaviLatLng(26.817455, 112.579649); - protected NaviLatLng mStartLatlng = new NaviLatLng(26.818968, 112.571216); + //328路线测试数据 + protected NaviLatLng mStartLatlng = new NaviLatLng(39.969111, 116.411903); + protected NaviLatLng mEndLatlng = new NaviLatLng(40.037209, 116.314358); + + //顺义国展测试数据 +// protected NaviLatLng mStartLatlng = new NaviLatLng(40.09383,116.51899); +// protected NaviLatLng mEndLatlng = new NaviLatLng(40.09964,116.54570); protected final List sList = new ArrayList(); protected final List eList = new ArrayList(); @@ -108,10 +118,6 @@ public class SmallMapDirectionView private Context mContext; private float tilt = 20f; private TextView overLayerView; - //自车位置,待定是否使用该类实现 - private CarOverlay carOverlay; - //路线Overlay - private RouteOverLay routeOverLay; public SmallMapDirectionView(Context context) { this(context, null); @@ -134,26 +140,36 @@ public class SmallMapDirectionView mContext = context; sList.add(mStartLatlng); eList.add(mEndLatlng); - //测试代码:路线指定路径 - mWayPointList.add(new NaviLatLng(26.81930638, 112.57276816)); - mWayPointList.add(new NaviLatLng(26.81930735, 112.57277308)); - mWayPointList.add(new NaviLatLng(26.81930829, 112.57277782)); - mWayPointList.add(new NaviLatLng(26.81930947, 112.57278384)); - mWayPointList.add(new NaviLatLng(26.81931044, 112.57278879)); - mWayPointList.add(new NaviLatLng(26.81931096, 112.57279149)); + //测试代码:路线指定路径328线路 + mWayPointList.add(new NaviLatLng(39.968847, 116.406952)); + mWayPointList.add(new NaviLatLng(39.969058, 116.407346)); + mWayPointList.add(new NaviLatLng(39.968955, 116.401767)); + mWayPointList.add(new NaviLatLng(39.968626, 116.394938)); + mWayPointList.add(new NaviLatLng(39.968433, 116.388725)); + mWayPointList.add(new NaviLatLng(39.968542, 116.383775)); + mWayPointList.add(new NaviLatLng(40.037808, 116.342539)); + mWayPointList.add(new NaviLatLng(40.037239, 116.337172)); + mWayPointList.add(new NaviLatLng(40.035897, 116.329582)); + mWayPointList.add(new NaviLatLng(40.036396, 116.322166)); + + //顺义国展路线 +// mWayPointList.add(new NaviLatLng(40.097621,116.526495)); +// mWayPointList.add(new NaviLatLng(40.097982,116.529135)); +// mWayPointList.add(new NaviLatLng(40.098434,116.531903)); +// mWayPointList.add(new NaviLatLng(40.098828,116.534563)); +// mWayPointList.add(new NaviLatLng(40.099377,116.538651)); +// mWayPointList.add(new NaviLatLng(40.099927,116.54173)); View smpView = LayoutInflater.from(context).inflate(R.layout.module_small_map_view, this); mAMapNaviView = smpView.findViewById(R.id.aMapNaviView); overLayerView = findViewById(R.id.overLayer); mAMapNavi = AMapNavi.getInstance(context); // mAMapNavi.setUseInnerVoice(true, true); - mAMapNavi.addAMapNaviListener(this); mAMapNaviView.setAMapNaviViewListener(this); // rlSmallMapBorder = findViewById(R.id.rlSmallMapBorder); // rlSmallMapBorder.addView(mAMapNaviView); initAMapView(context); - // 注册定位监听 CallerMapLocationListenerManager.INSTANCE.addListener(TAG, this); //设置全览模式 @@ -174,26 +190,9 @@ public class SmallMapDirectionView */ private void initAMapView(Context context) { mCameraUpdate = CameraUpdateFactory.zoomTo(zoomLevel); - mAMap = mAMapNaviView.getMap(); - // 地图文字标注 - mAMap.showMapText(true); - // 显示实时路况图层,aMap是地图控制器对象。 - mAMap.setTrafficEnabled(true); - // 设置 锚点 图标 -// mCarMarker = mAMap.addMarker(new MarkerOptions() -// .icon(BitmapDescriptorFactory.fromResource(R.drawable.module_small_map_view_my_location_logo)) -// .anchor(0.5f, 0.5f)); -// mStartMarker = mAMap.addMarker(new MarkerOptions() -// .icon(BitmapDescriptorFactory.fromResource(R.drawable.module_small_map_view_dir_start))); -// mEndMarker = mAMap.addMarker(new MarkerOptions() -// .icon(BitmapDescriptorFactory.fromResource(R.drawable.module_small_map_view_dir_end))); - // 加载自定义样式 -// CustomMapStyleOptions customMapStyleOptions = new CustomMapStyleOptions() -// .setEnable(true) -// .setStyleData(MapAssetStyleUtils.getAssetsStyle(getContext())) -// .setStyleExtraData(MapAssetStyleUtils.getAssetsExtraStyle(getContext())); - AMapNaviViewOptions options = mAMapNaviView.getViewOptions(); + //关闭自动绘制路线,自行绘制路线 +// options.setAutoDrawRoute(false); //不显示导航界面 options.setLayoutVisible(false); //黑夜模式 @@ -202,29 +201,30 @@ public class SmallMapDirectionView options.setTrafficBarEnabled(false); //指南针 options.setCompassEnabled(false); - //关闭自动绘制路线,自行绘制路线 - options.setAutoDrawRoute(false); + //只做一次算路 +// options.setO + options.setTilt((int) tilt); //自车车标 options.setCarBitmap(BitmapFactory.decodeResource(this.getResources(), R.drawable.module_small_map_view_my_location_logo)); options.setFourCornersBitmap(BitmapFactory.decodeResource(this.getResources(), R.drawable.module_small_map_view_border_north)); options.setStartPointBitmap(BitmapFactory.decodeResource(this.getResources(), R.drawable.module_small_map_view_dir_start)); -// options.setWayPointBitmap(BitmapFactory.decodeResource(this.getResources(), R.drawable.navi_way)); + options.setWayPointBitmap(BitmapFactory.decodeResource(this.getResources(), R.drawable.icon_module_small_map_four_corners)); options.setEndPointBitmap(BitmapFactory.decodeResource(this.getResources(), R.drawable.module_small_map_view_dir_end)); + //与走过的路线 options.setAfterRouteAutoGray(true); - + //路线纹理自定义 RouteOverlayOptions routeOverlayOptions = new RouteOverlayOptions(); + routeOverlayOptions.setTurnArrowIs3D(false); routeOverlayOptions.setSmoothTraffic(BitmapFactory.decodeResource(getResources(), R.drawable.module_small_map_view_dir_pass_route)); routeOverlayOptions.setPassRoute(BitmapFactory.decodeResource(getResources(), R.drawable.custtexture_slow));//走过的路段 - - //打开走过的路段自定义 - if (routeOverlayOptions != null) { - Log.d(TAG, "routeOverlayOptions != null"); - } options.setRouteOverlayOptions(routeOverlayOptions); mAMapNaviView.setViewOptions(options); - // 设置自定义样式 -// mAMap.setCustomMapStyle(customMapStyleOptions); + mAMap = mAMapNaviView.getMap(); + // 地图文字标注 + mAMap.showMapText(true); + // 显示实时路况图层,aMap是地图控制器对象。 + mAMap.setTrafficEnabled(true); //设置希望展示的地图缩放级别 mAMap.moveCamera(mCameraUpdate); //设置地图的样式 @@ -241,16 +241,6 @@ public class SmallMapDirectionView uiSettings.setMyLocationButtonEnabled(false); //设置Logo下边界距离屏幕底部的边距,设置为负值即可 uiSettings.setLogoBottomMargin(-150); -// mAMap.setOnMapLoadedListener(() -> { -// // 加载自定义样式 -// CustomMapStyleOptions customMapStyleOptions1 = new CustomMapStyleOptions() -// .setEnable(true) -// .setStyleData(MapAssetStyleUtils.getAssetsStyle(getContext())) -// .setStyleExtraData(MapAssetStyleUtils.getAssetsExtraStyle(getContext())); -// // 设置自定义样式 -// mAMap.setCustomMapStyle(customMapStyleOptions1); -// mAMapNaviView.getMap().setPointToCenter(mAMapNaviView.getWidth() / 2, mAMapNaviView.getHeight() / 2); -// }); int strategy = 0; try { //再次强调,最后一个参数为true时代表多路径,否则代表单路径 @@ -272,7 +262,7 @@ public class SmallMapDirectionView @Override public void onLocationChanged(@org.jetbrains.annotations.Nullable MogoLocation location, int from) { - Log.d(TAG, "onLocationChanged location:" + location.toString()); +// Log.d(TAG, "onLocationChanged location:" + location.toString()); if (location == null) { return; } @@ -321,10 +311,11 @@ public class SmallMapDirectionView } // mAMap.moveCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)); - if (carOverlay != null) { - Log.d(TAG, "carOverlay != null"); - carOverlay.draw(mAMapNaviView.getMap(), new LatLng(mStartLatlng.getLatitude(), mStartLatlng.getLongitude()), location.getBearing()); - } +// if (carOverlay != null) { +// Log.d(TAG, "carOverlay != null"); +// LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude()); +// carOverlay.draw(mAMapNaviView.getMap(), latLng, location.getBearing()); +// } } @@ -466,15 +457,6 @@ public class SmallMapDirectionView mAMapNavi.stopNavi(); mAMapNavi.destroy(); } - if (carOverlay != null) { - carOverlay.destroy(); - } - - if (routeOverLay != null) { - routeOverLay.removeFromMap(); - routeOverLay.destroy(); - } - if (mAMapNaviView != null) { mAMapNaviView.onDestroy(); } @@ -491,44 +473,6 @@ public class SmallMapDirectionView @Override public void onCalculateRouteSuccess(int[] ints) { Log.d(TAG, "onCalculateRouteSuccess int"); - AMapNaviPath naviPath = mAMapNavi.getNaviPath(); - if (naviPath != null) { - Log.d(TAG, "naviPath != null"); - if (routeOverLay == null) { - Log.d(TAG, "routeOverLay == null"); - // 初始化路线参数 -// routeOverLay = new RouteOverLay(mAMapNaviView.getMap(), naviPath, mContext); -// routeOverLay.setWayPointBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.icon_module_small_map_four_corners)); -// routeOverLay.setEndPointBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.module_small_map_view_dir_end)); -// routeOverLay.setStartPointBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.module_small_map_view_dir_start)); - - //自定义样式 -// RouteOverlayOptions routeOverlayOptions = new RouteOverlayOptions(); - //驶过路段擦除 -// routeOverlayOptions.setPassRoute(BitmapFactory.decodeResource(getResources(), R.drawable.module_small_map_view_dir_pass_route)); -// routeOverlayOptions.setSmoothTraffic(BitmapFactory.decodeResource(getResources(), R.drawable.custtexture_slow));//通畅路段 -// routeOverLay.setRouteOverlayOptions(routeOverlayOptions); - } -// if (routeOverLay != null) { -// Log.d(TAG, "routeOverLay != null"); -// routeOverLay.setAMapNaviPath(naviPath); -// routeOverLay.addToMap(); -// } - float bearing = NaviUtil.getRotate(mStartLatlng, naviPath.getCoordList().get(1)); -// if (mStartLatlng != null) { -// Log.d(TAG, "mStartLatlng != null"); -// carOverlay.reset(); -// /** -// * 绘制自车位置 -// */ -// carOverlay.draw(mAMapNaviView.getMap(), new LatLng(mStartLatlng.getLatitude(), mStartLatlng.getLongitude()), bearing); -// if (naviPath.getEndPoint() != null) { -// LatLng latlng = new LatLng(naviPath.getEndPoint().getLatitude(), naviPath.getEndPoint().getLongitude()); -// carOverlay.setEndPoi(latlng); -// } -// } -// mAMapNavi.startNavi(NaviType.EMULATOR); - } } @@ -556,7 +500,8 @@ public class SmallMapDirectionView @Override public void onLocationChange(AMapNaviLocation aMapNaviLocation) { - Log.d(TAG, "高德地图:onLocationChange"); + Log.d(TAG, "高德地图经纬度:" + aMapNaviLocation.getCoord().getLongitude() + "," + aMapNaviLocation.getCoord().getLatitude()); + } @Override @@ -704,7 +649,7 @@ public class SmallMapDirectionView @Override public void onCalculateRouteSuccess(AMapCalcRouteResult aMapCalcRouteResult) { Log.d(TAG, "onCalculateRouteSuccess aMapCalcRouteResult" + aMapCalcRouteResult.toString()); - mAMapNavi.startNavi(NaviType.EMULATOR); + mAMapNavi.startNavi(NaviType.GPS); } @Override @@ -771,4 +716,17 @@ public class SmallMapDirectionView public void onNaviViewShowMode(int i) { } + + @Override + public void onAutopilotTrajectory(@NotNull List trajectoryInfos) { + + } + + //自动驾驶状态开启之后返回,真实路径需要确认返回时间 + //数据返回之后触发路算 + @Override + public void onAutopilotRotting(@org.jetbrains.annotations.Nullable MessagePad.GlobalPathResp globalPathResp) { + List list = globalPathResp.getWayPointsList(); + Log.d(TAG, "adas返回全路径:" + list.toString()); + } }