diff --git a/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/v2n/scenario/scene/road/V2XAiRoadEventMarker.kt b/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/v2n/scenario/scene/road/V2XAiRoadEventMarker.kt index 51496058de..079dafe86a 100644 --- a/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/v2n/scenario/scene/road/V2XAiRoadEventMarker.kt +++ b/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/v2n/scenario/scene/road/V2XAiRoadEventMarker.kt @@ -6,9 +6,11 @@ import com.mogo.eagle.core.data.enums.EventTypeEnumNew import com.mogo.eagle.core.data.enums.EventTypeEnumNew.TYPE_SOCKET_ROAD_SHIGU import com.mogo.eagle.core.data.map.MogoLatLng import com.mogo.eagle.core.data.map.entity.V2XRoadEventEntity +import com.mogo.eagle.core.function.biz.R import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils.isTaxiPassenger +import com.mogo.eagle.core.utilcode.util.CoordinateUtils import com.mogo.eagle.function.biz.v2x.v2n.consts.V2XConst import com.mogo.eagle.function.biz.v2x.v2n.remove.MarkerWrapper import com.mogo.map.overlay.core.Level @@ -33,10 +35,34 @@ class V2XAiRoadEventMarker { .build())?.also { wrapper.addPoint(it) } if (polygon != null && polygon.isNotEmpty() && entity.poiType != EventTypeEnumNew.TYPE_SOCKET_ROAD_JINGZHI.poiType) { val builder = Polyline.Options.Builder(V2XConst.V2X_MARKER_OWNER, Level.MAP_POLYGON) - val colors = ArrayList() - colors.add(Color.argb(204, 237, 172, 21)) - colors.add(Color.argb(0, 255, 255, 255)) - builder.colors(colors) + if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) { + val colors = ArrayList() + colors.add(Color.argb(204, 237, 172, 21)) + colors.add(Color.argb(0, 255, 255, 255)) + builder.colors(colors) + } else { + val colors = ArrayList() + colors.add(Color.parseColor("#FF8F2A")) + colors.add(Color.argb(0, 255, 255, 255)) + builder.colors(colors) + } + val dispersedPoints = getDispersedPoints(polygon.map { Pair(it.first, it.second) }, 3) + if (entity.poiType == EventTypeEnumNew.TYPE_SOCKET_ROAD_SHIGONG.poiType && dispersedPoints.isNotEmpty()) { + for (p in dispersedPoints) { + Point.Options.Builder(V2XConst.V2X_MARKER_OWNER, Level.MAP_MARKER) + .longitude(p.first) + .latitude(p.second) + .set3DMode(true) + .isUseGps(true) + .icon3DRes(R.raw.taxi_sanjiaozui) + .scale(1.0f) + .build().let { + CallerMapUIServiceManager.getOverlayManager()?.showOrUpdatePoint(it) + }?.also { + wrapper.addPoint(it) + } + } + } val points = ArrayList() for (p in polygon) { points.add(MogoLatLng(p.second, p.first)) @@ -44,37 +70,53 @@ class V2XAiRoadEventMarker { if (points.size > 2) { points.add(points[0]) } +// builder.color(if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) Color.parseColor("#FF852E") else Color.parseColor("#5AA7FD")) builder.points(points) - builder.setIsGradient(true) builder.useFacade(true) builder.setUseGps(true) builder.setWidth(5f) + builder.setIsGradient(true) builder.setMaxIndex(800000f) builder.setVisible(true) val line = CallerMapUIServiceManager.getOverlayManager()?.showOrUpdateLine(builder.build()) - - -// val colors2 = ArrayList() -// colors2.add(Color.argb(204, 237, 172, 21)) -// colors2.add(Color.argb(0, 255, 255, 255)) -// builder2.colors(colors2) -// builder2.points(points) -// builder2.setIsGradient(true) -// builder2.isFilledIn(true) -// builder2.useFacade(false) -// builder2.setUseGps(true) -// builder2.setWidth(10f) -//// builder2.setMaxIndex(800000f) -// builder2.setVisible(true) -// val line2 = CallerMapUIServiceManager.getOverlayManager()?.showOrUpdateLine(builder2.build()) line?.let { current.set(Pair(line, wrapper.markers)) wrapper.addLine(line) -// wrapper.addLine(line2!!) } } } + private fun getDispersedPoints(polygon: List>, expect: Int): List> { + val total = polygon.size + if (expect >= total) { + return polygon + } + // 初始选择第一个点 + val select = ArrayList>() + select.add(polygon[0]) + for(i in 1 until expect) { + var maxDistance = Double.MIN_VALUE + var best: Pair? = null + for (point in polygon) { + var minDistance = Double.MAX_VALUE + for (j in 0 until i) { + val distance = CoordinateUtils.calculateLineDistance(select[j].first, select[j].second, point.first, point.second) + if (distance < minDistance) { + minDistance = distance.toDouble() + } + } + if (minDistance > maxDistance) { + maxDistance = minDistance + best = point + } + } + if (best != null) { + select.add(best) + } + } + return select + } + fun removeMarkers() { val prev = current.get() if (prev != null) {