Merge branch 'dev_robotaxi-d-app-module_265_220329_2.6.5' into dev_robotaxi-d-app-module_265_220329_2.6.5_xin
This commit is contained in:
@@ -53,6 +53,7 @@ dependencies {
|
||||
implementation rootProject.ext.dependencies.rxandroid
|
||||
implementation rootProject.ext.dependencies.androidxconstraintlayout
|
||||
implementation rootProject.ext.dependencies.amapnavi3dmap
|
||||
implementation rootProject.ext.dependencies.amapsearch
|
||||
if (Boolean.valueOf(USE_MAVEN_PACKAGE)) {
|
||||
implementation rootProject.ext.dependencies.mogoutils
|
||||
implementation rootProject.ext.dependencies.mogocommons
|
||||
|
||||
@@ -7,5 +7,4 @@ package com.mogo.och.taxi.passenger.callback;
|
||||
public interface IOCHTaxiPassengerNaviChangedCallback {
|
||||
// 当前位置距离上车点的距离(米)、预估时间(秒) 、当前路的名称
|
||||
void onCurrentRoadName(String currentRoadName);
|
||||
void reInitNaviAmap(boolean isPlay,boolean isRestart);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,120 @@
|
||||
package com.mogo.och.taxi.passenger.model;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import com.amap.api.services.core.LatLonPoint;
|
||||
import com.amap.api.services.geocoder.GeocodeResult;
|
||||
import com.amap.api.services.geocoder.GeocodeSearch;
|
||||
import com.amap.api.services.geocoder.RegeocodeQuery;
|
||||
import com.amap.api.services.geocoder.RegeocodeResult;
|
||||
import com.amap.api.services.geocoder.RegeocodeRoad;
|
||||
import com.mogo.eagle.core.network.utils.GsonUtil;
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
|
||||
import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerNaviChangedCallback;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Timer;
|
||||
import java.util.TimerTask;
|
||||
|
||||
import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_TAXI_P;
|
||||
|
||||
/**
|
||||
* @author: wangmingjun
|
||||
* @date: 2021/12/6
|
||||
*/
|
||||
public class TaxiPassengerGeocodeSearchModel implements GeocodeSearch.OnGeocodeSearchListener {
|
||||
|
||||
private final String TAG = TaxiPassengerGeocodeSearchModel.class.getSimpleName();
|
||||
|
||||
private static Context mContext;
|
||||
|
||||
private IOCHTaxiPassengerNaviChangedCallback mNaviChangedCallback;
|
||||
|
||||
GeocodeSearch mGeocodeSearch = null;
|
||||
|
||||
private String roadName = "";
|
||||
|
||||
private Timer timer ;
|
||||
|
||||
TimerTask timerTask;
|
||||
|
||||
public static TaxiPassengerGeocodeSearchModel getInstance(Context context) {
|
||||
mContext = context;
|
||||
return SingletonHolder.INSTANCE;
|
||||
}
|
||||
|
||||
private static final class SingletonHolder {
|
||||
private static final TaxiPassengerGeocodeSearchModel INSTANCE = new TaxiPassengerGeocodeSearchModel();
|
||||
}
|
||||
|
||||
private TaxiPassengerGeocodeSearchModel(){
|
||||
}
|
||||
|
||||
public void initGeocodeSearch(){
|
||||
//通过经纬度逆地理编码得到位置
|
||||
mGeocodeSearch = new GeocodeSearch(mContext);
|
||||
mGeocodeSearch.setOnGeocodeSearchListener(this);
|
||||
timer = new Timer();
|
||||
timerTask = new TimerTask() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (mNaviChangedCallback != null){
|
||||
CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "roadName道路名称: " + roadName);
|
||||
mNaviChangedCallback.onCurrentRoadName(roadName);
|
||||
}
|
||||
}
|
||||
};
|
||||
try{
|
||||
timer.schedule(timerTask,500,2000);
|
||||
}catch (Exception e){
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public void searchLocationInfo(double lat, double lon){
|
||||
if (null != mGeocodeSearch){
|
||||
LatLonPoint latLng = new LatLonPoint(lat, lon);
|
||||
//第一个参数表示一个Latlng,第二参数表示范围多少米,第三个参数表示是火系坐标系还是GPS原生坐标系
|
||||
RegeocodeQuery query = new RegeocodeQuery(latLng, 200, GeocodeSearch.AMAP);
|
||||
mGeocodeSearch.getFromLocationAsyn(query);
|
||||
}
|
||||
}
|
||||
|
||||
public void destroyGeocodeSearch(){
|
||||
CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "destroyGeocodeSearch");
|
||||
if (mGeocodeSearch != null){
|
||||
mGeocodeSearch = null;
|
||||
}
|
||||
if (mNaviChangedCallback != null){
|
||||
mNaviChangedCallback = null;
|
||||
}
|
||||
if (null != timer){
|
||||
timer.cancel();
|
||||
}
|
||||
if (null != timerTask){
|
||||
timerTask = null;
|
||||
}
|
||||
roadName = "";
|
||||
}
|
||||
|
||||
public void setOCHTaciNaviChangedCallback(IOCHTaxiPassengerNaviChangedCallback callback){
|
||||
this.mNaviChangedCallback = callback;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRegeocodeSearched(RegeocodeResult regeocodeResult, int i) {//更新频率几十 ms, 暂定更新UI为2s一次
|
||||
if (regeocodeResult != null) {
|
||||
List<RegeocodeRoad> roads = regeocodeResult.getRegeocodeAddress().getRoads();
|
||||
CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "位置roads:" + GsonUtil.jsonFromObject(roads));
|
||||
if (roads != null && roads.size() > 0){
|
||||
roadName = roads.get(0).getName();//当前路的名字
|
||||
// mNaviChangedCallback.onCurrentRoadName(roads.get(0).getName());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onGeocodeSearched(GeocodeResult geocodeResult, int i) {
|
||||
|
||||
}
|
||||
}
|
||||
@@ -10,7 +10,6 @@ import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.amap.api.maps.model.LatLng;
|
||||
import com.amap.api.navi.model.NaviLatLng;
|
||||
import com.elegant.network.utils.GsonUtil;
|
||||
import com.mogo.aicloud.services.socket.MogoAiCloudSocketManager;
|
||||
import com.mogo.cloud.commons.utils.CoordinateUtils;
|
||||
@@ -53,7 +52,6 @@ import com.mogo.service.statusmanager.StatusDescriptor;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -471,6 +469,7 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback
|
||||
}
|
||||
mLongitude = location.getLongitude();
|
||||
mLatitude = location.getLatitude();
|
||||
CallerLogger.INSTANCE.e(M_TAXI_P + TAG,"mLongitude = "+mLongitude+", mLatitude = "+mLatitude);
|
||||
for (IOCHTaxiPassengerControllerStatusCallback callback :mControllerStatusCallbackMap.values()){
|
||||
callback.onCarLocationChanged(location);
|
||||
}
|
||||
@@ -592,16 +591,17 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback
|
||||
/**
|
||||
* 导航订单起点到终点 获得剩余时间,里程,预计到达时间
|
||||
*/
|
||||
public void naviOrderStartToEnd() {
|
||||
TaxiPassengerNaviToDestinationModel.getInstance(mContext).destroyAmaNavi();
|
||||
public void initGeocodeSearch() {
|
||||
if (mCurrentOCHOrder != null){
|
||||
NaviLatLng startNaviLatLng = new NaviLatLng(mLatitude,mLongitude);
|
||||
NaviLatLng endNaviLatLng = new NaviLatLng(mCurrentOCHOrder.endSiteGcjPoint.get(1),mCurrentOCHOrder.endSiteGcjPoint.get(0));
|
||||
TaxiPassengerNaviToDestinationModel.getInstance(mContext).initAMapNavi(startNaviLatLng, endNaviLatLng);
|
||||
TaxiPassengerNaviToDestinationModel.getInstance(mContext).setOCHTaciNaviChangedCallback(this);
|
||||
TaxiPassengerGeocodeSearchModel.getInstance(mContext).initGeocodeSearch();
|
||||
TaxiPassengerGeocodeSearchModel.getInstance(mContext).setOCHTaciNaviChangedCallback(this);
|
||||
}
|
||||
}
|
||||
|
||||
public void destoryGeocodeSearch(){
|
||||
TaxiPassengerGeocodeSearchModel.getInstance(mContext).destroyGeocodeSearch();
|
||||
}
|
||||
|
||||
public void startOrStopQueryOrderRemaining(boolean isStart){
|
||||
if (isStart){
|
||||
TaxiPassengerModelLoopManager.getInstance().startQueryOrderRemainingtLoop();
|
||||
@@ -661,17 +661,11 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reInitNaviAmap(boolean isPlay, boolean isRestart) {
|
||||
naviOrderStartToEnd();
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单结束或者取消的时候, 刷新导航标识位以及缓存的数据
|
||||
*/
|
||||
public void recoverNaviInfo(){
|
||||
SharedPrefsMgr.getInstance(mContext).remove(TaxiPassengerConst.SP_KEY_ORDER_SUM_DIS);
|
||||
TaxiPassengerNaviToDestinationModel.getInstance(mContext).setFirstcalculateDriveRoute(0);
|
||||
}
|
||||
|
||||
public void calculateRouteLineSum(List<LatLng> points){
|
||||
|
||||
@@ -1,335 +0,0 @@
|
||||
package com.mogo.och.taxi.passenger.model;
|
||||
|
||||
import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_TAXI_P;
|
||||
|
||||
import android.Manifest;
|
||||
import android.content.Context;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.amap.api.navi.AMapNavi;
|
||||
import com.amap.api.navi.AMapNaviListener;
|
||||
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;
|
||||
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.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.autonavi.tbt.TrafficFacilityInfo;
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
|
||||
import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr;
|
||||
import com.mogo.eagle.core.utilcode.util.NetworkUtils;
|
||||
import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerNaviChangedCallback;
|
||||
import com.mogo.och.taxi.passenger.constant.TaxiPassengerConst;
|
||||
import com.mogo.och.taxi.passenger.utils.PermissionUtil;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
/**
|
||||
* @author: wangmingjun
|
||||
* @date: 2021/12/6
|
||||
*/
|
||||
public class TaxiPassengerNaviToDestinationModel implements AMapNaviListener {
|
||||
|
||||
private final String TAG = TaxiPassengerNaviToDestinationModel.class.getSimpleName();
|
||||
|
||||
private static Context mContext;
|
||||
private AMapNavi mAMapNavi = null;
|
||||
protected final List<NaviLatLng> sList = new ArrayList<NaviLatLng>();
|
||||
protected final List<NaviLatLng> eList = new ArrayList<NaviLatLng>();
|
||||
protected List<NaviLatLng> mWayPointList = new ArrayList<NaviLatLng>();
|
||||
private IOCHTaxiPassengerNaviChangedCallback mNaviChangedCallback;
|
||||
// private AtomicInteger errorCount = new AtomicInteger(0); //只要订单在 如果算错就重新算,不再有次数限制
|
||||
private boolean isPlay;
|
||||
|
||||
private volatile int mFirstcalculateDriveRoute = 0;
|
||||
public void setFirstcalculateDriveRoute(int firstcalculateDriveRoute) {
|
||||
this.mFirstcalculateDriveRoute = firstcalculateDriveRoute;
|
||||
}
|
||||
|
||||
|
||||
public static TaxiPassengerNaviToDestinationModel getInstance(Context context) {
|
||||
mContext = context;
|
||||
return SingletonHolder.INSTANCE;
|
||||
}
|
||||
|
||||
private static final class SingletonHolder {
|
||||
private static final TaxiPassengerNaviToDestinationModel INSTANCE = new TaxiPassengerNaviToDestinationModel();
|
||||
}
|
||||
private TaxiPassengerNaviToDestinationModel(){
|
||||
}
|
||||
public void initAMapNavi(NaviLatLng startLatLng,NaviLatLng endLatLng) {
|
||||
try {
|
||||
mAMapNavi = AMapNavi.getInstance(mContext);
|
||||
mAMapNavi.addAMapNaviListener(this);
|
||||
mAMapNavi.setUseInnerVoice(true, true);
|
||||
mAMapNavi.stopSpeak();
|
||||
sList.add(startLatLng);
|
||||
eList.add(endLatLng);
|
||||
int strategy = 0;
|
||||
try {
|
||||
//再次强调,最后一个参数为true时代表多路径,否则代表单路径
|
||||
strategy = mAMapNavi.strategyConvert(true, false, false, false, false);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
mAMapNavi.calculateDriveRoute(sList, eList, mWayPointList, strategy);
|
||||
}catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
public void setVoiceIsMute(boolean isPlay){
|
||||
if (mAMapNavi == null) return;
|
||||
this.isPlay = isPlay;
|
||||
if (isPlay){
|
||||
mAMapNavi.startSpeak();
|
||||
}else {
|
||||
mAMapNavi.stopSpeak();
|
||||
}
|
||||
}
|
||||
|
||||
public void destroyAmaNavi(){
|
||||
if (mAMapNavi != null){
|
||||
isPlay = false;
|
||||
mAMapNavi.stopNavi();
|
||||
mAMapNavi.destroy();
|
||||
mAMapNavi = null;
|
||||
mNaviChangedCallback = null;
|
||||
sList.clear();
|
||||
eList.clear();
|
||||
}
|
||||
}
|
||||
|
||||
public void setOCHTaciNaviChangedCallback(IOCHTaxiPassengerNaviChangedCallback callback){
|
||||
this.mNaviChangedCallback = callback;
|
||||
}
|
||||
@Override
|
||||
public void onInitNaviFailure() {
|
||||
Toast.makeText(mContext, "init navi Failed", Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onInitNaviSuccess() {
|
||||
//初始化成功
|
||||
}
|
||||
@Override
|
||||
public void onCalculateRouteSuccess(int[] ints) {
|
||||
//多路径算路成功回调
|
||||
CallerLogger.INSTANCE.d(M_TAXI_P + TAG,"onCalculateRouteSuccess");
|
||||
mAMapNavi.startNavi(NaviType.GPS);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNaviInfoUpdate(NaviInfo naviinfo) {
|
||||
//导航过程中的信息更新,请看NaviInfo的具体说明
|
||||
CallerLogger.INSTANCE.d(M_TAXI_P + TAG,"naviinfo = "+naviinfo.getPathRetainDistance()+" ,"+naviinfo.getPathRetainTime()
|
||||
+" ,"+naviinfo.getCurrentRoadName());
|
||||
|
||||
if (mFirstcalculateDriveRoute == 0 && SharedPrefsMgr.getInstance(mContext).getInt(TaxiPassengerConst.SP_KEY_ORDER_SUM_DIS,0) == 0){
|
||||
mFirstcalculateDriveRoute = 1;
|
||||
SharedPrefsMgr.getInstance(mContext).putInt(TaxiPassengerConst.SP_KEY_ORDER_SUM_DIS,naviinfo.getPathRetainDistance());
|
||||
}
|
||||
if (null != mNaviChangedCallback){
|
||||
mNaviChangedCallback.onCurrentRoadName(naviinfo.getCurrentRoadName());//当前路的名字
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCalculateRouteSuccess(AMapCalcRouteResult aMapCalcRouteResult) {
|
||||
// errorCount.set(0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCalculateRouteFailure(AMapCalcRouteResult result) {
|
||||
//路线计算失败
|
||||
//多路径算路成功回调
|
||||
// if (errorCount.get() < 20){
|
||||
// errorCount.getAndIncrement();
|
||||
if (mNaviChangedCallback != null){
|
||||
mNaviChangedCallback.reInitNaviAmap(isPlay,true);
|
||||
}
|
||||
// }
|
||||
if (!NetworkUtils.isConnected(mContext) || result.getErrorCode() == 2){
|
||||
if (mNaviChangedCallback != null){
|
||||
mNaviChangedCallback.reInitNaviAmap(isPlay,false);
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (!PermissionUtil.isLocServiceEnable(mContext) || !PermissionUtil.checkPermission(mContext,new String[]{Manifest.permission.ACCESS_FINE_LOCATION})){
|
||||
if (mNaviChangedCallback != null){
|
||||
mNaviChangedCallback.reInitNaviAmap(isPlay,false);
|
||||
}
|
||||
return;
|
||||
}
|
||||
// if (result.getErrorCode() == 3){
|
||||
// TipToast.longTip("车辆当前坐标错误");
|
||||
// }else if (result.getErrorCode() == 6){
|
||||
// TipToast.longTip("终点坐标错误");
|
||||
// }
|
||||
CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "路线计算失败:错误码=" + result.getErrorCode() + ",Error Message= " + result.getErrorDetail());
|
||||
CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "错误码详细链接见:http://lbs.amap.com/api/android-navi-sdk/guide/tools/errorcode/");
|
||||
}
|
||||
@Override
|
||||
public void onStartNavi(int type) {
|
||||
//开始导航回调
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTrafficStatusUpdate() {
|
||||
//
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLocationChange(AMapNaviLocation location) {
|
||||
//当前位置回调
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onGetNavigationText(int type, String text) {
|
||||
//播报类型和播报文字回调
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onGetNavigationText(String s) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onEndEmulatorNavi() {
|
||||
//结束模拟导航
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onArriveDestination() {
|
||||
//到达目的地
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCalculateRouteFailure(int errorInfo) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReCalculateRouteForYaw() {
|
||||
//偏航后重新计算路线回调
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReCalculateRouteForTrafficJam() {
|
||||
//拥堵后重新计算路线回调
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onArrivedWayPoint(int wayID) {
|
||||
//到达途径点
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onGpsOpenStatus(boolean enabled) {
|
||||
//GPS开关状态回调
|
||||
}
|
||||
@Override
|
||||
public void showModeCross(AMapModelCross aMapModelCross) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void hideModeCross() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateIntervalCameraInfo(AMapNaviCameraInfo aMapNaviCameraInfo, AMapNaviCameraInfo aMapNaviCameraInfo1, int i) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void showLaneInfo(AMapLaneInfo aMapLaneInfo) {
|
||||
//显示车道信息
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNaviRouteNotify(AMapNaviRouteNotifyData aMapNaviRouteNotifyData) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateCameraInfo(AMapNaviCameraInfo[] aMapCameraInfos) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onServiceAreaUpdate(AMapServiceAreaInfo[] amapServiceAreaInfos) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNaviInfoUpdated(AMapNaviInfo aMapNaviInfo) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void OnUpdateTrafficFacility(AMapNaviTrafficFacilityInfo aMapNaviTrafficFacilityInfo) {
|
||||
//已过时
|
||||
}
|
||||
|
||||
@Override
|
||||
public void OnUpdateTrafficFacility(TrafficFacilityInfo trafficFacilityInfo) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void showCross(AMapNaviCross aMapNaviCross) {
|
||||
//显示放大图回调
|
||||
}
|
||||
|
||||
@Override
|
||||
public void hideCross() {
|
||||
//隐藏放大图回调
|
||||
}
|
||||
|
||||
@Override
|
||||
public void showLaneInfo(AMapLaneInfo[] laneInfos, byte[] laneBackgroundInfo, byte[] laneRecommendedInfo) {
|
||||
//过时
|
||||
}
|
||||
|
||||
@Override
|
||||
public void hideLaneInfo() {
|
||||
//隐藏车道信息
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notifyParallelRoad(int i) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void OnUpdateTrafficFacility(AMapNaviTrafficFacilityInfo[] aMapNaviTrafficFacilityInfos) {
|
||||
//更新交通设施信息
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateAimlessModeStatistics(AimLessModeStat aimLessModeStat) {
|
||||
//更新巡航模式的统计信息
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void updateAimlessModeCongestionInfo(AimLessModeCongestionInfo aimLessModeCongestionInfo) {
|
||||
//更新巡航模式的拥堵信息
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPlayRing(int i) {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -19,8 +19,8 @@ import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerADASStatusCallback;
|
||||
import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerControllerStatusCallback;
|
||||
import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerOrderStatusCallback;
|
||||
import com.mogo.och.taxi.passenger.constant.TaxiPassengerOrderStatusEnum;
|
||||
import com.mogo.och.taxi.passenger.model.TaxiPassengerGeocodeSearchModel;
|
||||
import com.mogo.och.taxi.passenger.model.TaxiPassengerModel;
|
||||
import com.mogo.och.taxi.passenger.model.TaxiPassengerNaviToDestinationModel;
|
||||
import com.mogo.och.taxi.passenger.ui.TaxiPassengerBaseFragment;
|
||||
|
||||
/**
|
||||
@@ -146,6 +146,7 @@ public class BaseTaxiPassengerPresenter extends Presenter<TaxiPassengerBaseFragm
|
||||
if (TaxiPassengerOrderStatusEnum.Cancel.getCode() == order.orderStatus){
|
||||
runOnUIThread(() -> mView.showOrHideServingOrderFragment(false));
|
||||
TaxiPassengerModel.getInstance().recoverNaviInfo();
|
||||
TaxiPassengerGeocodeSearchModel.getInstance(getContext()).destroyGeocodeSearch();
|
||||
return;
|
||||
}
|
||||
if (TaxiPassengerOrderStatusEnum.ArriveAtStart.getCode() == order.orderStatus
|
||||
@@ -155,7 +156,7 @@ public class BaseTaxiPassengerPresenter extends Presenter<TaxiPassengerBaseFragm
|
||||
}
|
||||
if (TaxiPassengerOrderStatusEnum.ArriveAtEnd.getCode() == order.orderStatus){
|
||||
TaxiPassengerModel.getInstance().recoverNaviInfo();
|
||||
TaxiPassengerNaviToDestinationModel.getInstance(getContext()).destroyAmaNavi();
|
||||
TaxiPassengerGeocodeSearchModel.getInstance(getContext()).destroyGeocodeSearch();
|
||||
runOnUIThread(() -> {
|
||||
mView.showOrHideServingOrderFragment(false);
|
||||
mView.showOrHideArrivedEndLayout(true, order.endSiteAddr);
|
||||
@@ -167,6 +168,7 @@ public class BaseTaxiPassengerPresenter extends Presenter<TaxiPassengerBaseFragm
|
||||
mView.showOrHideServingOrderFragment(false);
|
||||
mView.showOrHideArrivedEndLayout(false, "");
|
||||
});
|
||||
TaxiPassengerGeocodeSearchModel.getInstance(getContext()).destroyGeocodeSearch();
|
||||
mCurrentPassengerOrder = null;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -20,6 +20,7 @@ import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerControllerStatusCal
|
||||
import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerOrderStatusCallback;
|
||||
import com.mogo.och.taxi.passenger.callback.ITaxiPassengerVeloctityCallback;
|
||||
import com.mogo.och.taxi.passenger.constant.TaxiPassengerOrderStatusEnum;
|
||||
import com.mogo.och.taxi.passenger.model.TaxiPassengerGeocodeSearchModel;
|
||||
import com.mogo.och.taxi.passenger.model.TaxiPassengerModel;
|
||||
import com.mogo.och.taxi.passenger.ui.TaxiPassengerServingOrderFragment;
|
||||
|
||||
@@ -131,6 +132,7 @@ public class TaxiPassengerServingOrderPresenter extends Presenter<TaxiPassengerS
|
||||
public void onCarLocationChanged(Location location) {
|
||||
if (location != null){
|
||||
runOnUIThread(() -> mView.onCarLocationChanged(location));
|
||||
TaxiPassengerGeocodeSearchModel.getInstance(getContext()).searchLocationInfo(location.getLatitude(),location.getLongitude());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -173,7 +173,6 @@ public class TaxiPassengerMapDirectionView
|
||||
|
||||
@Override
|
||||
public void onLocationChanged(@org.jetbrains.annotations.Nullable MogoLocation location, int from) {
|
||||
CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "onCarLocationChanged2 :" + location.getLatitude()+":"+location.getLongitude());
|
||||
if (location == null){
|
||||
return;
|
||||
}
|
||||
@@ -187,19 +186,21 @@ public class TaxiPassengerMapDirectionView
|
||||
boundsBuilder.include(currentLatLng);
|
||||
boundsBuilder.include(endLatLng);
|
||||
//第二个参数为四周留空宽度
|
||||
mAMap.animateCamera(CameraUpdateFactory.newLatLngBoundsRect(boundsBuilder.build(), 100,100,100,100));
|
||||
mAMap.moveCamera(CameraUpdateFactory.newLatLngBoundsRect(boundsBuilder.build(), 100,100,100,100));
|
||||
CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "onCarLocationChanged2--moveCamera :" + location.getLatitude()+", "+location.getLongitude());
|
||||
|
||||
} else {
|
||||
//设置希望展示的地图缩放级别
|
||||
CameraPosition cameraPosition = new CameraPosition.Builder()
|
||||
.target(mCarMarker.getPosition()).tilt(0).bearing(location.getBearing()).zoom(zoomLevel).build();
|
||||
mAMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
|
||||
mAMap.moveCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
|
||||
}
|
||||
//更新车辆位置
|
||||
if (mCarMarker != null) {
|
||||
CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "location.getBearing() = " + location.getBearing());
|
||||
// CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "location.getBearing() = " + location.getBearing());
|
||||
mCarMarker.setRotateAngle(360 - location.getBearing());
|
||||
mCarMarker.setPosition(currentLatLng);
|
||||
// CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "onCarLocationChanged2--loacation :" + location.getLatitude()+", "+location.getLongitude());
|
||||
mCarMarker.setToTop();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,21 +28,13 @@ import com.mogo.och.taxi.passenger.callback.ITaxiPassengerMapViewCallback;
|
||||
import com.mogo.och.taxi.passenger.constant.TaxiPassengerConst;
|
||||
import com.mogo.och.taxi.passenger.constant.TaxiPassengerOrderStatusEnum;
|
||||
import com.mogo.och.taxi.passenger.model.TaxiPassengerModel;
|
||||
import com.mogo.och.taxi.passenger.model.TaxiPassengerNaviToDestinationModel;
|
||||
import com.mogo.och.taxi.passenger.presenter.TaxiPassengerServingOrderPresenter;
|
||||
import com.mogo.och.taxi.passenger.utils.TPRouteDataTestUtils;
|
||||
import com.mogo.och.taxi.passenger.utils.TaxiPassengerUtils;
|
||||
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.List;
|
||||
|
||||
import mogo.telematics.pad.MessagePad;
|
||||
|
||||
/**
|
||||
* @author: wangmingjun
|
||||
* @date: 2022/3/8
|
||||
@@ -168,7 +160,9 @@ public class TaxiPassengerServingOrderFragment extends
|
||||
}
|
||||
|
||||
private void updateDriveRoadName(String currentRoadName){
|
||||
mProgessDes.setText(currentRoadName);
|
||||
if (mProgessDes != null){
|
||||
mProgessDes.setText(currentRoadName);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -177,18 +171,19 @@ public class TaxiPassengerServingOrderFragment extends
|
||||
if (mMapDirectionView != null) {
|
||||
mMapDirectionView.onResume();
|
||||
}
|
||||
TaxiPassengerModel.getInstance().naviOrderStartToEnd();
|
||||
TaxiPassengerModel.getInstance().initGeocodeSearch();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onHiddenChanged(boolean hidden) {
|
||||
super.onHiddenChanged(hidden);
|
||||
|
||||
if (hidden){//fragment 隐藏, 导航取消
|
||||
if (hidden){//fragment 隐藏, 导航取消c
|
||||
clearPolyline();
|
||||
TaxiPassengerNaviToDestinationModel.getInstance(getContext()).destroyAmaNavi();
|
||||
TaxiPassengerModel.getInstance().destoryGeocodeSearch();
|
||||
}else { //fragment 显示, 导航开始
|
||||
TaxiPassengerModel.getInstance().naviOrderStartToEnd();
|
||||
CallerLogger.INSTANCE.e(M_TAXI_P +"TaxiPassengerNaviTo","initGeocodeSearch");
|
||||
TaxiPassengerModel.getInstance().initGeocodeSearch();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -207,7 +202,7 @@ public class TaxiPassengerServingOrderFragment extends
|
||||
if (mMapDirectionView != null) {
|
||||
mMapDirectionView.onDestroy();
|
||||
}
|
||||
TaxiPassengerNaviToDestinationModel.getInstance(getContext()).destroyAmaNavi();
|
||||
TaxiPassengerModel.getInstance().destoryGeocodeSearch();
|
||||
}
|
||||
|
||||
public void routeResult(List<MogoLatLng> latLngList) {
|
||||
|
||||
@@ -348,7 +348,7 @@ public class TaxiFragment extends BaseTaxiTabFragment<TaxiFragment, TaxiPresente
|
||||
findViewById(R.id.test_bar_on_the_way_to_end).setOnClickListener(v -> {
|
||||
showNotice("自动驾驶已启动,请系好安全带");
|
||||
TaxiModel.getInstance().setOnTheWayToEndStation();
|
||||
testRouteInfoUpload();
|
||||
// testRouteInfoUpload();
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -453,6 +453,7 @@ class MoGoHmiFragment : MvpFragment<MoGoHmiContract.View?, HmiPresenter?>(),
|
||||
playTts: Boolean,
|
||||
expireTime: Long
|
||||
) {
|
||||
val playTTS = playTts && !AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)
|
||||
lifecycleScope.launchWhenResumed {
|
||||
activity?.let {
|
||||
val floatWindow = mWarningFloat
|
||||
@@ -489,7 +490,7 @@ class MoGoHmiFragment : MvpFragment<MoGoHmiContract.View?, HmiPresenter?>(),
|
||||
"$M_HMI$TAG",
|
||||
"mWarningFloat = $mWarningFloat---ttsContent = $ttsContent"
|
||||
)
|
||||
if (mWarningFloat != null && !TextUtils.isEmpty(ttsContent) && playTts) {
|
||||
if (mWarningFloat != null && !TextUtils.isEmpty(ttsContent) && playTTS) {
|
||||
CallerLogger.d("$M_HMI$TAG", "---> ttsContent = $ttsContent")
|
||||
AIAssist.getInstance(activity)
|
||||
.speakTTSVoice(ttsContent)
|
||||
|
||||
@@ -1,212 +0,0 @@
|
||||
package com.mogo.eagle.core.function.map;
|
||||
|
||||
import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_HMI;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.Context;
|
||||
|
||||
import com.mogo.commons.AbsMogoApplication;
|
||||
import com.mogo.eagle.core.data.config.FunctionBuildConfig;
|
||||
import com.mogo.eagle.core.data.enums.TrafficTypeEnum;
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
|
||||
import com.mogo.eagle.core.utilcode.util.UiThreadHandler;
|
||||
import com.mogo.map.MogoMap;
|
||||
import com.mogo.map.MogoMarkerManager;
|
||||
import com.mogo.module.common.MogoApisHandler;
|
||||
import com.mogo.module.common.constants.AdasRecognizedType;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
import mogo.telematics.pad.MessagePad;
|
||||
|
||||
/**
|
||||
* @author xiaoyuzhou
|
||||
* @date 2021/10/19 10:45 上午
|
||||
* 域控制器识别信息绘制
|
||||
*/
|
||||
public class IdentifyDataDrawerTest {
|
||||
private static final String TAG = "IdentifyDataDrawer";
|
||||
|
||||
protected final Context mContext;
|
||||
private static volatile IdentifyDataDrawerTest sInstance;
|
||||
|
||||
/**
|
||||
* 上一帧数据的缓存
|
||||
*/
|
||||
private static final ConcurrentHashMap<String, MessagePad.TrackedObject> mMarkersCaches = new ConcurrentHashMap<>();
|
||||
|
||||
private static final ConcurrentHashMap<String, KalmanFilter> algoCache = new ConcurrentHashMap<>();
|
||||
|
||||
/**
|
||||
* 记录每次实际绘制的交通元素UUID
|
||||
*/
|
||||
private final ArrayList<String> trafficDataUuidList = new ArrayList<>();
|
||||
/**
|
||||
* 过滤后的数据集合
|
||||
*/
|
||||
private final ArrayList<MessagePad.TrackedObject> mFilterTrafficData = new ArrayList<>();
|
||||
|
||||
private IdentifyDataDrawerTest() {
|
||||
mContext = AbsMogoApplication.getApp();
|
||||
addPreVehicleModel();
|
||||
}
|
||||
|
||||
public static IdentifyDataDrawerTest getInstance() {
|
||||
if (sInstance == null) {
|
||||
synchronized (IdentifyDataDrawerTest.class) {
|
||||
if (sInstance == null) {
|
||||
sInstance = new IdentifyDataDrawerTest();
|
||||
}
|
||||
}
|
||||
}
|
||||
return sInstance;
|
||||
}
|
||||
|
||||
public synchronized void release() {
|
||||
sInstance = null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 渲染 adas 识别的数据
|
||||
*
|
||||
* @param resultList adas感知融合数据
|
||||
*/
|
||||
@SuppressLint("NewApi")
|
||||
public void renderAdasRecognizedResult(List<MessagePad.TrackedObject> resultList) {
|
||||
if (resultList == null || resultList.isEmpty()) {
|
||||
clearOldMarker();
|
||||
CallerLogger.INSTANCE.w(TAG, "感知数据为空无需渲染……");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode()) {
|
||||
clearOldMarker();
|
||||
CallerLogger.INSTANCE.w(TAG, "渲染 adas 识别的数据 当前不是VR模式");
|
||||
return;
|
||||
}
|
||||
|
||||
//清除缓存
|
||||
for (MessagePad.TrackedObject data : resultList) {
|
||||
if (trafficDataUuidList.size() > 0 && trafficDataUuidList.contains("" + data.getUuid())) {
|
||||
trafficDataUuidList.remove("" + data.getUuid());
|
||||
}
|
||||
}
|
||||
trafficDataUuidList.forEach(uuid -> {
|
||||
mMarkersCaches.remove(uuid);
|
||||
algoCache.remove(uuid);
|
||||
});
|
||||
|
||||
ArrayList<MessagePad.TrackedObject> filterList = filterTrafficData(resultList);
|
||||
if (filterList.size() > 0) {
|
||||
// 绘制新数据
|
||||
MogoMarkerManager.getInstance(mContext)
|
||||
.updateBatchMarkerPosition(filterList);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 数据过滤器
|
||||
*
|
||||
* @return 过滤后的数据集合
|
||||
*/
|
||||
private ArrayList<MessagePad.TrackedObject> filterTrafficData(List<MessagePad.TrackedObject> trafficData) {
|
||||
mFilterTrafficData.clear();
|
||||
trafficDataUuidList.clear();
|
||||
for (MessagePad.TrackedObject data : trafficData) {
|
||||
// 过滤掉未知感知数据
|
||||
if (!FunctionBuildConfig.isDrawUnknownIdentifyData && data.getType() == TrafficTypeEnum.TYPE_TRAFFIC_ID_WEI_ZHI.getType()) {
|
||||
//CallerLogger.INSTANCE.w(TAG, "未知感知类型数据,丢弃,不渲染");
|
||||
continue;
|
||||
}
|
||||
|
||||
MessagePad.TrackedObject cacheData = mMarkersCaches.get("" + data.getUuid());
|
||||
double heading = MogoMap.getInstance().getMogoMap().getUIController().getAngle(cacheData.getLongitude(), cacheData.getLatitude(), data.getLongitude(), data.getLatitude());
|
||||
CallerLogger.INSTANCE.d(M_HMI + "arrow47", " uuid : " + data.getUuid() + " , origin heading : " + data.getHeading() + " , correct heading : " + heading + " ---- " + (data.getHeading() - heading));
|
||||
|
||||
// double heading = kalmanFilter(data);
|
||||
MessagePad.TrackedObject correctData = data.toBuilder().setHeading(heading).build();
|
||||
mFilterTrafficData.add(correctData);
|
||||
//更新已存在的感知物体数据
|
||||
mMarkersCaches.put("" + correctData.getUuid(), correctData);
|
||||
trafficDataUuidList.add("" + correctData.getUuid());
|
||||
}
|
||||
return mFilterTrafficData;
|
||||
}
|
||||
|
||||
private double kalmanFilter(MessagePad.TrackedObject data) {
|
||||
String uuid = "" + data.getUuid();
|
||||
if (algoCache.containsKey(uuid)) {
|
||||
Object o = algoCache.get(uuid);
|
||||
KalmanFilter kf = (KalmanFilter) o;
|
||||
assert kf != null;
|
||||
double[] lonLat = kf.filter(data.getLongitude(), data.getLatitude());
|
||||
algoCache.put(uuid, kf);
|
||||
MessagePad.TrackedObject cacheTrackObj = mMarkersCaches.get(uuid);
|
||||
assert cacheTrackObj != null;
|
||||
double heading = MogoMap.getInstance().getMogoMap().getUIController().getAngle(cacheTrackObj.getLongitude(), cacheTrackObj.getLatitude(), lonLat[0], lonLat[1]);
|
||||
CallerLogger.INSTANCE.d(M_HMI + "arrow47", " uuid : " + uuid + " , origin heading : " + data.getHeading() + " , correct heading : " + heading + " ---- " + (data.getHeading() - heading));
|
||||
return heading;
|
||||
} else {
|
||||
double r = 0.00005;
|
||||
if (AdasRecognizedType.valueFrom(data.getType()) == AdasRecognizedType.classIdTrafficBus || AdasRecognizedType.valueFrom(data.getType()) == AdasRecognizedType.classIdTrafficTruck) {
|
||||
r = 0.0001;
|
||||
}
|
||||
algoCache.put(uuid, new KalmanFilter(data.getLongitude(), data.getLatitude(), r));
|
||||
return data.getHeading();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 清除旧的 marker 数据
|
||||
*/
|
||||
public void clearOldMarker() {
|
||||
for (String uuid : trafficDataUuidList) {
|
||||
MogoMarkerManager.getInstance(mContext)
|
||||
.removeMarker(uuid);
|
||||
}
|
||||
trafficDataUuidList.clear();
|
||||
}
|
||||
|
||||
private void addPreVehicleModel() {
|
||||
CallerLogger.INSTANCE.d(TAG, "添加感知模型到地图中……");
|
||||
addPreVehicleModelWeiZhi(TrafficTypeEnum.TYPE_TRAFFIC_ID_WEI_ZHI, "添加感知模型到地图中……preVehicleStrWeiZhi=");
|
||||
|
||||
addPreVehicleModelWeiZhi(TrafficTypeEnum.TYPE_TRAFFIC_ID_PEOPLE, "添加感知模型到地图中……preVehicleStrPeople=");
|
||||
|
||||
addPreVehicleModelWeiZhi(TrafficTypeEnum.TYPE_TRAFFIC_ID_BICYCLE, "添加感知模型到地图中……preVehicleStrBicycle=");
|
||||
|
||||
addPreVehicleModelWeiZhi(TrafficTypeEnum.TYPE_TRAFFIC_ID_TA_CHE, "添加感知模型到地图中……preVehicleStrTaChe=");
|
||||
|
||||
addPreVehicleModelWeiZhi(TrafficTypeEnum.TYPE_TRAFFIC_ID_MOTO, "添加感知模型到地图中……preVehicleStrMoto=");
|
||||
|
||||
addPreVehicleModelWeiZhi(TrafficTypeEnum.TYPE_TRAFFIC_ID_BUS, "添加感知模型到地图中……preVehicleStrBus=");
|
||||
|
||||
addPreVehicleModelWeiZhi(TrafficTypeEnum.TYPE_TRAFFIC_ID_TRUCK, "添加感知模型到地图中……preVehicleStrTruck=");
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加模型到地图中
|
||||
*
|
||||
* @param typeTrafficIdWeiZhi
|
||||
* @param s
|
||||
*/
|
||||
private void addPreVehicleModelWeiZhi(TrafficTypeEnum typeTrafficIdWeiZhi, String s) {
|
||||
String preVehicleStrWeiZhi = MogoMarkerManager.getInstance(mContext)
|
||||
.addPreVehicleModel(typeTrafficIdWeiZhi.getType(),
|
||||
typeTrafficIdWeiZhi.getTraffic3DIconId());
|
||||
CallerLogger.INSTANCE.d(TAG, s + preVehicleStrWeiZhi);
|
||||
|
||||
if (preVehicleStrWeiZhi == null) {
|
||||
UiThreadHandler.postDelayed(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
CallerLogger.INSTANCE.w(TAG, "添加感知模型到地图中失败,尝试重复添加……");
|
||||
addPreVehicleModelWeiZhi(typeTrafficIdWeiZhi, s);
|
||||
}
|
||||
}, 1000L);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -2,12 +2,10 @@ package com.mogo.eagle.core.function.v2x.events.scenario.scene.road;
|
||||
|
||||
import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_V2X;
|
||||
|
||||
import com.mogo.eagle.core.data.config.FunctionBuildConfig;
|
||||
import com.mogo.eagle.core.data.enums.WarningDirectionEnum;
|
||||
import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWarningStatusListener;
|
||||
import com.mogo.eagle.core.function.call.hmi.CallerHmiManager;
|
||||
import com.mogo.eagle.core.function.call.map.CallerVisualAngleManager;
|
||||
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils;
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
|
||||
import com.mogo.eagle.core.function.v2x.events.bridge.BridgeApi;
|
||||
import com.mogo.eagle.core.function.v2x.events.consts.V2XConst;
|
||||
@@ -100,8 +98,7 @@ public class V2XRoadEventScenario extends AbsV2XScenario<V2XRoadEventEntity> imp
|
||||
V2XRoadEventEntity content = entity != null ? entity.getContent() : null;
|
||||
if (content != null) {
|
||||
//显示警告红边
|
||||
boolean playTts = !entity.isOnlyShow() && !AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode);
|
||||
CallerHmiManager.INSTANCE.showWarningV2X(entity.getType(), content.getAlarmContent(), content.getTts(), TAG, this, playTts, TimeUnit.SECONDS.toMillis(5));
|
||||
CallerHmiManager.INSTANCE.showWarningV2X(entity.getType(), content.getAlarmContent(), content.getTts(), TAG, this, !entity.isOnlyShow(), TimeUnit.SECONDS.toMillis(5));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -82,7 +82,7 @@ MOGO_LOCATION_VERSION=1.3.55
|
||||
MOGO_TELEMATIC_VERSION=1.3.55
|
||||
######## MogoAiCloudSDK Version ########
|
||||
# 自研地图
|
||||
MAP_SDK_VERSION=2.1.0.5
|
||||
MAP_SDK_VERSION=2.1.0.6
|
||||
MAP_SDK_OPERATION_VERSION=1.0.12
|
||||
# websocket
|
||||
WEBSOCKET_VERSION=1.1.7
|
||||
|
||||
@@ -126,25 +126,28 @@ public class AMapViewWrapper implements IMogoMapView,
|
||||
private void initViews() {
|
||||
// 初始化首次地图进入的时候的样式, MapAutoApi.INSTANCE.init(context, mapParams);将影响这里的数据
|
||||
int mapStyle = MapAutoApi.INSTANCE.getMapParams().getStyleMode();
|
||||
CallerLogger.INSTANCE.e(M_MAP + TAG, "默认配置地图模式:mapStyle=" + mapStyle);
|
||||
switch (mapStyle) {
|
||||
case MapAutoApi.MAP_STYLE_DAY:
|
||||
mCurrentUI = EnumMapUI.MAP_STYLE_DAY;
|
||||
break;
|
||||
case MapAutoApi.MAP_STYLE_DAY_VR:
|
||||
mCurrentUI = EnumMapUI.MAP_STYLE_DAY_VR;
|
||||
break;
|
||||
case MapAutoApi.MAP_STYLE_DAY_NAV:
|
||||
mCurrentUI = EnumMapUI.MAP_STYLE_DAY_NAV;
|
||||
break;
|
||||
case MapAutoApi.MAP_STYLE_NIGHT:
|
||||
mCurrentUI = EnumMapUI.MAP_STYLE_NIGHT;
|
||||
break;
|
||||
case MapAutoApi.MAP_STYLE_NIGHT_VR:
|
||||
mCurrentUI = EnumMapUI.MAP_STYLE_NIGHT_VR;
|
||||
break;
|
||||
case MapAutoApi.MAP_STYLE_NIGHT_NAV:
|
||||
mCurrentUI = EnumMapUI.MAP_STYLE_NIGHT_NAV;
|
||||
break;
|
||||
case MapAutoApi.MAP_STYLE_DAY_VR:
|
||||
mCurrentUI = EnumMapUI.MAP_STYLE_DAY_VR;
|
||||
break;
|
||||
case MapAutoApi.MAP_STYLE_NIGHT_VR:
|
||||
mCurrentUI = EnumMapUI.MAP_STYLE_NIGHT_VR;
|
||||
break;
|
||||
default:
|
||||
CallerLogger.INSTANCE.e(M_MAP + TAG, "暂不支持此地图模式,默认使用VR夜间模式");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -4,14 +4,10 @@ import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_OLD
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.SystemClock;
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import com.mogo.eagle.core.data.autopilot.AutopilotStatusInfo;
|
||||
import com.mogo.eagle.core.data.config.FunctionBuildConfig;
|
||||
import com.mogo.eagle.core.data.deva.scene.SceneModule;
|
||||
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.autopilot.IMoGoAutopilotStatusListener;
|
||||
@@ -22,18 +18,12 @@ import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager;
|
||||
import com.mogo.eagle.core.function.call.map.CallerMapLocationListenerManager;
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant;
|
||||
import com.mogo.module.common.utils.DrivingDirectionUtils;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
|
||||
import mogo.telematics.pad.MessagePad;
|
||||
import mogo_msg.MogoReportMsg;
|
||||
|
||||
@@ -119,13 +109,13 @@ public class MogoRouteOverlayManager implements
|
||||
trajectoryMsg.append(lat).append(",");
|
||||
}
|
||||
trajectoryMsg.append("}");
|
||||
Log.d(M_OLD_ROUTE + TAG, "receive router data:" + items.size());
|
||||
Log.d(M_OLD_ROUTE + TAG, trajectoryMsg.toString());
|
||||
CallerLogger.INSTANCE.d(M_OLD_ROUTE + TAG, "receive router data:" + items.size());
|
||||
CallerLogger.INSTANCE.d(M_OLD_ROUTE + TAG, trajectoryMsg.toString());
|
||||
} else {
|
||||
Log.d(M_OLD_ROUTE + TAG, "receive router data:" + items.size());
|
||||
CallerLogger.INSTANCE.d(M_OLD_ROUTE + TAG, "receive router data:" + items.size());
|
||||
}
|
||||
} finally {
|
||||
Log.d(M_OLD_ROUTE + TAG, "--- onAutopilotTrajectory -- cost:" + (SystemClock.elapsedRealtime() - start) + " ms");
|
||||
CallerLogger.INSTANCE.d(M_OLD_ROUTE + TAG, "--- onAutopilotTrajectory -- cost:" + (SystemClock.elapsedRealtime() - start) + " ms");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -211,7 +201,7 @@ public class MogoRouteOverlayManager implements
|
||||
if (isExcept) {
|
||||
RouteOverlayDrawer.getInstance(mContext).setVisible(false);
|
||||
}
|
||||
Log.d(M_OLD_ROUTE + TAG, "--- onLocationChanged -- cost:" + (SystemClock.elapsedRealtime() - start) + " ms");
|
||||
CallerLogger.INSTANCE.d(M_OLD_ROUTE + TAG, "--- onLocationChanged -- cost:" + (SystemClock.elapsedRealtime() - start) + " ms");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -9,7 +9,6 @@ import android.graphics.Color;
|
||||
import android.os.Handler;
|
||||
import android.os.HandlerThread;
|
||||
import android.os.SystemClock;
|
||||
import android.util.Log;
|
||||
import androidx.core.util.Pools;
|
||||
import com.mogo.eagle.core.data.map.MogoLatLng;
|
||||
import com.mogo.eagle.core.data.map.MogoLocation;
|
||||
@@ -159,15 +158,16 @@ public class RouteOverlayDrawer {
|
||||
public void run() {
|
||||
LinkedList<MogoLatLng> points = this.points;
|
||||
points.clear();
|
||||
boolean isExcept = false;
|
||||
try {
|
||||
long drawStart = SystemClock.elapsedRealtime();
|
||||
List<MessagePad.TrajectoryPoint> routes = this.routeList;
|
||||
if (routes == null || routes.size() < 2) {
|
||||
setVisible(false);
|
||||
int total;
|
||||
if (routes == null || (total = routes.size()) < 2) {
|
||||
isExcept = true;
|
||||
return;
|
||||
}
|
||||
int total = routes.size();
|
||||
for (int i = 0; i < total ; i++) {
|
||||
for (int i = 0; i < total; i++) {
|
||||
MessagePad.TrajectoryPoint route = null;
|
||||
try {
|
||||
route = routes.get(i);
|
||||
@@ -175,7 +175,7 @@ public class RouteOverlayDrawer {
|
||||
continue;
|
||||
}
|
||||
} catch (Throwable t) {
|
||||
Log.d(M_OLD_ROUTE + TAG, "render-error:" + t.getMessage());
|
||||
CallerLogger.INSTANCE.d(M_OLD_ROUTE + TAG, "render-error:" + t.getMessage());
|
||||
}
|
||||
if (route == null) {
|
||||
//数组越界了,结束循环
|
||||
@@ -196,13 +196,13 @@ public class RouteOverlayDrawer {
|
||||
double lon = CallerAutoPilotStatusListenerManager.INSTANCE.getCurWgs84Lon();
|
||||
double lat = CallerAutoPilotStatusListenerManager.INSTANCE.getCurWgs84Lat();
|
||||
if (lon == 0.0 || lat == 0.0) {
|
||||
isExcept = true;
|
||||
return;
|
||||
}
|
||||
if (location != null && points.size() > 0) {
|
||||
int i = 0;
|
||||
int max = Math.min(20, points.size() / 2);
|
||||
MogoLatLng top = null;
|
||||
int remove = 0;
|
||||
long angle;
|
||||
while (i++ < max) {
|
||||
MogoLatLng first = points.peek();
|
||||
@@ -214,53 +214,10 @@ public class RouteOverlayDrawer {
|
||||
}
|
||||
angle = isPointOnCarFront(lon, lat, location.getBearing(), first.lon, first.lat);
|
||||
if (angle >= 90) {
|
||||
Log.d(M_OLD_ROUTE + TAG, "render - removeCount:" + (++remove));
|
||||
points.poll();
|
||||
}
|
||||
top = first;
|
||||
}
|
||||
//distance
|
||||
// if (top != null) {
|
||||
// double distance = DrivingDirectionUtils.distance(top.lon, top.lat, lon, lat) * 10_0000;
|
||||
// angle = isPointOnCarFront(lon, lat, location.getBearing(), top.lon, top.lat);
|
||||
// Log.d(M_OLD_ROUTE + TAG, "render - distance:" + distance + ",angle:" + angle);
|
||||
// if (distance > 4.0 && angle >= 80) {
|
||||
// float bearing = location.getBearing();
|
||||
// Pair<Double, Double> p_car_f = DrivingDirectionUtils.calculateNewPoint(lon, lat, bearing, 5);
|
||||
// Pair<Double, Double> p_rout_f = DrivingDirectionUtils.calculateNewPoint(top.lon, top.lat, bearing, 5);
|
||||
// if (p_car_f != null && p_rout_f != null) {
|
||||
// Stack<MogoLatLng> stack = new Stack<>();
|
||||
// stack.add(new MogoLatLng(p_car_f.second, p_car_f.first));
|
||||
// double new_bear = bearing + 90;
|
||||
// while (distance > 0.1) {
|
||||
// distance /= 2;
|
||||
// Pair<Double, Double> p = DrivingDirectionUtils.calculateNewPoint(p_car_f.first, p_car_f.second, new_bear, distance);
|
||||
// if (p == null) {
|
||||
// break;
|
||||
// }
|
||||
// stack.push(new MogoLatLng(p.second, p.first));
|
||||
// }
|
||||
// Log.d("XXXX", "----stack:" + stack.size());
|
||||
// long newAngle = DrivingDirectionUtils.getDegreeOfCar2Poi2(p_rout_f.first, p_rout_f.second, top.lon, top.lat, bearing);
|
||||
// Log.d("XXXX", "----newAngle:" + newAngle);
|
||||
// while (newAngle > 90) {
|
||||
// Log.d("XXXX", "----newAngle:" + newAngle);
|
||||
// points.poll();
|
||||
// MogoLatLng peek = points.peek();
|
||||
// if (peek == null) {
|
||||
// points.poll();
|
||||
// continue;
|
||||
// }
|
||||
// newAngle = DrivingDirectionUtils.getDegreeOfCar2Poi2(p_rout_f.first, p_rout_f.second, peek.lon, peek.lat, bearing);
|
||||
// }
|
||||
// while (!stack.isEmpty()) {
|
||||
// MogoLatLng pop = stack.pop();
|
||||
// points.addFirst(pop);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
MogoLatLng self = pools.acquire();
|
||||
if (self == null) {
|
||||
self = new MogoLatLng(lat, lon);
|
||||
@@ -280,15 +237,16 @@ public class RouteOverlayDrawer {
|
||||
mMoGoPolyline.setVisible(true);
|
||||
}
|
||||
} else {
|
||||
if(mMoGoPolyline != null) {
|
||||
mMoGoPolyline.setVisible(false);
|
||||
}
|
||||
isExcept = true;
|
||||
}
|
||||
long drawEnd = SystemClock.elapsedRealtime();
|
||||
Log.d(M_OLD_ROUTE + TAG, "drawTrajectoryList cost : " + (drawEnd - drawStart));
|
||||
CallerLogger.INSTANCE.d(M_OLD_ROUTE + TAG, "drawTrajectoryList cost : " + (drawEnd - drawStart) + "ms and isExcept:" + isExcept);
|
||||
} catch (Throwable t) {
|
||||
Log.d(M_OLD_ROUTE + TAG, "drawTrajectoryList error : " + t);
|
||||
CallerLogger.INSTANCE.d(M_OLD_ROUTE + TAG, "drawTrajectoryList error (isExcept: "+isExcept+") : " + t);
|
||||
} finally {
|
||||
if (isExcept) {
|
||||
setVisible(false);
|
||||
}
|
||||
if (points.size() > 0) {
|
||||
for (int i = 0; i < points.size(); i++) {
|
||||
MogoLatLng latLng = points.get(i);
|
||||
|
||||
Reference in New Issue
Block a user