diff --git a/libraries/map-custom/build.gradle b/libraries/map-custom/build.gradle
index fa9c7cf8f4..28941cfea3 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.5.5'
+ implementation 'com.zhidaoauto.machine:map:1.0.0-vr-8.5.6'
// implementation 'com.zhidaoauto.machine:map:1.0.0-vr-test-3.4'
}
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 491aa86bed..99f926ae0a 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
@@ -10,6 +10,7 @@ import android.util.Log;
import android.view.ViewGroup;
import android.widget.TextView;
+import com.mogo.cloud.commons.utils.CoordinateUtils;
import com.mogo.commons.AbsMogoApplication;
import com.mogo.map.marker.IMogoMarker;
import com.mogo.module.common.MogoApisHandler;
@@ -59,7 +60,6 @@ class BaseDrawer {
// 移除过期的 marker
public static final int MSG_REMOVE_DIRTY_MARKERS = 9990;
- public static final int MSG_REMOVE_ADAS_MARKERS = 9992;
/**
* 显示速度
@@ -239,7 +239,7 @@ class BaseDrawer {
/**
* 根据速度、经纬度计算距离判断车辆颜色
*
- * @param speed 车速
+ * @param speed 车速 TODO 这里很可能是adas的策略
* @param lon 经度
* @param lat 纬度
* @return 实际车辆颜色
@@ -251,26 +251,26 @@ class BaseDrawer {
return "#D8D8D8FF";
}
// 距离策略
-// double coordinates[] = getCurCoordinates();
-// double distance = CoordinateUtils.calculateLineDistance( lon, lat, coordinates[0], coordinates[1] ) * 100;
-// if ( distance < 50 ) {
-// return Car3DModelColor.Dangerous.color;
-// } else if ( distance < 100 && distance >= 50 ) {
-// return Car3DModelColor.Warming.color;
-// }
+ double coordinates[] = getCurCoordinates();
+ double distance = CoordinateUtils.calculateLineDistance( lon, lat, coordinates[0], coordinates[1] ) * 100;
+ if ( distance < 50 ) {
+ return Car3DModelColor.Dangerous.color;
+ } else if ( distance < 100 && distance >= 50 ) {
+ return Car3DModelColor.Warming.color;
+ }
- // 他车车速和自车车速对比速度策略
- // 自车速度 >= 50% 危险
- // 10% < 自车速度 < 50% 警告
-// double curSpeed = getCurSpeed();
-// if ( curSpeed > 0 && speed > curSpeed ) {
-// double rate = ( ( speed - curSpeed ) / curSpeed ) * 100;
-// if ( rate >= 50 ) {
-// return Car3DModelColor.Dangerous.color;
-// } else if ( rate > 10 && rate < 50 ) {
-// return Car3DModelColor.Warming.color;
-// }
-// }
+// 他车车速和自车车速对比速度策略
+// 自车速度 >= 50% 危险
+// 10% < 自车速度 < 50% 警告
+ double curSpeed = getCurSpeed();
+ if ( curSpeed > 0 && speed > curSpeed ) {
+ double rate = ( ( speed - curSpeed ) / curSpeed ) * 100;
+ if ( rate >= 50 ) {
+ return Car3DModelColor.Dangerous.color;
+ } else if ( rate > 10 && rate < 50 ) {
+ return Car3DModelColor.Warming.color;
+ }
+ }
// 默认颜色
return Car3DModelColor.Normal.color;
diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/OnlineCarDrawer.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/OnlineCarDrawer.java
index d72eb87fb5..8418f23054 100644
--- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/OnlineCarDrawer.java
+++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/OnlineCarDrawer.java
@@ -58,6 +58,10 @@ class OnlineCarDrawer {
return sInstance;
}
+ public void clearMarkers(){
+ MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager( AbsMogoApplication.getApp() ).removeMarkers( ModuleNames.CARD_TYPE_USER_DATA );
+ }
+
/**
* 绘制在线车辆marker
*
@@ -72,12 +76,12 @@ class OnlineCarDrawer {
IMogoMarkerClickListener listener ) {
// 将数据同步给在线车辆,避免每次 perform 的时候去拉取,造成消耗
if ( onlineCarList == null || onlineCarList.isEmpty() ) {
- MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager( AbsMogoApplication.getApp() ).removeMarkers( ModuleNames.CARD_TYPE_USER_DATA );
+ clearMarkers();
return;
}
if ( clearOld ) {
- MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager( AbsMogoApplication.getApp() ).removeMarkers( ModuleNames.CARD_TYPE_USER_DATA );
+ clearMarkers();
}
int size = MarkerDrawer.getInstance().getAppropriateSize( maxAmount, onlineCarList );
@@ -191,4 +195,6 @@ class OnlineCarDrawer {
}
return false;
}
+
+
}
diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/SnapshotSetDataDrawer.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/SnapshotSetDataDrawer.java
index c5e5c5fc5b..26f50e85c4 100644
--- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/SnapshotSetDataDrawer.java
+++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/SnapshotSetDataDrawer.java
@@ -77,16 +77,22 @@ public class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClic
private boolean mIsVrMode = false;
+ /**
+ * 注册StatusDescriptor.VR_MODE类型,VR_MODE状态改变回调
+ * @param descriptor 状态类型
+ * @param isTrue true - accOn、adas ui show、voice ui show、push ui show、v2x ui show
+ */
@Override
public void onStatusChanged( StatusDescriptor descriptor, boolean isTrue ) {
Logger.d( TAG, "%s - %s", descriptor, isTrue );
mChangeCarModeStatus = true;
- sendMessage( MSG_REMOVE_ADAS_MARKERS, mMarkersCaches );
+ sendMessage( MSG_REMOVE_DIRTY_MARKERS, mMarkersCaches );
mMarkersCaches = new HashMap<>();
if ( mLastPositions != null ) {
mLastPositions.clear();
}
- AdasRecognizedResultDrawer.getInstance().notifyVrModeChanged();
+ AdasRecognizedResultDrawer.getInstance().notifyVrModeChanged(); //清除ADAS old marker data
+ OnlineCarDrawer.getInstance().clearMarkers(); //清除在线车辆 old marker data
}
public boolean isVrMode() {
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 b6f0ed0894..a38db88df2 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
@@ -16,6 +16,7 @@ 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.utils.Trigonometric;
import com.mogo.module.common.view.MarkerBaseFloor;
import com.mogo.service.statusmanager.IMogoStatusChangedListener;
import com.mogo.service.statusmanager.StatusDescriptor;
@@ -86,6 +87,11 @@ public class V2XWarnDataDrawer extends BaseDrawer implements IMogoStatusChangedL
markerShowEntity.setMarkerType(TYPE_MARKER_CLOUD_WARN_DATA);
IMogoMarker bottomMarker = drawMarkerWith2Resource(markerShowEntity);
+
+ //2D资源图片位置调整
+ MogoLatLng mogoLatLng = new MogoLatLng(data.getCollisionLat(), data.getCollisionLon());
+ MogoLatLng newLocation = Trigonometric.getNewLocation(mogoLatLng, 8, 180);
+
IMogoMarker marker = drawMarker(markerShowEntity);
Log.d("liyz", "renderWarnData marker != null direction = " + data.getDirection());
//识别物
@@ -94,8 +100,8 @@ public class V2XWarnDataDrawer extends BaseDrawer implements IMogoStatusChangedL
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);
+ data.getDirection() == 1 ? data.getStopLines().get(1).lat : newLocation.getLat(),
+ data.getDirection() == 1 ? data.getStopLines().get(1).lon : newLocation.getLon()), (float) data.getHeading(), 5000);
//移动完成以后,3s后消失
UiThreadHandler.postDelayed(() -> {
marker.remove();
@@ -121,16 +127,30 @@ public class V2XWarnDataDrawer extends BaseDrawer implements IMogoStatusChangedL
return marker;
}
+ public void drawerMarkerWithLocation(MarkerShowEntity markerShowEntity, MogoLatLng location){
+ MogoMarkerOptions options = new MogoMarkerOptions()
+ .object(markerShowEntity)
+ .latitude(location.getLat())
+ .longitude(location.getLon());
+ IMarkerView iMarkerView = MapMarkerAdapter.getMarkerView(mContext, markerShowEntity, options);
+ options.icon3DRes(getModelRes(2)); //TODO
+
+ options.anchorColor("#FB3C3CFF"); //红色#FF3036 蓝色:#256BFF
+ IMogoMarker marker = MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager(mContext).addMarker(markerShowEntity.getMarkerType(), options);
+ iMarkerView.setMarker(marker);
+ marker.setToTop();
+ }
/*
- * 2D资源绘制marker
+ * 2D资源绘制marker底部的红色圆圈
* */
private IMogoMarker drawMarkerWith2Resource(MarkerShowEntity markerShowEntity) {
+ MogoLatLng mogoLatLng = new MogoLatLng(markerShowEntity.getMarkerLocation().getLat(), markerShowEntity.getMarkerLocation().getLon());
+ MogoLatLng newLocation = Trigonometric.getNewLocation(mogoLatLng, 8, 180);
MogoMarkerOptions optionsRipple = new MogoMarkerOptions()
- .latitude(markerShowEntity.getMarkerLocation().getLat())
- .longitude(markerShowEntity.getMarkerLocation().getLon())
+ .latitude(newLocation.getLat())
+ .longitude(newLocation.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);
diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/utils/Trigonometric.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/utils/Trigonometric.java
new file mode 100644
index 0000000000..61f5a5183f
--- /dev/null
+++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/utils/Trigonometric.java
@@ -0,0 +1,53 @@
+package com.mogo.module.common.utils;
+
+import com.mogo.map.MogoLatLng;
+
+/**
+ * @author liujing
+ * @description 描述
+ * @since: 2021/4/13
+ */
+public class Trigonometric {
+ private final static double radius_b = 6378137;//大半径
+ private final static double radius_s = 6356725;//小半径
+ private static double mRadLo;
+ private static double mRadLa;
+ private static double Ec;
+ private static double Ed;
+
+ /**
+ * 计算两点间的角度
+ */
+ public static double getAngle(double lon1, double lat1, double lon2,
+ double lat2) {
+ double fLat = Math.PI * (lat1) / 180.0;
+ double fLng = Math.PI * (lon1) / 180.0;
+ double tLat = Math.PI * (lat2) / 180.0;
+ double tLng = Math.PI * (lon2) / 180.0;
+
+ double degree = (Math.atan2(Math.sin(tLng - fLng) * Math.cos(tLat), Math.cos(fLat) * Math.sin(tLat) -
+ Math.sin(fLat) * Math.cos(tLat) * Math.cos(tLng - fLng))) * 180.0 / Math.PI;
+ if (degree >= 0) {
+ return degree;
+ } else {
+ return 360 + degree;
+ }
+ }
+
+ /**
+ * 根据角度获取指定距离点的经纬度
+ */
+ public static MogoLatLng getNewLocation(MogoLatLng st, double distance, double angle) {
+ mRadLo = st.getLon() * Math.PI / 180.;
+ mRadLa = st.getLat() * Math.PI / 180.;
+ Ec = radius_s + (radius_b - radius_s) * (90. - st.lat) / 90;
+ Ed = Ec * Math.cos(mRadLa);
+
+ double dx = distance * Math.sin(Math.toRadians(angle));
+ double dy = distance * Math.cos(Math.toRadians(angle));
+ double lon_new = (dx / Ed + mRadLo) * 180. / Math.PI;
+ double lat_new = (dy / Ec + mRadLa) * 180. / Math.PI;
+ return new MogoLatLng(lat_new, lon_new);
+ }
+
+}
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
index 1ec9b2b6ab..1bc7234fa3 100644
--- 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
@@ -1,12 +1,12 @@
+ android:layout_height="match_parent"
+ android:orientation="vertical">
+ android:src="@drawable/common_marker_bottom_floor" />
\ No newline at end of file
diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/view/ArcView.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/view/ArcView.java
index 7c22a7c303..9dc23e7587 100644
--- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/view/ArcView.java
+++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/view/ArcView.java
@@ -8,6 +8,7 @@ import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.RectF;
+import android.graphics.Typeface;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.view.View;
@@ -69,10 +70,12 @@ public class ArcView extends View {
private void drawText(Canvas canvas) {
Rect mRect = new Rect();
String mValue = String.valueOf(currentValue);
+ mTextPaint.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));
//绘制中心的数值
mTextPaint.getTextBounds(mValue, 0, mValue.length(), mRect);
- canvas.drawText(mValue, getWidth() / 2, getHeight() / 2 + mRect.height() / 2, mTextPaint);
+ canvas.drawText(mValue, getWidth() / 2, getHeight() / 2 + mRect.height() / 2-10, mTextPaint);
+ mTextPaint.setTypeface(Typeface.defaultFromStyle(Typeface.NORMAL));
//绘制中心文字描述
mTextPaint.setTextSize(28);
mTextPaint.getTextBounds(mDes, 0, mDes.length(), mRect);
diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/V2XWaringManager.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/V2XWaringManager.java
index 1f736ccfcd..2f5c7607ea 100644
--- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/V2XWaringManager.java
+++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/V2XWaringManager.java
@@ -100,20 +100,19 @@ public class V2XWaringManager {
if (v2XWarnMessageListener != null) {
V2XServiceManager
.getMoGoSocketManager()
- .unregisterOnMessageListener(401011, v2XWarnMessageListener);
+ .unregisterOnMessageListener(10116, v2XWarnMessageListener);
}
}
/**
- * 道路事件,行人 TODO type
+ * 道路预警 弱势群体事件,行人 TODO type
*/
private void registerWarnListener() {
v2XWarnMessageListener = new V2XWarnMessageListener();
- // 道路事件,在线车辆绘制
V2XServiceManager
.getMoGoSocketManager()
.registerOnMessageListener(
- 401011,
+ 10116,
v2XWarnMessageListener );
}
diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XOtherSeekHelpVH.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XOtherSeekHelpVH.java
index 37c49f4e49..509e7d6bad 100644
--- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XOtherSeekHelpVH.java
+++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XOtherSeekHelpVH.java
@@ -199,18 +199,18 @@ public class V2XOtherSeekHelpVH extends V2XBaseViewHolder {
if (mV2XPushMessageEntity.getDistance() > 1000) {
SpanUtils.with(tvDistance)
.append("" + (int) mV2XPushMessageEntity.getDistance() / 1000)
- .setFontSize((int) itemView.getResources().getDimension(R.dimen.module_v2x_event_distance_text))
+ .setFontSize((int) itemView.getResources().getDimension(V2XServiceManager.getMoGoStatusManager().isVrMode() ? R.dimen.dp_42 : R.dimen.module_v2x_event_distance_text))
.append("公里")
- .setFontSize((int) itemView.getResources().getDimension(R.dimen.module_v2x_event_distance_title))
+ .setFontSize((int) itemView.getResources().getDimension(V2XServiceManager.getMoGoStatusManager().isVrMode() ? R.dimen.dp_42 : R.dimen.module_v2x_event_distance_title))
.create();
} else {
SpanUtils.with(tvDistance)
.append("" + (int) mV2XPushMessageEntity.getDistance())
- .setFontSize((int) itemView.getResources().getDimension(R.dimen.module_v2x_event_distance_text))
+ .setFontSize((int) itemView.getResources().getDimension(V2XServiceManager.getMoGoStatusManager().isVrMode() ? R.dimen.dp_42 : R.dimen.module_v2x_event_distance_text))
.append("米")
.setFontSize((int) itemView.getResources().getDimension(
V2XServiceManager.getMoGoStatusManager().isVrMode() ?
- R.dimen.module_v2x_event_distance_title_vr : R.dimen.module_v2x_event_distance_title))
+ R.dimen.dp_42 : R.dimen.module_v2x_event_distance_title))
.create();
}
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm", Locale.CHINA);
diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/listener/V2XWarnMessageListener.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/listener/V2XWarnMessageListener.java
index fd0d2541c0..20c18f26c1 100644
--- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/listener/V2XWarnMessageListener.java
+++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/listener/V2XWarnMessageListener.java
@@ -20,12 +20,13 @@ public class V2XWarnMessageListener implements IMogoOnMessageListener ");
//Logger.d(MODULE_NAME, "V2XMessageListener_401011==V2X地图气泡数据刷新:\n" + GsonUtil.jsonFromObject(response));
V2XUtils.runOnBackgroundThread(() -> {
// 解析不同的Marker类型,然后对应的进行绘制
if (info != null) {
// 解析存储道路事件 liyz
- Log.d(V2XConst.LOG_NAME_WARN, "V2XWarnMessageListener onMsgReceived ----> ");
+ Log.d(V2XConst.LOG_NAME_WARN, "V2XWarnMessageListener onMsgReceived --22--> ");
V2XServiceManager.getMoGoV2XCloundDataManager().analysisV2XCloundDataEvent(info);
}
});
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 6a7ff1d86d..882f35b916 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
@@ -11,7 +11,9 @@ import com.mogo.map.navi.IMogoCarLocationChangedListener2;
import com.mogo.map.overlay.IMogoPolyline;
import com.mogo.module.common.MogoApisHandler;
import com.mogo.module.common.drawer.V2XWarnDataDrawer;
+import com.mogo.module.common.entity.MarkerShowEntity;
import com.mogo.module.common.entity.V2XWarningEntity;
+import com.mogo.module.common.utils.Trigonometric;
import com.mogo.module.service.MarkerServiceHandler;
import com.mogo.module.service.receiver.MogoReceiver;
import com.mogo.module.v2x.MoGoV2XServicePaths;
@@ -19,7 +21,6 @@ import com.mogo.module.v2x.V2XConst;
import com.mogo.module.v2x.V2XServiceManager;
import com.mogo.module.v2x.entity.model.DrawLineInfo;
import com.mogo.module.v2x.manager.IMoGoV2XCloundDataManager;
-import com.mogo.module.v2x.utils.LocationUtils;
import com.mogo.utils.UiThreadHandler;
import com.mogo.utils.WorkThreadHandler;
@@ -39,7 +40,10 @@ public class MoGoV2XCloundDataManager implements IMoGoV2XCloundDataManager, IMog
private boolean isSelfLineClear;
private List fillPoints = new ArrayList();//停止线经纬度合集
private boolean isFirstLocation = false;
- private MogoLatLng carLocation;
+ private MogoLatLng carLocation = new MogoLatLng(
+ MogoApisHandler.getInstance().getApis().getAdasControllerApi().getLastLat(),
+ MogoApisHandler.getInstance().getApis().getAdasControllerApi().getLastLon()
+ );
private static long showTime = 0;
@@ -63,7 +67,7 @@ public class MoGoV2XCloundDataManager implements IMoGoV2XCloundDataManager, IMog
isFirstLocation = false;
if (cloundWarningInfo.getDirection() == 1) { //前方
- MogoLatLng newLocation = LocationUtils.getNewLocation((MogoLatLng) fillPoints.get(0), 80, cloundWarningInfo.getAngle());
+ MogoLatLng newLocation = Trigonometric.getNewLocation((MogoLatLng) fillPoints.get(0), 80, cloundWarningInfo.getAngle());
//停止线前方画线
WorkThreadHandler.getInstance().postDelayed(() -> {
//二轮车和行人的渲染和移动
@@ -116,7 +120,7 @@ public class MoGoV2XCloundDataManager implements IMoGoV2XCloundDataManager, IMog
}
/**
- * 绘制红色区域(停止线继续前行的预警区域) TODO 需要实时给行人当前位置
+ * 车辆行驶正前方绘制红色区域(停止线继续前行的预警区域) TODO 需要实时给行人当前位置
*/
private void drawStopLine(V2XWarningEntity info, MogoLatLng mogoLatLng) {
if (info != null) {
@@ -126,7 +130,7 @@ public class MoGoV2XCloundDataManager implements IMoGoV2XCloundDataManager, IMog
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());
+ MogoLatLng addMiddleLoc = Trigonometric.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));
@@ -150,7 +154,7 @@ public class MoGoV2XCloundDataManager implements IMoGoV2XCloundDataManager, IMog
/**
- * 目标物与预碰撞点连线,并且更新数据 TODO 需要实时给行人当前位置
+ * 侧方目标物与预碰撞点连线,并且更新数据 TODO 需要实时给行人当前位置
*/
private void drawOtherObjectLine(V2XWarningEntity info) {
if (info != null) {
@@ -158,7 +162,7 @@ public class MoGoV2XCloundDataManager implements IMoGoV2XCloundDataManager, IMog
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());
+ MogoLatLng addMiddleLoc = Trigonometric.getNewLocation(startLatlng, distance / 2, mCloundWarningInfo.getAngle());
if (polyLine != null) {
Log.d(V2XConst.LOG_NAME_WARN, "polyLine != null");
polyLine.setPoints(Arrays.asList(startLatlng, addMiddleLoc, endLatlng));
@@ -182,6 +186,21 @@ public class MoGoV2XCloundDataManager implements IMoGoV2XCloundDataManager, IMog
}
}
+ //侧面目标物与碰撞点之间添加多个小箭头
+ private void addArrows(MogoLatLng startLatLng, MogoLatLng endLatLng) {
+ MarkerShowEntity markerShowEntity = new MarkerShowEntity();
+ float distance = CoordinateUtils.calculateLineDistance(
+ startLatLng.lon, startLatLng.lat, endLatLng.lon, endLatLng.lat);
+ if (distance > 5) {
+ int count = (int) (distance / 5);
+ for (int i = 0; i < count; i++) {
+ MogoLatLng newLo = Trigonometric.getNewLocation(
+ startLatLng, 5 * i, mCloundWarningInfo.getAngle());
+ V2XWarnDataDrawer.getInstance().drawerMarkerWithLocation(markerShowEntity, newLo);
+ }
+ }
+ }
+
@Override
public void clearALLPOI() {
@@ -225,7 +244,7 @@ public class MoGoV2XCloundDataManager implements IMoGoV2XCloundDataManager, IMog
endLatlng = new MogoLatLng(mCloundWarningInfo.getDirection() == 1 ? carLocation.lat : mCloundWarningInfo.getCollisionLat(),
mCloundWarningInfo.getDirection() == 1 ? carLocation.lon : mCloundWarningInfo.getCollisionLon());
float distance = CoordinateUtils.calculateLineDistance(startLatlng.lon, startLatlng.lat, endLatlng.lon, endLatlng.lat);
- addMiddleLoc = LocationUtils.getNewLocation(startLatlng, distance / 2, mCloundWarningInfo.getAngle());
+ addMiddleLoc = Trigonometric.getNewLocation(startLatlng, distance / 2, mCloundWarningInfo.getAngle());
Log.d(V2XConst.LOG_NAME_WARN, "drawSlefCarLine lon = " + carLocation.lon + "---lat = " + carLocation.lat);
isFirstLocation = true;
}
@@ -265,11 +284,11 @@ public class MoGoV2XCloundDataManager implements IMoGoV2XCloundDataManager, IMog
float distance = CoordinateUtils.calculateLineDistance(x.lon, x.lat, y.lon, y.lat);
float average = distance / 3;
//两点间的角度
- double angle = LocationUtils.getAngle(x.lon, x.lat, y.lon, y.lat);
+ double angle = Trigonometric.getAngle(x.lon, x.lat, y.lon, y.lat);
//根据距离和角度获取下个点的经纬度
fillPoints.add(x);
for (int i = 1; i < 3; i++) {
- MogoLatLng newLocation = LocationUtils.getNewLocation(x, average * i, angle);
+ MogoLatLng newLocation = Trigonometric.getNewLocation(x, average * i, angle);
fillPoints.add(newLocation);
}
fillPoints.add(y);
@@ -280,7 +299,7 @@ public class MoGoV2XCloundDataManager implements IMoGoV2XCloundDataManager, IMog
}
private MogoLatLng getMogoLat(MogoLatLng latlng) {
- MogoLatLng newLocation = LocationUtils.getNewLocation(latlng, mCloundWarningInfo.getStopLineDistance(), mCloundWarningInfo.getDirection());
+ MogoLatLng newLocation = Trigonometric.getNewLocation(latlng, mCloundWarningInfo.getStopLineDistance(), mCloundWarningInfo.getDirection());
return newLocation;
}
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 75bb3d4554..9f3f54f6ce 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
@@ -16,6 +16,7 @@ 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.utils.Trigonometric;
import com.mogo.module.v2x.R;
import com.mogo.module.v2x.V2XConst;
import com.mogo.module.v2x.V2XServiceManager;
@@ -99,7 +100,7 @@ public class V2XWarningMarker implements IV2XMarker {
carlo = new MogoLatLng(lat, lon);
}
//自车行驶方向的前方*米的经纬度,该经纬度在停止线上
- MogoLatLng drawStopLineLon = LocationUtils.getNewLocation(carlo, mMarkerEntity.getStopLineDistance(), mMarkerEntity.getAngle());
+ MogoLatLng drawStopLineLon = Trigonometric.getNewLocation(carlo, mMarkerEntity.getStopLineDistance(), mMarkerEntity.getAngle());
Log.d(TAG, "2D资源绘" + drawStopLineLon);
MogoMarkerOptions optionsRipple = new MogoMarkerOptions()
.latitude(drawStopLineLon.getLat())
diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/utils/LocationUtils.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/utils/LocationUtils.java
index 6f6dbc047a..088586d229 100644
--- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/utils/LocationUtils.java
+++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/utils/LocationUtils.java
@@ -27,12 +27,6 @@ import com.mogo.utils.network.utils.GsonUtil;
*/
public class LocationUtils {
private static final String TAG = "LocationUtils";
- private final static double radius_b = 6378137;//大半径
- private final static double radius_s = 6356725;//小半径
- private static double mRadLo;
- private static double mRadLa;
- private static double Ec;
- private static double Ed;
public static void geoCodeSearch(MogoLocation location, IMogoGeoSearchListener listener) {
MogoRegeocodeQuery mogoRegeocodeQuery = new MogoRegeocodeQuery();
@@ -93,42 +87,6 @@ public class LocationUtils {
return latLon;
}
- /**
- * 计算两点间的角度
- */
- public static double getAngle(double lon1, double lat1, double lon2,
- double lat2) {
- double fLat = Math.PI * (lat1) / 180.0;
- double fLng = Math.PI * (lon1) / 180.0;
- double tLat = Math.PI * (lat2) / 180.0;
- double tLng = Math.PI * (lon2) / 180.0;
-
- double degree = (Math.atan2(Math.sin(tLng - fLng) * Math.cos(tLat), Math.cos(fLat) * Math.sin(tLat) -
- Math.sin(fLat) * Math.cos(tLat) * Math.cos(tLng - fLng))) * 180.0 / Math.PI;
- if (degree >= 0) {
- return degree;
- } else {
- return 360 + degree;
- }
- }
-
- /**
- * 根据角度获取指定距离点的经纬度
- */
- public static MogoLatLng getNewLocation(MogoLatLng st, double distance, double angle) {
- mRadLo = st.getLon() * Math.PI / 180.;
- mRadLa = st.getLat() * Math.PI / 180.;
- Ec = radius_s + (radius_b - radius_s) * (90. - st.lat) / 90;
- Ed = Ec * Math.cos(mRadLa);
-
- double dx = distance * Math.sin(Math.toRadians(angle));
- double dy = distance * Math.cos(Math.toRadians(angle));
- double lon_new = (dx / Ed + mRadLo) * 180. / Math.PI;
- double lat_new = (dy / Ec + mRadLa) * 180. / Math.PI;
- return new MogoLatLng(lat_new, lon_new);
- }
-
-
/**
* 获取传入的经纬度在车辆的什么位置
*
diff --git a/modules/mogo-module-v2x/src/main/res/drawable-xhdpi/v2x_event_icon_daohang_vr.png b/modules/mogo-module-v2x/src/main/res/drawable-xhdpi/v2x_event_icon_daohang_vr.png
new file mode 100644
index 0000000000..8344ac641c
Binary files /dev/null and b/modules/mogo-module-v2x/src/main/res/drawable-xhdpi/v2x_event_icon_daohang_vr.png differ
diff --git a/modules/mogo-module-v2x/src/main/res/drawable-xhdpi/v2x_event_icon_tel_vr.png b/modules/mogo-module-v2x/src/main/res/drawable-xhdpi/v2x_event_icon_tel_vr.png
new file mode 100644
index 0000000000..3b65e46367
Binary files /dev/null and b/modules/mogo-module-v2x/src/main/res/drawable-xhdpi/v2x_event_icon_tel_vr.png differ
diff --git a/modules/mogo-module-v2x/src/main/res/drawable/bg_v2x_event_bg.xml b/modules/mogo-module-v2x/src/main/res/drawable/bg_v2x_event_bg.xml
index 82d3c3395f..73892b5ac9 100644
--- a/modules/mogo-module-v2x/src/main/res/drawable/bg_v2x_event_bg.xml
+++ b/modules/mogo-module-v2x/src/main/res/drawable/bg_v2x_event_bg.xml
@@ -1,6 +1,6 @@
-
+
\ No newline at end of file
diff --git a/modules/mogo-module-v2x/src/main/res/drawable/bg_v2x_event_type_orange_vr.xml b/modules/mogo-module-v2x/src/main/res/drawable/bg_v2x_event_type_orange_vr.xml
index 0c99dfb607..86fe790833 100644
--- a/modules/mogo-module-v2x/src/main/res/drawable/bg_v2x_event_type_orange_vr.xml
+++ b/modules/mogo-module-v2x/src/main/res/drawable/bg_v2x_event_type_orange_vr.xml
@@ -2,8 +2,8 @@
+ android:endColor="#FFBF29"
+ android:startColor="#FFBF29" />
\ No newline at end of file
diff --git a/modules/mogo-module-v2x/src/main/res/layout/item_v2x_fault_help_vr.xml b/modules/mogo-module-v2x/src/main/res/layout/item_v2x_fault_help_vr.xml
index 9a39d8fd09..b69404b002 100644
--- a/modules/mogo-module-v2x/src/main/res/layout/item_v2x_fault_help_vr.xml
+++ b/modules/mogo-module-v2x/src/main/res/layout/item_v2x_fault_help_vr.xml
@@ -35,13 +35,11 @@
android:layout_marginTop="15dp"
android:background="@drawable/bg_v2x_event_type_orange_vr"
android:gravity="center"
-
android:paddingTop="@dimen/dp_2"
-
android:paddingBottom="@dimen/dp_5"
android:text="求助"
android:textColor="@android:color/white"
- android:textSize="@dimen/module_v2x_event_type_title_text_size"
+ android:textSize="@dimen/sp_20"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="@id/ivFaultHelpHead"
@@ -81,12 +79,11 @@
android:id="@+id/tvFaultHelpDistance"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginEnd="@dimen/dp_40"
- android:layout_marginRight="@dimen/dp_40"
+ android:layout_marginEnd="@dimen/dp_42"
+ android:layout_marginRight="@dimen/dp_42"
android:gravity="center_vertical"
android:textColor="#FFFFFF"
android:textSize="@dimen/dp_42"
- android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="@+id/ivFaultHelpEventCall"
app:layout_constraintEnd_toStartOf="@+id/ivFaultHelpEventCall"
app:layout_constraintTop_toTopOf="@+id/ivFaultHelpEventCall"
@@ -97,7 +94,7 @@
android:layout_width="@dimen/dp_80"
android:layout_height="@dimen/dp_80"
android:layout_marginRight="@dimen/dp_40"
- android:src="@drawable/selector_talk_btn"
+ android:src="@drawable/v2x_event_icon_tel_vr"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/ivFaultHelpEventNavi"
@@ -109,8 +106,7 @@
android:layout_width="@dimen/dp_80"
android:layout_height="@dimen/dp_80"
android:layout_marginRight="@dimen/dp_40"
- android:src="@drawable/selector_nav_btn"
- android:visibility="gone"
+ android:src="@drawable/v2x_event_icon_daohang_vr"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
diff --git a/services/mogo-service/src/main/java/com/mogo/service/impl/adas/MogoADASController.java b/services/mogo-service/src/main/java/com/mogo/service/impl/adas/MogoADASController.java
index 0726219d01..252d77318b 100644
--- a/services/mogo-service/src/main/java/com/mogo/service/impl/adas/MogoADASController.java
+++ b/services/mogo-service/src/main/java/com/mogo/service/impl/adas/MogoADASController.java
@@ -138,10 +138,16 @@ public class MogoADASController implements IMogoADASController {
super.handleMessage( msg );
final long start = System.currentTimeMillis();
ADASCarStateInfo stateInfo = GsonUtil.objectFromJson( ( ( String ) msg.obj ), ADASCarStateInfo.class );
- Logger.d( "ADAS-LOC-timer", "upd 到 aidl 传输耗时:%s", start - Long.valueOf( stateInfo.getValues().getStartReceiverDataTime() ) );
if ( stateInfo == null || stateInfo.getValues() == null ) {
+ Logger.d(TAG,"ADAS-LOC-timer","upd 到 aidl 传输数据 stateInfo or stateInfo.getValues() is null");
return;
}
+ if(stateInfo.getValues().getStartReceiverDataTime() != null){
+ Logger.d( "ADAS-LOC-timer", "upd 到 aidl 传输耗时:%s", start - Long.valueOf( stateInfo.getValues().getStartReceiverDataTime() ) );
+ }else{
+ Logger.d( "ADAS-LOC-timer", "upd 到 aidl 传输耗时时间字段 startReceiverDataTime is null");
+ }
+
mLastLon = stateInfo.getValues().getLon();
mLastLat = stateInfo.getValues().getLat();
if ( mMogoAdasCarDataCallback != null ) {