diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/V2XWarnDataDrawer.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/V2XWarnDataDrawer.java index 0eba5d780f..b6f0ed0894 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/V2XWarnDataDrawer.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/V2XWarnDataDrawer.java @@ -1,19 +1,26 @@ package com.mogo.module.common.drawer; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; import android.util.Log; import com.mogo.map.MogoLatLng; import com.mogo.map.marker.IMogoMarker; import com.mogo.map.marker.MogoMarkerOptions; import com.mogo.module.common.MogoApisHandler; +import com.mogo.module.common.R; +import com.mogo.module.common.drawer.marker.EmptyMarkerView; import com.mogo.module.common.drawer.marker.IMarkerView; import com.mogo.module.common.drawer.marker.MapMarkerAdapter; +import com.mogo.module.common.drawer.marker.SimpleWindow3DAdapter; import com.mogo.module.common.entity.MarkerLocation; import com.mogo.module.common.entity.MarkerShowEntity; import com.mogo.module.common.entity.V2XWarningEntity; +import com.mogo.module.common.view.MarkerBaseFloor; import com.mogo.service.statusmanager.IMogoStatusChangedListener; import com.mogo.service.statusmanager.StatusDescriptor; import com.mogo.utils.UiThreadHandler; +import com.mogo.utils.ViewUtils; import com.mogo.utils.logger.Logger; import static com.mogo.module.common.constants.DataTypes.TYPE_MARKER_CLOUD_STOP_LINE_DATA; @@ -78,15 +85,21 @@ public class V2XWarnDataDrawer extends BaseDrawer implements IMogoStatusChangedL markerShowEntity.setMarkerLocation(location); markerShowEntity.setMarkerType(TYPE_MARKER_CLOUD_WARN_DATA); + IMogoMarker bottomMarker = drawMarkerWith2Resource(markerShowEntity); IMogoMarker marker = drawMarker(markerShowEntity); Log.d("liyz", "renderWarnData marker != null direction = " + data.getDirection()); + //识别物 marker.addDynamicAnchorPosition(new MogoLatLng( data.getDirection() == 1 ? data.getStopLines().get(1).lat : data.getCollisionLat(), data.getDirection() == 1 ? data.getStopLines().get(1).lon : data.getCollisionLon()), (float) data.getHeading(), 5000); - + //识别物下方的红色圆圈 + bottomMarker.addDynamicAnchorPosition(new MogoLatLng( + data.getDirection() == 1 ? data.getStopLines().get(1).lat : data.getCollisionLat(), + data.getDirection() == 1 ? data.getStopLines().get(1).lon : data.getCollisionLon()), (float) data.getHeading(), 5000); //移动完成以后,3s后消失 UiThreadHandler.postDelayed(() -> { marker.remove(); + bottomMarker.remove(); }, 8000); } @@ -108,6 +121,25 @@ public class V2XWarnDataDrawer extends BaseDrawer implements IMogoStatusChangedL return marker; } + /* + * 2D资源绘制marker + * */ + private IMogoMarker drawMarkerWith2Resource(MarkerShowEntity markerShowEntity) { + MogoMarkerOptions optionsRipple = new MogoMarkerOptions() + .latitude(markerShowEntity.getMarkerLocation().getLat()) + .longitude(markerShowEntity.getMarkerLocation().getLon()) + .anchor(1.0f, 1.0f) + .zIndex(MarkerDrawer.MARKER_Z_INDEX_HIGH); + + optionsRipple + .icon(ViewUtils.fromView(new EmptyMarkerView(mContext))); + IMogoMarker marker = MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager(mContext).addMarker(markerShowEntity.getMarkerType(), optionsRipple); + + marker.setInfoWindowAdapter(new SimpleWindow3DAdapter(new MarkerBaseFloor(mContext))); + marker.showInfoWindow(); + return marker; + } + /** * 绘制停止线 marker * diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/view/MarkerBaseFloor.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/view/MarkerBaseFloor.java new file mode 100644 index 0000000000..d42b79ebce --- /dev/null +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/view/MarkerBaseFloor.java @@ -0,0 +1,40 @@ +package com.mogo.module.common.view; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.LayoutInflater; + +import androidx.annotation.Nullable; + +import com.mogo.module.common.R; +import com.mogo.module.common.drawer.marker.MapMarkerBaseView; +import com.mogo.module.common.entity.MarkerShowEntity; + +/** + * @author liujing + * @description 描述 + * @since: 2021/4/13 + */ +public class MarkerBaseFloor extends MapMarkerBaseView { + public MarkerBaseFloor(Context context) { + super(context); + } + + public MarkerBaseFloor(Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + } + + public MarkerBaseFloor(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + @Override + protected void initView(Context context) { + LayoutInflater.from( context ).inflate(R.layout.module_common_warning_marker_bottom, this ); + } + + @Override + public void updateView(MarkerShowEntity markerShowEntity) { + + } +} diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/common_marker_bottom_floor.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/common_marker_bottom_floor.png new file mode 100644 index 0000000000..a46f85caff Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/common_marker_bottom_floor.png differ diff --git a/modules/mogo-module-common/src/main/res/layout/module_common_warning_marker_bottom.xml b/modules/mogo-module-common/src/main/res/layout/module_common_warning_marker_bottom.xml new file mode 100644 index 0000000000..1ec9b2b6ab --- /dev/null +++ b/modules/mogo-module-common/src/main/res/layout/module_common_warning_marker_bottom.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/manager/impl/MoGoV2XCloundDataManager.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/manager/impl/MoGoV2XCloundDataManager.java index db6f53c4d2..6a7ff1d86d 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/manager/impl/MoGoV2XCloundDataManager.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/manager/impl/MoGoV2XCloundDataManager.java @@ -119,14 +119,14 @@ public class MoGoV2XCloundDataManager implements IMoGoV2XCloundDataManager, IMog * 绘制红色区域(停止线继续前行的预警区域) TODO 需要实时给行人当前位置 */ private void drawStopLine(V2XWarningEntity info, MogoLatLng mogoLatLng) { - IMogoPolyline polyLine = V2XServiceManager.getMoGoStopPolylineManager().getMogoStopPolyline(); - MogoLatLng startLatlng = new MogoLatLng(carLocation.lat, carLocation.lon); - MogoLatLng endLatlng = new MogoLatLng(mogoLatLng.lat, mogoLatLng.lon); - Log.d(V2XConst.LOG_NAME_WARN, " drawStopLine endLatlng lon =" + endLatlng.lon + "--lat =" + endLatlng.lat - + "--startLatlng lon = " + startLatlng.lon + "-lat = " + startLatlng.lat); - float distance = CoordinateUtils.calculateLineDistance(startLatlng.lon, startLatlng.lat, endLatlng.lon, endLatlng.lat); - MogoLatLng addMiddleLoc = LocationUtils.getNewLocation(startLatlng, distance / 2, mCloundWarningInfo.getAngle()); if (info != null) { + IMogoPolyline polyLine = V2XServiceManager.getMoGoStopPolylineManager().getMogoStopPolyline(); + MogoLatLng startLatlng = new MogoLatLng(carLocation.lat, carLocation.lon); + MogoLatLng endLatlng = new MogoLatLng(mogoLatLng.lat, mogoLatLng.lon); + Log.d(V2XConst.LOG_NAME_WARN, " drawStopLine endLatlng lon =" + endLatlng.lon + "--lat =" + endLatlng.lat + + "--startLatlng lon = " + startLatlng.lon + "-lat = " + startLatlng.lat); + float distance = CoordinateUtils.calculateLineDistance(startLatlng.lon, startLatlng.lat, endLatlng.lon, endLatlng.lat); + MogoLatLng addMiddleLoc = LocationUtils.getNewLocation(startLatlng, distance / 2, mCloundWarningInfo.getAngle()); if (polyLine != null) { Log.d(V2XConst.LOG_NAME_WARN, "drawStopLine polyLine != null"); polyLine.setPoints(Arrays.asList(startLatlng, addMiddleLoc, endLatlng)); @@ -153,12 +153,12 @@ public class MoGoV2XCloundDataManager implements IMoGoV2XCloundDataManager, IMog * 目标物与预碰撞点连线,并且更新数据 TODO 需要实时给行人当前位置 */ private void drawOtherObjectLine(V2XWarningEntity info) { - IMogoPolyline polyLine = V2XServiceManager.getMoGoPersonWarnPolylineManager().getMogoPersonWarnPolyline(); - MogoLatLng startLatlng = new MogoLatLng(info.getLat(), info.getLon()); - MogoLatLng endLatlng = new MogoLatLng(info.getCollisionLat(), info.getCollisionLon()); - float distance = CoordinateUtils.calculateLineDistance(startLatlng.lon, startLatlng.lat, endLatlng.lon, endLatlng.lat); - MogoLatLng addMiddleLoc = LocationUtils.getNewLocation(startLatlng, distance / 2, mCloundWarningInfo.getAngle()); if (info != null) { + IMogoPolyline polyLine = V2XServiceManager.getMoGoPersonWarnPolylineManager().getMogoPersonWarnPolyline(); + MogoLatLng startLatlng = new MogoLatLng(info.getLat(), info.getLon()); + MogoLatLng endLatlng = new MogoLatLng(info.getCollisionLat(), info.getCollisionLon()); + float distance = CoordinateUtils.calculateLineDistance(startLatlng.lon, startLatlng.lat, endLatlng.lon, endLatlng.lat); + MogoLatLng addMiddleLoc = LocationUtils.getNewLocation(startLatlng, distance / 2, mCloundWarningInfo.getAngle()); if (polyLine != null) { Log.d(V2XConst.LOG_NAME_WARN, "polyLine != null"); polyLine.setPoints(Arrays.asList(startLatlng, addMiddleLoc, endLatlng)); @@ -200,6 +200,8 @@ public class MoGoV2XCloundDataManager implements IMoGoV2XCloundDataManager, IMog } drawSlefCarLine(latLng); } + carLocation = new MogoLatLng(latLng.getLatitude(), latLng.getLongitude()); + drawSlefCarLine(latLng); } @Override diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/warning/V2XWarningMarker.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/warning/V2XWarningMarker.java index d7f2bdbba2..75bb3d4554 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/warning/V2XWarningMarker.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/warning/V2XWarningMarker.java @@ -100,7 +100,7 @@ public class V2XWarningMarker implements IV2XMarker { } //自车行驶方向的前方*米的经纬度,该经纬度在停止线上 MogoLatLng drawStopLineLon = LocationUtils.getNewLocation(carlo, mMarkerEntity.getStopLineDistance(), mMarkerEntity.getAngle()); - Log.d(TAG, "2D资源绘制停止线" + drawStopLineLon); + Log.d(TAG, "2D资源绘" + drawStopLineLon); MogoMarkerOptions optionsRipple = new MogoMarkerOptions() .latitude(drawStopLineLon.getLat()) .longitude(drawStopLineLon.getLon())