优化显示逻辑

This commit is contained in:
wangcongtao
2021-03-18 14:47:11 +08:00
parent 849f465dde
commit 1a85937a12
9 changed files with 89 additions and 89 deletions

View File

@@ -1,11 +1,9 @@
package com.mogo.module.common.drawer;
import android.content.Context;
import android.graphics.BitmapFactory;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
import android.util.ArrayMap;
import com.mogo.commons.AbsMogoApplication;
import com.mogo.map.MogoLatLng;
@@ -26,8 +24,6 @@ import java.util.Map;
import java.util.Random;
import java.util.concurrent.ConcurrentHashMap;
import static java.lang.Math.PI;
public
/**
* @author congtaowang
@@ -167,19 +163,14 @@ class AdasRecognizedResultDrawer extends BaseDrawer {
}
renderAdasOneFrame( recognizedListResult, newAdasRecognizedMarkersCaches );
}
for (String id : mAdasRecognizedMarkersCaches.keySet()) {
for ( String id : mAdasRecognizedMarkersCaches.keySet() ) {
// 清除道路缓存
clearRoadCacheById(id);
clearRoadCacheById( id );
}
sendMessage( MSG_REMOVE_DIRTY_MARKERS, mAdasRecognizedMarkersCaches );
mAdasRecognizedMarkersCaches = newAdasRecognizedMarkersCaches;
}
private final Map< String, Boolean > mIsMatchStatusCache = new ArrayMap<>();
private String markerRes;
private String markerRes2;
/**
* 绘制某个物体的一个数据
*
@@ -198,14 +189,15 @@ class AdasRecognizedResultDrawer extends BaseDrawer {
}
final long start = System.currentTimeMillis();
ADASRecognizedResult lastPosition = mLastPositions.remove( uniqueKey );
double lastLon = -1;
double lastLat = -1;
if (lastPosition != null) {
if ( lastPosition != null ) {
lastLon = lastPosition.lon;
lastLat = lastPosition.lat;
}
double[] matchLonLat = getMatchLonLat(recognizedListResult.uuid, recognizedListResult.lon, recognizedListResult.lat, recognizedListResult.heading, lastLon, lastLat);
double[] matchLonLat = getMatchLonLat( recognizedListResult.uuid, recognizedListResult.lon, recognizedListResult.lat, recognizedListResult.heading, lastLon, lastLat );
recognizedListResult.lon = matchLonLat[0];
recognizedListResult.lat = matchLonLat[1];
@@ -224,70 +216,13 @@ class AdasRecognizedResultDrawer extends BaseDrawer {
if ( lastPosition != null ) {
long interval = computeAnimDuration( lastPosition.systemTime, recognizedListResult.systemTime, lastPosition.satelliteTime, recognizedListResult.satelliteTime );
MovingPoint startPoint = new MovingPoint();
startPoint.point = new MogoLatLng( lastPosition.lat, lastPosition.lon );
startPoint.marker = marker;
startPoint.delay = 0L;
startPoint.angle = ( float ) lastPosition.heading;
long cost = System.currentTimeMillis() - start;
final MovingPoint endPoint = new MovingPoint();
endPoint.point = new MogoLatLng( recognizedListResult.lat, recognizedListResult.lon );
endPoint.marker = marker;
endPoint.angle = ( float ) recognizedListResult.heading;
interval -= cost;
endPoint.delay = interval;
// method 1
final IMogoMarker renderRef = marker;
final long intervalRef = interval;
final MogoLatLng renderLoc = new MogoLatLng( recognizedListResult.lat, recognizedListResult.lon );
long cost = System.currentTimeMillis() - start;
final long intervalRef = interval - cost;
SimpleHandlerThreadPool.getInstance().postRender( () -> {
renderRef.addDynamicAnchorPosition( endPoint.point, endPoint.angle, intervalRef );
//
// // 原坐标
// MogoMarkerOptions options2 = new MogoMarkerOptions();
// options2.gps( true )
// .position( new MogoLatLng( lat, lon ) )
// .anchor( 0.5f, 0.5f )
// .rotate( endPoint.angle );
// if ( TextUtils.isEmpty( markerRes2 ) ) {
// options2.icon( BitmapFactory.decodeResource( mContext.getResources(), R.drawable.sy ) );
// } else {
// options2.resName( markerRes2 );
// }
// IMogoMarker marker2 = MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager( mContext ).addMarker( TAG, options2 );
// if ( TextUtils.isEmpty( markerRes2 ) ) {
// markerRes2 = marker2.getMarkerResName();
// }
//
// // 匹配坐标
// MogoMarkerOptions options = new MogoMarkerOptions();
// options.gps( true )
// .position( endPoint.point )
// .anchor( 0.5f, 0.5f )
// .rotate( endPoint.angle );
// if ( TextUtils.isEmpty( markerRes ) ) {
// options.icon( BitmapFactory.decodeResource( mContext.getResources(), R.drawable.sr ) );
// } else {
// options.resName( markerRes );
// }
// IMogoMarker marker1 = MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager( mContext ).addMarker( TAG, options );
// if ( TextUtils.isEmpty( markerRes ) ) {
// markerRes = marker1.getMarkerResName();
// }
renderRef.addDynamicAnchorPosition( renderLoc, ( float ) recognizedListResult.heading, intervalRef );
} );
// method 2
// List< MovingPoint > points = interpolate( startPoint, endPoint, interval );
// Message msg = new Message();
// MovingPoints obj = new MovingPoints();
// obj.points = points;
// msg.obj = obj;
// msg.what = MSG_MOVE_POINTS;
// mRenderThreadHandler.sendMessage( msg );
// Logger.d( TAG, "anim duration: %s, points size = %s", interval, points.size() );
} else {
marker.setRotateAngle( ( ( float ) recognizedListResult.heading ) );
marker.setPosition( recognizedListResult.lat, recognizedListResult.lon );
@@ -296,8 +231,7 @@ class AdasRecognizedResultDrawer extends BaseDrawer {
SpeedData obj = new SpeedData();
obj.context = mContext;
obj.marker = marker;
// obj.speed = match ? 1.0 : 0.0;
obj.speed = recognizedListResult.speed;//;lineCounter++
obj.speed = recognizedListResult.speed;
msg.obj = obj;
msg.what = MSG_DISPLAY_SPEED;
mRenderThreadHandler.sendMessage( msg );

View File

@@ -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.MogoLatLng;
import com.mogo.map.marker.IMogoMarker;
@@ -61,6 +62,7 @@ class BaseDrawer {
if ( mWorkThreadHandler == null ) {
initWorkThreadHandler();
}
init();
}
private static Handler mWorkThreadHandler;
@@ -144,6 +146,9 @@ class BaseDrawer {
return R.raw.people;
}
private void init() {
}
/**
* @param fromType {@link com.mogo.realtime.entity.CloudRoadData}
* @return
@@ -155,7 +160,7 @@ class BaseDrawer {
|| recognizedType == AdasRecognizedType.classIdTrafficTruck ) {
if ( fromType == CloudRoadData.FROM_ADAS ) {
// 灰色
return "#D8D8D8FF";
return "#5A8DFFFF";
} else if ( fromType == CloudRoadData.FROM_ROAD_UNIT ) {
// 绿色
return "#3FE792FF";
@@ -172,6 +177,58 @@ class BaseDrawer {
return "#D8D8D8FF";
}
/**
* 根据速度、经纬度计算距离判断车辆颜色
*
* @param speed 车速
* @param lon 经度
* @param lat 纬度
* @return 实际车辆颜色
*/
protected String getModelRenderColor( double speed, double lon, double lat, double angle ) {
// 距离策略
double curLon = MogoApisHandler.getInstance().getApis().getAdasControllerApi().getLastLon();
double curLat = MogoApisHandler.getInstance().getApis().getAdasControllerApi().getLastLat();
double distance = CoordinateUtils.calculateLineDistance( lon, lat, curLon, curLat ) * 100;
if ( distance < 50 ) {
return Car3DModelColor.Dangerous.color;
} else if ( distance < 100 && distance >= 50 ) {
return Car3DModelColor.Warming.color;
}
// 速度策略
double curSpeed = MogoApisHandler.getInstance().getApis().getAdasControllerApi().getLastSpeed();
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;
}
/**
* 模型颜色
*/
public enum Car3DModelColor {
Normal( "#D8D8D8FF" ),
Warming( "#FFD53EFF" ),
Dangerous( "#FF3C45FF" );
private String color;
Car3DModelColor( String color ) {
this.color = color;
}
}
private TextView mSpeedView = null;
/**
@@ -273,8 +330,8 @@ class BaseDrawer {
return matchRoad;
}
public void clearRoadCacheById(String id) {
MogoApisHandler.getInstance().getApis().getMapServiceApi().getMapUIController().clearRoadCacheById(id);
public void clearRoadCacheById( String id ) {
MogoApisHandler.getInstance().getApis().getMapServiceApi().getMapUIController().clearRoadCacheById( id );
}
/**
@@ -312,15 +369,11 @@ class BaseDrawer {
if ( duration % MAP_RENDER_FRAME_FREQUENCY < MAP_RENDER_FRAME_FREQUENCY / 2 ) {
interpolateFrame -= 1;
}
// if ( interpolateFrame == 0 ) {
// interpolateFrame = 1;
// }
List< MovingPoint > arrayList = new ArrayList<>();
double _angle = ( end.angle + start.angle ) / 2;
if ( Math.abs( end.angle - start.angle ) > 5 ) {
_angle = Math.atan2( Math.abs( start.point.lon - end.point.lon ), Math.abs( start.point.lat - end.point.lat ) ) * ( 180 / PI );
}
// arrayList.add( start );
if ( interpolateFrame > 0 ) {
double lonStep = ( end.point.lon - start.point.lon ) / ( interpolateFrame + 1 );
double latStep = ( end.point.lat - start.point.lat ) / ( interpolateFrame + 1 );
@@ -388,7 +441,7 @@ class BaseDrawer {
}
protected double[] getMatchLonLat(String id,double lon,double lat,double heading,double lastLon,double lastLat){
double[] matchedPoint = SnapshotSetDataDrawer.getInstance().matchRoad( id, lon,
double[] matchedPoint = matchRoad( id, lon,
lat,
heading,
true

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -170,6 +170,12 @@ public interface IMogoADASController extends IProvider {
*/
double getLastLon();
/**
* 获取车身定位经度
* @return
*/
double getLastSpeed();
/**
* 结束自动驾驶
*/

View File

@@ -403,6 +403,7 @@ public class MogoADASController implements IMogoADASController {
stateInf.setValues( bean );
mLastLon = ownerCarStateModel.getLon();
mLastLat = ownerCarStateModel.getLat();
mSpeed = ownerCarStateModel.getGnss_speed();
if ( mMogoAdasCarDataCallback != null ) {
mMogoAdasCarDataCallback.onAdasCarDataCallback( stateInf );
}
@@ -454,6 +455,12 @@ public class MogoADASController implements IMogoADASController {
private double mLastLon;
private double mLastLat;
private double mSpeed;
@Override
public double getLastSpeed() {
return mSpeed;
}
public double getLastLat() {
return mLastLat;