优化显示逻辑

This commit is contained in:
wangcongtao
2021-03-22 15:10:55 +08:00
parent b7547a34aa
commit dca685532a
13 changed files with 395 additions and 712 deletions

View File

@@ -67,7 +67,7 @@ dependencies {
implementation project(':foudations:mogo-commons')
}
implementation 'com.zhidaoauto.machine:map:1.0.0-vr-8.4.0'
implementation 'com.zhidaoauto.machine:map:1.0.0-vr-8.4.2'
// implementation 'com.zhidaoauto.machine:map:1.0.0-vr-test-3.4'
}

View File

@@ -766,7 +766,7 @@ public class AMapViewWrapper implements IMogoMapView,
}
private TextView mSpeedView = null;
private int mLastYOffset = 10;
private int mLastYOffset = 20;
private void showSelfSpeed(float speed) {
@@ -790,14 +790,14 @@ public class AMapViewWrapper implements IMogoMapView,
String speedVal = String.valueOf(speedIntVal);
String infoResName = ResIdCache.getVal(speedVal);
int offset = 10;
int offset = 20;
if ( !mMapView.getMapAutoViewHelper().getLockMode() ) {
offset = 30;
}
if ( offset != mLastYOffset ) {
mLastYOffset = offset;
mSelfMarker.setInfoWindowOffset( 0, offset );
}
mSelfMarker.setInfoWindowOffset( 0, offset );
if (TextUtils.isEmpty(infoResName)) {
if (mSpeedView == null) {
mSpeedView = new TextView(mMapView.getContext());

View File

@@ -267,16 +267,6 @@ public class AMapMarkerWrapper implements IMogoMarker, Observer {
@Override
public void setOnMarkerClickListener( IMogoMarkerClickListener listener ) {
mMogoMarkerClickListener = listener;
// if ( mMarker != null ) {
// mMarker.setOnMarkClickListener( new OnMarkClickListener() {
// @Override
// public void onMarkClick( @NotNull Marker marker ) {
// if ( mMogoMarkerClickListener != null ) {
// mMogoMarkerClickListener.onMarkerClicked( AMapMarkerWrapper.this );
// }
// }
// } );
// }
}
@Override
@@ -347,13 +337,6 @@ public class AMapMarkerWrapper implements IMogoMarker, Observer {
return;
}
startScaleAnimation( fromX, toX, fromY, toY, duration, interpolator, null );
// ScaleAnimation animationScale = new ScaleAnimation(fromX, toX, fromY, toY);
// animationScale.setDuration(duration);
// animationScale.setFillMode(Animation.FILL_MODE_FORWARDS);
// animationScale.setInterpolator(interpolator);
//
// mMarker.setAnimation(animationScale);
// mMarker.startAnimation();
}
@Override
@@ -505,12 +488,14 @@ public class AMapMarkerWrapper implements IMogoMarker, Observer {
}
@Override
public void use3DResource( int model3D ) {
public String use3DResource( int model3D ) {
try {
mMarker.setMarkerOptions( mMarker.getMarkeOptions().marker3DIcon( model3D ) );
mMarker.marker3DIcon( model3D );
return mMarker.getMarkeOptions().getMarkerIconName();
} catch ( Exception e ) {
Logger.e( TAG, e, "use3DResource" );
}
return null;
}
@Override

View File

@@ -347,8 +347,8 @@ public interface IMogoMarker {
/**
* 使用3D资源
*/
default void use3DResource( @RawRes int model3D ) {
default String use3DResource( @RawRes int model3D ) {
return "";
}
/**

View File

@@ -1,28 +1,23 @@
package com.mogo.module.common.drawer;
import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
import com.mogo.commons.AbsMogoApplication;
import com.mogo.commons.debug.DebugConfig;
import com.mogo.map.MogoLatLng;
import com.mogo.map.marker.IMogoMarker;
import com.mogo.map.marker.MogoMarkerOptions;
import com.mogo.module.common.MogoApisHandler;
import com.mogo.module.common.R;
import com.mogo.module.common.constants.DataTypes;
import com.mogo.module.common.utils.SimpleHandlerThreadPool;
import com.mogo.realtime.entity.ADASRecognizedResult;
import com.mogo.realtime.entity.CloudRoadData;
import com.mogo.utils.WorkThreadHandler;
import com.mogo.utils.logger.Logger;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.concurrent.ConcurrentHashMap;
public
@@ -38,81 +33,8 @@ class AdasRecognizedResultDrawer extends BaseDrawer {
private static volatile AdasRecognizedResultDrawer sInstance;
private final Context mContext;
private Handler mRenderThreadHandler = null;
public static final int MSG_MOVE_POINTS = 9;
public static final int MSG_MOVE_POINT = 10;
public static final int MSG_DISPLAY_SPEED = 11;
public AdasRecognizedResultDrawer() {
super();
mContext = AbsMogoApplication.getApp();
initHandler();
}
/**
* 初始化清理marker的线程
*/
private void initHandler() {
mRenderThreadHandler = new Handler( WorkThreadHandler.newInstance( "render-thread-" + new Random().nextLong() ).getLooper() ) {
@Override
public void handleMessage( Message msg ) {
super.handleMessage( msg );
if ( msg.what == MSG_MOVE_POINTS ) {
if ( msg.obj instanceof MovingPoints ) {
startSettingPointLooper( ( ( MovingPoints ) msg.obj ) );
}
} else if ( msg.what == MSG_MOVE_POINT ) {
if ( msg.obj instanceof MovingPoint ) {
moveMarker( ( ( MovingPoint ) msg.obj ), msg.arg1 );
}
} else if ( msg.what == MSG_DISPLAY_SPEED ) {
if ( msg.obj instanceof SpeedData ) {
showSpeed( ( SpeedData ) msg.obj );
}
}
}
};
}
/**
* 开启设置位置的循环
*
* @param data
*/
private void startSettingPointLooper( MovingPoints data ) {
List< MovingPoint > points = data.points;
for ( int i = 0; i < points.size(); i++ ) {
Message msg = Message.obtain();
msg.what = MSG_MOVE_POINT;
msg.obj = points.get( i );
if ( i == 0 || i == points.size() - 1 ) {
msg.arg1 = R.drawable.sr;
} else {
msg.arg1 = R.drawable.sy;
}
mRenderThreadHandler.sendMessageDelayed( msg, points.get( i ).delay );
}
}
/**
* 设置 marker 的点到新的位置
*
* @param pointData
*/
private void moveMarker( MovingPoint pointData, int drId ) {
if ( pointData == null ) {
return;
}
pointData.move();
}
private void showSpeed( SpeedData data ) {
if ( data == null ) {
return;
}
data.showSpeed();
}
private final Map< String, ADASRecognizedResult > mLastPositions = new ConcurrentHashMap<>();
@@ -147,7 +69,7 @@ class AdasRecognizedResultDrawer extends BaseDrawer {
* @param resultList
*/
public void renderAdasRecognizedResult( List< ADASRecognizedResult > resultList ) {
if ( resultList == null || resultList.isEmpty() || !DebugConfig.isUseAdasRecognize()) {
if ( resultList == null || resultList.isEmpty() || !DebugConfig.isUseAdasRecognize() ) {
clearOldMarker();
return;
}
@@ -158,32 +80,109 @@ class AdasRecognizedResultDrawer extends BaseDrawer {
}
Map< String, IMogoMarker > newAdasRecognizedMarkersCaches = new HashMap<>();
List< ADASRecognizedResult > newDiffSet = new ArrayList<>();
for ( ADASRecognizedResult recognizedListResult : resultList ) {
if ( recognizedListResult == null ) {
if ( isUselessValue( recognizedListResult ) ) {
continue;
}
renderAdasOneFrame( recognizedListResult, newAdasRecognizedMarkersCaches );
// 复用之前存在的 marker
String uniqueKey = recognizedListResult.uuid;
IMogoMarker marker = mMarkersCaches.remove( uniqueKey );
if ( marker != null && !marker.isDestroyed() ) {
renderAdasOneFrame( marker, uniqueKey, recognizedListResult, newAdasRecognizedMarkersCaches );
} else {
// 新增差集
newDiffSet.add( recognizedListResult );
}
}
removeUselessMarker();
// 能复用的 marker 数量
int cachedMarkerSize = mMarkersCaches.size();
// 需要新增的 marker 数量
int newDiffSetSize = newDiffSet.size();
// 能复用的数量
int size = cachedMarkerSize >= newDiffSetSize ? newDiffSetSize : cachedMarkerSize;
// 复用过期 marker
if ( newDiffSetSize > 0 ) {
Iterator< Map.Entry< String, IMogoMarker > > entryIterator = mMarkersCaches.entrySet().iterator();
for ( int i = 0; i < size; i++ ) {
ADASRecognizedResult recognizedListResult = newDiffSet.get( i );
String uniqueKey = recognizedListResult.uuid;
Map.Entry< String, IMogoMarker > entry = entryIterator.next();
entryIterator.remove();
ADASRecognizedResult old = mLastPositions.remove( entry.getKey() );
IMogoMarker marker = entry.getValue();
if ( marker == null ) {
continue;
}
// 更新资源内容
if ( old == null || old.type != recognizedListResult.type ) {
String resIdVal = null;
int resId = getModelRes( recognizedListResult.type );
resIdVal = resId + "";
String resName = mMarkerCachesResMd5Values.get( resIdVal );
if ( !TextUtils.isEmpty( resName ) ) {
if ( !TextUtils.equals( resName, marker.getMarkerResName() ) ) {
marker.use3DResource( resName );
}
} else {
resName = marker.use3DResource( resId );
mMarkerCachesResMd5Values.put( resIdVal, resName );
}
}
renderAdasOneFrame( marker, uniqueKey, recognizedListResult, newAdasRecognizedMarkersCaches );
}
// 复用过后还需新增的 marker
for ( int i = size; i < newDiffSetSize; i++ ) {
ADASRecognizedResult recognizedListResult = newDiffSet.get( i );
String uniqueKey = recognizedListResult.uuid;
IMogoMarker marker = drawAdasRecognizedDataMarker( recognizedListResult );
if ( marker == null ) {
continue;
}
renderAdasOneFrame( marker, uniqueKey, recognizedListResult, newAdasRecognizedMarkersCaches );
}
}
if ( cachedMarkerSize - size > 0 ) {
sendMessage( MSG_REMOVE_DIRTY_MARKERS, mMarkersCaches );
}
sendMessage( MSG_REMOVE_DIRTY_MARKERS, mMarkersCaches );
mMarkersCaches = newAdasRecognizedMarkersCaches;
}
private boolean isUselessValue( ADASRecognizedResult recognizedListResult ) {
if ( recognizedListResult == null ) {
return true;
}
if ( !isRenderType( recognizedListResult.type ) ) {
return true;
}
String uniqueKey = recognizedListResult.uuid;
if ( TextUtils.isEmpty( uniqueKey ) ) {
return true;
}
return false;
}
/**
* 绘制某个物体的一个数据
*
* @param recognizedListResult
* @param newAdasRecognizedMarkersCaches
*/
private void renderAdasOneFrame( ADASRecognizedResult recognizedListResult, Map< String, IMogoMarker > newAdasRecognizedMarkersCaches ) {
// 暂时只显示车辆
if ( !isRenderType( recognizedListResult.type ) ) {
return;
}
String uniqueKey = recognizedListResult.uuid;
if ( TextUtils.isEmpty( uniqueKey ) ) {
return;
}
private void renderAdasOneFrame( IMogoMarker marker,
String uniqueKey,
ADASRecognizedResult recognizedListResult,
Map< String, IMogoMarker > newAdasRecognizedMarkersCaches ) {
final long start = System.currentTimeMillis();
@@ -201,41 +200,32 @@ class AdasRecognizedResultDrawer extends BaseDrawer {
mLastPositions.put( uniqueKey, recognizedListResult );
Logger.d( "matchRoad", "cost = %s", System.currentTimeMillis() - start );
IMogoMarker marker = mMarkersCaches.remove( uniqueKey );
if ( marker == null || marker.isDestroyed() ) {
marker = drawAdasRecognizedDataMarker( recognizedListResult );
if ( marker == null ) {
return;
}
}
newAdasRecognizedMarkersCaches.put( uniqueKey, marker );
if ( lastPosition != null ) {
long interval = computeAnimDuration( lastPosition.systemTime, recognizedListResult.systemTime, lastPosition.satelliteTime, recognizedListResult.satelliteTime );
final IMogoMarker renderRef = marker;
final MogoLatLng renderLoc = new MogoLatLng( recognizedListResult.lat, recognizedListResult.lon );
long cost = System.currentTimeMillis() - start;
final long intervalRef = interval - cost;
SimpleHandlerThreadPool.getInstance().postRender( () -> {
renderRef.addDynamicAnchorPosition( renderLoc, ( float ) recognizedListResult.heading, intervalRef );
marker.addDynamicAnchorPosition( renderLoc, ( float ) recognizedListResult.heading, intervalRef );
} );
marker.setAnchorColor( getModelRenderColor(recognizedListResult.speed, recognizedListResult.lon, recognizedListResult.lat, recognizedListResult.heading) );
} else {
marker.setRotateAngle( ( ( float ) recognizedListResult.heading ) );
marker.setPosition( recognizedListResult.lat, recognizedListResult.lon );
}
marker.setAnchorColor( getModelRenderColor( recognizedListResult.speed, recognizedListResult.lon, recognizedListResult.lat, recognizedListResult.heading ) );
if ( shouldShowSpeed( recognizedListResult.type ) ) {
Message msg = new Message();
Message msg = mRenderThreadHandler.obtainMessage();
SpeedData obj = new SpeedData();
obj.context = mContext;
obj.marker = marker;
obj.speed = recognizedListResult.speed;
msg.obj = obj;
msg.what = MSG_DISPLAY_SPEED;
mRenderThreadHandler.sendMessage( msg );
msg.sendToTarget();
}
}
@@ -258,8 +248,7 @@ class AdasRecognizedResultDrawer extends BaseDrawer {
.anchor( 0.5f, 0.5f )
.set3DMode( true )
.gps( true )
// .anchorColor( getModelRenderColor( CloudRoadData.FROM_ADAS, recognizedListResult.type ) )
.anchorColor( getModelRenderColor(recognizedListResult.speed, recognizedListResult.lon, recognizedListResult.lat, recognizedListResult.heading) )
.anchorColor( getModelRenderColor( recognizedListResult.speed, recognizedListResult.lon, recognizedListResult.lat, recognizedListResult.heading ) )
.controlAngle( true )
.resName( mMarkerCachesResMd5Values.get( resIdVal ) )
.icon3DRes( resId )

View File

@@ -26,8 +26,10 @@ import com.mogo.utils.logger.Logger;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Set;
import static java.lang.Math.PI;
@@ -41,33 +43,6 @@ public
*/
class BaseDrawer {
/**
* marker 单个点移动的对象
*/
public static class MovingPoint {
public MogoLatLng point;
public float angle;
public IMogoMarker marker;
public long delay;
public void move() {
try {
marker.setRotateAngle( angle );
marker.setPosition( point.lat, point.lon );
} catch ( Exception e ) {
e.printStackTrace();
}
}
}
/**
* marker 平滑移动的对象
*/
public static class MovingPoints {
public List< MovingPoint > points;
}
/**
* 速度显示对象
*/
@@ -93,6 +68,11 @@ class BaseDrawer {
public static final int MSG_REMOVE_DIRTY_MARKERS = 9990;
public static final int MSG_REMOVE_ADAS_MARKERS = 9992;
/**
* 显示速度
*/
public static final int MSG_DISPLAY_SPEED = 11;
/**
* 地图刷新频率
*/
@@ -113,43 +93,86 @@ class BaseDrawer {
*/
protected Map< String, IMogoMarker > mMarkersCaches = new HashMap<>();
protected final Context mContext;
protected static Handler mRenderThreadHandler = null;
public BaseDrawer() {
if ( mWorkThreadHandler == null ) {
initWorkThreadHandler();
}
init();
mContext = AbsMogoApplication.getApp();
initWorkThreadHandler();
}
private static Handler mWorkThreadHandler;
/**
* 专门处理 adas 数据的线程
* 处理 marker 移除的线程
*/
private static void initWorkThreadHandler() {
if ( mWorkThreadHandler != null ) {
return;
}
mWorkThreadHandler = new Handler( WorkThreadHandler.newInstance( "3d-marker-work-thread" ).getLooper() ) {
@Override
public void handleMessage( Message msg ) {
super.handleMessage( msg );
if ( msg.what == MSG_REMOVE_DIRTY_MARKERS ) {
if ( msg.obj instanceof Map ) {
removeDirtyMarkers( ( ( Map ) msg.obj ) );
Set< String > key = ( ( Map ) msg.obj ).keySet();
for ( String id : key ) {
// 清除道路缓存
clearRoadCacheById( id );
if ( mWorkThreadHandler == null ) {
mWorkThreadHandler = new Handler( WorkThreadHandler.newInstance( "3d-marker-work-thread" ).getLooper() ) {
@Override
public void handleMessage( Message msg ) {
super.handleMessage( msg );
if ( msg.what == MSG_REMOVE_DIRTY_MARKERS ) {
if ( msg.obj instanceof Map ) {
removeDirtyMarkers( ( ( Map ) msg.obj ) );
Set< String > key = ( ( Map ) msg.obj ).keySet();
for ( String id : key ) {
// 清除道路缓存
clearRoadCacheById( id );
}
} else if ( msg.obj instanceof String ) {
MogoApisHandler.getInstance().getApis()
.getMapServiceApi()
.getMarkerManager( AbsMogoApplication.getApp() )
.removeMarkers( ( ( String ) msg.obj ) );
}
} else if ( msg.obj instanceof String ) {
MogoApisHandler.getInstance().getApis()
.getMapServiceApi()
.getMarkerManager( AbsMogoApplication.getApp() )
.removeMarkers( ( ( String ) msg.obj ) );
}
}
};
}
if ( mRenderThreadHandler == null ) {
mRenderThreadHandler = new Handler( WorkThreadHandler.newInstance( "render-thread-" + new Random().nextLong() ).getLooper() ) {
@Override
public void handleMessage( Message msg ) {
super.handleMessage( msg );
if ( msg.what == MSG_DISPLAY_SPEED ) {
if ( msg.obj instanceof SpeedData ) {
showSpeed( ( SpeedData ) msg.obj );
}
}
}
};
}
}
/**
* 显示速度
*
* @param data
*/
private static void showSpeed( SpeedData data ) {
if ( data == null ) {
return;
}
data.showSpeed();
}
/**
* 清除无效[为 null 或者 已被销毁]的 marker
*/
protected void removeUselessMarker() {
if ( mMarkersCaches == null || mMarkersCaches.isEmpty() ) {
return;
}
Iterator< IMogoMarker > iterator = mMarkersCaches.values().iterator();
while ( iterator.hasNext() ) {
IMogoMarker marker = iterator.next();
if ( marker == null || marker.isDestroyed() ) {
iterator.remove();
}
};
}
}
/**
@@ -159,9 +182,6 @@ class BaseDrawer {
* @param data
*/
public void sendMessage( int msg, Object data ) {
if ( mWorkThreadHandler == null ) {
initWorkThreadHandler();
}
Message message = Message.obtain();
message.what = msg;
message.obj = data;
@@ -222,37 +242,6 @@ class BaseDrawer {
return R.raw.people;
}
private void init() {
}
/**
* @param fromType {@link com.mogo.realtime.entity.CloudRoadData}
* @return
*/
protected String getModelRenderColor( int fromType, int modelType ) {
AdasRecognizedType recognizedType = AdasRecognizedType.valueFrom( modelType );
if ( recognizedType == AdasRecognizedType.classIdCar
|| recognizedType == AdasRecognizedType.classIdTrafficBus
|| recognizedType == AdasRecognizedType.classIdTrafficTruck ) {
if ( fromType == CloudRoadData.FROM_ADAS ) {
// 灰色
return "#5A8DFFFF";
} else if ( fromType == CloudRoadData.FROM_ROAD_UNIT ) {
// 绿色
return "#3FE792FF";
} else {
// 蓝色
return "#5A8DFFFF";
}
} else if ( recognizedType == AdasRecognizedType.classIdBicycle
|| recognizedType == AdasRecognizedType.classIdMoto ) {
// 灰色
return "#D8D8D8FF";
}
// 灰色
return "#D8D8D8FF";
}
/**
* 根据速度、经纬度计算距离判断车辆颜色
*
@@ -361,6 +350,7 @@ class BaseDrawer {
}
String speedVal = speedIntVal + "";
String infoResName = MogoApisHandler.getInstance().getApis().getMapServiceApi().getMapUIController().getMarkerInfoResName( speedVal );
mogoMarker.setInfoWindowOffset( 0, 20 );
if ( TextUtils.isEmpty( infoResName ) ) {
if ( mSpeedView == null ) {
mSpeedView = new TextView( context );
@@ -369,7 +359,6 @@ class BaseDrawer {
mSpeedView.setLayoutParams( new ViewGroup.LayoutParams( ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT ) );
}
mSpeedView.setText( speedVal );
mogoMarker.setInfoWindowOffset( 0, 20 );
mogoMarker.updateInfoWindowView( mSpeedView );
MogoApisHandler.getInstance().getApis().getMapServiceApi().getMapUIController().setMarkerInfoResName( speedVal, mogoMarker.getMarkerInfoResName() );
} else {
@@ -465,45 +454,6 @@ class BaseDrawer {
return interval;
}
/**
* 在两点之间插值
*
* @param start
* @param end
* @return
*/
public static List< MovingPoint > interpolate( MovingPoint start, MovingPoint end, long duration ) {
if ( start == null || end == null ) {
return null;
}
int interpolateFrame = ( int ) ( duration / MAP_RENDER_FRAME_FREQUENCY );
if ( duration % MAP_RENDER_FRAME_FREQUENCY < MAP_RENDER_FRAME_FREQUENCY / 2 ) {
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 );
}
if ( interpolateFrame > 0 ) {
double lonStep = ( end.point.lon - start.point.lon ) / ( interpolateFrame + 1 );
double latStep = ( end.point.lat - start.point.lat ) / ( interpolateFrame + 1 );
for ( int i = 0; i < interpolateFrame; i++ ) {
double lon = start.point.lon + lonStep * ( i + 1 );
double lat = start.point.lat + latStep * ( i + 1 );
MovingPoint pd = new MovingPoint();
pd.point = new MogoLatLng( lat, lon );
pd.delay = ( i + i ) * MAP_MARKER_MOVE_INTERVAL;
pd.angle = ( float ) _angle;
pd.marker = start.marker;
arrayList.add( pd );
}
}
arrayList.add( end );
return arrayList;
}
/**
* 根据位置信息、车头朝向计算道路吸附
*

View File

@@ -2,6 +2,7 @@ package com.mogo.module.common.drawer;
import android.text.TextUtils;
import com.mogo.cloud.commons.utils.CoordinateUtils;
import com.mogo.commons.AbsMogoApplication;
import com.mogo.map.MogoLatLng;
import com.mogo.map.marker.IMogoMarker;
@@ -239,35 +240,6 @@ class MarkerDrawer {
* @return 两坐标的距离 单位M
*/
public static float calculateLineDistance( double lon1, double lat1, double lon2, double lat2 ) {
try {
double var2 = lon1;
double var4 = lat1;
double var6 = lon2;
double var8 = lat2;
var2 *= 0.01745329251994329D;
var4 *= 0.01745329251994329D;
var6 *= 0.01745329251994329D;
var8 *= 0.01745329251994329D;
double var10 = Math.sin( var2 );
double var12 = Math.sin( var4 );
double var14 = Math.cos( var2 );
double var16 = Math.cos( var4 );
double var18 = Math.sin( var6 );
double var20 = Math.sin( var8 );
double var22 = Math.cos( var6 );
double var24 = Math.cos( var8 );
double[] var28 = new double[3];
double[] var29 = new double[3];
var28[0] = var16 * var14;
var28[1] = var16 * var10;
var28[2] = var12;
var29[0] = var24 * var22;
var29[1] = var24 * var18;
var29[2] = var20;
return ( float ) ( Math.asin( Math.sqrt( ( var28[0] - var29[0] ) * ( var28[0] - var29[0] ) + ( var28[1] - var29[1] ) * ( var28[1] - var29[1] ) + ( var28[2] - var29[2] ) * ( var28[2] - var29[2] ) ) / 2.0D ) * 1.27420015798544E7D );
} catch ( Throwable var26 ) {
var26.printStackTrace();
return 0.0F;
}
return CoordinateUtils.calculateLineDistance( lon1, lat1, lon2, lat2 );
}
}

View File

@@ -1,8 +1,7 @@
package com.mogo.module.common.drawer;
import android.content.Context;
import android.os.Message;
import android.text.TextUtils;
import android.util.ArrayMap;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
@@ -28,6 +27,7 @@ import com.zhidao.carchattingprovider.MogoDriverInfo;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@@ -44,12 +44,10 @@ public class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClic
private static volatile SnapshotSetDataDrawer sInstance;
private Context mContext;
private boolean mChangeCarModeStatus;
private SnapshotSetDataDrawer() {
super();
mContext = AbsMogoApplication.getApp();
MogoApisHandler.getInstance().getApis()
.getStatusManagerApi()
.registerStatusChangedListener( TAG, StatusDescriptor.VR_MODE, this );
@@ -75,9 +73,6 @@ public class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClic
return sInstance;
}
// 云端 marker 缓存
private Map< String, IMogoMarker > mCloudSnapshotMarkersCaches = new ConcurrentHashMap<>();
private final Map< String, CloudRoadData > mLastPositions = new ConcurrentHashMap<>();
private boolean mIsVrMode = false;
@@ -86,8 +81,8 @@ public class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClic
public void onStatusChanged( StatusDescriptor descriptor, boolean isTrue ) {
Logger.d( TAG, "%s - %s", descriptor, isTrue );
mChangeCarModeStatus = true;
sendMessage( MSG_REMOVE_ADAS_MARKERS, mCloudSnapshotMarkersCaches );
mCloudSnapshotMarkersCaches = new ConcurrentHashMap<>();
sendMessage( MSG_REMOVE_ADAS_MARKERS, mMarkersCaches );
mMarkersCaches = new HashMap<>();
if ( mLastPositions != null ) {
mLastPositions.clear();
}
@@ -114,11 +109,11 @@ public class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClic
*/
private boolean clear( MogoSnapshotSetData data ) {
if ( !MogoApisHandler.getInstance().getApis().getStatusManagerApi().isMainPageLaunched() ) {
if ( mCloudSnapshotMarkersCaches == null ) {
if ( mMarkersCaches == null ) {
return false;
}
if ( mCloudSnapshotMarkersCaches != null ) {
mCloudSnapshotMarkersCaches.clear();
if ( mMarkersCaches != null ) {
mMarkersCaches.clear();
}
if ( mLastPositions != null ) {
mLastPositions.clear();
@@ -129,8 +124,8 @@ public class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClic
if ( data == null || (
( data.getAllList() == null || data.getAllList().isEmpty() ) &&
( data.getNearList() == null || data.getNearList().isEmpty() ) ) ) {
if ( mCloudSnapshotMarkersCaches != null ) {
mCloudSnapshotMarkersCaches.clear();
if ( mMarkersCaches != null ) {
mMarkersCaches.clear();
}
if ( mLastPositions != null ) {
mLastPositions.clear();
@@ -141,8 +136,6 @@ public class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClic
return false;
}
Map<String,String> cloudKeyCache = new ArrayMap<>();
/**
* mogo 他车、mogo 他车识别的社会车辆、路边单元识别的车辆
*
@@ -156,79 +149,158 @@ public class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClic
List< CloudRoadData > allDatumsList = new ArrayList<>();
prepareData( data.getAllList(), allDatumsList );
Map< String, IMogoMarker > newMarkersCaches = new ArrayMap<>( allDatumsList.size() );
Map< String, IMogoMarker > newMarkersCaches = new HashMap<>( allDatumsList.size() );
List< CloudRoadData > newDiffSet = new ArrayList<>();
for ( CloudRoadData cloudRoadData : allDatumsList ) {
renderSnapshotOneFrame(cloudRoadData,newMarkersCaches);
if ( isUselessValue( cloudRoadData ) ) {
continue;
}
String uniqueKey = cloudRoadData.getUniqueKey();
IMogoMarker marker = mMarkersCaches.remove( uniqueKey );
if ( marker != null && !marker.isDestroyed() ) {
renderSnapshotOneFrame( marker, uniqueKey, cloudRoadData, newMarkersCaches );
} else {
newDiffSet.add( cloudRoadData );
}
}
sendMessage(MSG_REMOVE_DIRTY_MARKERS, mMarkersCaches );
removeUselessMarker();
// 能复用的 marker 数量
int cachedMarkerSize = mMarkersCaches.size();
// 需要新增的 marker 数量
int newDiffSetSize = newDiffSet.size();
// 能复用的数量
int size = cachedMarkerSize >= newDiffSetSize ? newDiffSetSize : cachedMarkerSize;
// 复用过期 marker
if ( newDiffSetSize > 0 ) {
Iterator< Map.Entry< String, IMogoMarker > > entryIterator = mMarkersCaches.entrySet().iterator();
for ( int i = 0; i < size; i++ ) {
CloudRoadData cloudRoadData = newDiffSet.get( i );
String uniqueKey = cloudRoadData.getUniqueKey();
Map.Entry< String, IMogoMarker > entry = entryIterator.next();
entryIterator.remove();
CloudRoadData old = mLastPositions.remove( entry.getKey() );
IMogoMarker marker = entry.getValue();
if ( marker == null ) {
continue;
}
// 更新资源内容
if ( old == null || old.getType() != cloudRoadData.getType() ) {
String resIdVal = null;
int resId = getModelRes( cloudRoadData.getType() );
resIdVal = resId + "";
String resName = mMarkerCachesResMd5Values.get( resIdVal );
if ( !TextUtils.isEmpty( resName ) ) {
if ( !TextUtils.equals( resName, marker.getMarkerResName() ) ) {
marker.use3DResource( resName );
}
} else {
resName = marker.use3DResource( resId );
mMarkerCachesResMd5Values.put( resIdVal, resName );
}
}
renderSnapshotOneFrame( marker, uniqueKey, cloudRoadData, newMarkersCaches );
}
// 复用过后还需新增的 marker
for ( int i = size; i < newDiffSetSize; i++ ) {
CloudRoadData cloudRoadData = newDiffSet.get( i );
String uniqueKey = cloudRoadData.getUniqueKey();
IMogoMarker marker = drawSnapshotDataMarker( cloudRoadData );
if ( marker == null ) {
continue;
}
renderSnapshotOneFrame( marker, uniqueKey, cloudRoadData, newMarkersCaches );
}
}
if ( cachedMarkerSize - size > 0 ) {
sendMessage( MSG_REMOVE_DIRTY_MARKERS, mMarkersCaches );
}
sendMessage( MSG_REMOVE_DIRTY_MARKERS, mMarkersCaches );
mMarkersCaches = newMarkersCaches;
}
/**
* 判断类型、uuid 等
*
* @param cloudRoadData
* @return
*/
private boolean isUselessValue( CloudRoadData cloudRoadData ) {
if ( cloudRoadData == null ) {
return true;
}
if ( !isRenderType( cloudRoadData.getType() ) ) {
return true;
}
String uniqueKey = cloudRoadData.getUniqueKey();
if ( TextUtils.isEmpty( uniqueKey ) ) {
return true;
}
return false;
}
/**
* 绘制某个物体的一个数据
*
* @param cloudRoadData
* @param newAdasRecognizedMarkersCaches
* @param newSnapshotCaches
*/
private void renderSnapshotOneFrame(final CloudRoadData cloudRoadData, Map< String, IMogoMarker > newAdasRecognizedMarkersCaches ) {
// 暂时只显示车辆
if ( !isRenderType( cloudRoadData.getType() ) ) {
return;
}
String uniqueKey = cloudRoadData.getUniqueKey();
if ( TextUtils.isEmpty( uniqueKey ) ) {
return;
}
private void renderSnapshotOneFrame( IMogoMarker marker, String uniqueKey, final CloudRoadData cloudRoadData, Map< String, IMogoMarker > newSnapshotCaches ) {
final long start = System.currentTimeMillis();
IMogoMarker marker = mMarkersCaches.remove( uniqueKey );
CloudRoadData lastPosition = mLastPositions.put( uniqueKey, cloudRoadData );
CloudRoadData lastPosition = mLastPositions.remove( uniqueKey );
double lastLon = -1;
double lastLat = -1;
if (lastPosition != null) {
if ( lastPosition != null ) {
lastLon = lastPosition.getWgslon();
lastLat = lastPosition.getWgslat();
}
double[] matchLonLat = getMatchLonLat(cloudRoadData.getUniqueKey(), cloudRoadData.getWgslon(), cloudRoadData.getWgslat(), cloudRoadData.getHeading(), lastLon, lastLat);
cloudRoadData.setWgslon(matchLonLat[0]);
cloudRoadData.setWgslat(matchLonLat[1]);
double[] matchLonLat = getMatchLonLat( cloudRoadData.getUniqueKey(), cloudRoadData.getWgslon(), cloudRoadData.getWgslat(), cloudRoadData.getHeading(), lastLon, lastLat );
cloudRoadData.setWgslon( matchLonLat[0] );
cloudRoadData.setWgslat( matchLonLat[1] );
if ( marker == null || marker.isDestroyed() ) {
marker = drawSnapshotDataMarker( cloudRoadData );
if ( marker == null ) {
return;
}
}
newAdasRecognizedMarkersCaches.put( uniqueKey, marker );
mLastPositions.put( uniqueKey, cloudRoadData );
newSnapshotCaches.put( uniqueKey, marker );
if ( lastPosition != null ) {
long interval = computeAnimDuration( lastPosition.getSystemTime(), cloudRoadData.getSystemTime(), lastPosition.getSatelliteTime(), cloudRoadData.getSatelliteTime() );
// method 1
final IMogoMarker renderRef = marker;
final MogoLatLng point = new MogoLatLng( cloudRoadData.getWgslat(), cloudRoadData.getWgslon() );
final MogoLatLng point = new MogoLatLng( cloudRoadData.getWgslat(), cloudRoadData.getWgslon() );
long cost = System.currentTimeMillis() - start;
final long intervalRef = interval - cost;
SimpleHandlerThreadPool.getInstance().postRender( () -> {
renderRef.addDynamicAnchorPosition( point, (float)cloudRoadData.getHeading(), intervalRef );
marker.addDynamicAnchorPosition( point, ( float ) cloudRoadData.getHeading(), intervalRef );
} );
// marker.setAnchorColor( getModelRenderColor(cloudRoadData.getSpeed(), cloudRoadData.getWgslon(), cloudRoadData.getWgslat(), cloudRoadData.getHeading()) );
} else {
marker.setRotateAngle( ( ( float ) cloudRoadData.getHeading() ) );
marker.setPosition( cloudRoadData.getWgslat(), cloudRoadData.getWgslon() );
}
marker.setAnchorColor( getModelRenderColor( cloudRoadData.getSpeed(), cloudRoadData.getWgslon(), cloudRoadData.getWgslat(), cloudRoadData.getHeading() ) );
if ( shouldShowSpeed( cloudRoadData.getType() ) ) {
Message msg = mRenderThreadHandler.obtainMessage();
SpeedData obj = new SpeedData();
obj.context = mContext;
obj.marker = marker;
obj.speed = cloudRoadData.getSpeed();
SimpleHandlerThreadPool.getInstance().postRender(obj::showSpeed);
msg.obj = obj;
msg.what = MSG_DISPLAY_SPEED;
msg.sendToTarget();
}
}
@@ -298,8 +370,7 @@ public class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClic
String resIdVal = null;
if ( MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode() ) {
options.set3DMode( true );
options.anchorColor( getModelRenderColor( data.getFromType(), data.getType() ) );
// options.anchorColor( getModelRenderColor( data.getSpeed(), data.getWgslon(), data.getWgslat(), data.getHeading() ) );
options.anchorColor( getModelRenderColor( data.getSpeed(), data.getWgslon(), data.getWgslat(), data.getHeading() ) );
int resId = getModelRes( data.getType() );
resIdVal = resId + "";
options.resName( mMarkerCachesResMd5Values.get( resIdVal ) );
@@ -312,6 +383,11 @@ public class SnapshotSetDataDrawer extends BaseDrawer implements IMogoMarkerClic
}
IMogoMarker marker = MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager( mContext ).addMarker( DataTypes.TYPE_MARKER_CLOUD_DATA, options );
cacheMarkerIconResMd5Val( resIdVal, marker );
if ( !TextUtils.isEmpty( data.getSn() ) ) {
bindClickListener( marker );
}
return marker;
}

View File

@@ -2,27 +2,6 @@ package com.mogo.module.common.utils;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Looper;
import android.os.Message;
import android.os.SystemClock;
import android.text.TextUtils;
import android.util.ArrayMap;
import com.mogo.commons.AbsMogoApplication;
import com.mogo.map.MogoLatLng;
import com.mogo.map.marker.IMogoMarker;
import com.mogo.module.common.MogoApisHandler;
import com.mogo.module.common.drawer.AdasRecognizedResultDrawer;
import com.mogo.module.common.drawer.BaseDrawer;
import com.mogo.module.common.drawer.SnapshotSetDataDrawer;
import com.mogo.realtime.entity.CloudRoadData;
import com.mogo.utils.logger.Logger;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import static com.mogo.module.common.drawer.BaseDrawer.MSG_REMOVE_DIRTY_MARKERS;
/**
* 简单HandlerThread线程池实现
@@ -34,70 +13,9 @@ public class SimpleHandlerThreadPool {
private final HandlerThread renderThread = new HandlerThread( "one-frame-render-thread" );
private final Handler renderHandler;
public static final int MSG_POINTS_SETTING = 9;
public static final int MSG_SET_POINT = 10;
private SimpleHandlerThreadPool() {
renderThread.start();
renderHandler = new Handler( renderThread.getLooper() ){
@Override
public void handleMessage( Message msg ) {
super.handleMessage( msg );
if ( msg.what == MSG_POINTS_SETTING ) {
if ( msg.obj instanceof BaseDrawer.MovingPoints ) {
startSettingPointLooper( ( ( BaseDrawer.MovingPoints ) msg.obj ) );
}
} else if ( msg.what == MSG_SET_POINT ) {
if ( msg.obj instanceof BaseDrawer.MovingPoint ) {
moveMarker( ( ( BaseDrawer.MovingPoint ) msg.obj ) );
}
}
}
};
}
/**
* 开启设置位置的循环
*
* @param data
*/
private void startSettingPointLooper( BaseDrawer.MovingPoints data ) {
List< BaseDrawer.MovingPoint > points = data.points;
for ( int i = 0; i < points.size(); i++ ) {
Message msg = Message.obtain();
msg.what = MSG_SET_POINT;
msg.obj = points.get( i );
renderHandler.sendMessageDelayed( msg, points.get(i).delay );
}
}
private long startMove = 0;
private int lastIndex = 0;
private void slowTest(){
if (startMove == 0) {
startMove = SystemClock.uptimeMillis();
} else {
long diff = SystemClock.uptimeMillis() - startMove;
int index = (int) (diff / 30);
if (index - lastIndex > 1) {
Logger.e("MapRenderSlow", "miss " + (index - lastIndex) + " diff: " + diff);
}
lastIndex = index;
}
}
/**
* 设置 marker 的点到新的位置
*
* @param pointData
*/
private void moveMarker(BaseDrawer.MovingPoint pointData) {
if (pointData == null) {
return;
}
// slowTest();
pointData.move();
renderHandler = new Handler( renderThread.getLooper() );
}
private static final SimpleHandlerThreadPool INSTANCE = new SimpleHandlerThreadPool();
@@ -106,213 +24,7 @@ public class SimpleHandlerThreadPool {
return INSTANCE;
}
/**
* 默认线程数量
*/
private static final int DEFAULT_THREAD_COUNT = 3;
private int threadCount = DEFAULT_THREAD_COUNT;
public void setThreadCount( int threadCount ) {
this.threadCount = threadCount;
}
Map< String, WorkHandler > dataHandlerMap = new ArrayMap<>();
Map< Integer, WorkHandler > handlerPool = new ArrayMap<>();
private int lastUseThreadId = -1;
public void post( CloudRoadData cloudRoadData ) {
String uuid = cloudRoadData.getUniqueKey();
Message msg;
if ( dataHandlerMap.containsKey( uuid ) ) {
msg = dataHandlerMap.get( uuid ).obtainMessage();
} else {
if ( handlerPool.size() < threadCount ) {
// 新开线程
lastUseThreadId = handlerPool.size();
HandlerThread thread = new HandlerThread( "one-frame-work-thread-" + handlerPool.size() );
thread.start();
WorkHandler handler = new WorkHandler( thread.getLooper() );
handlerPool.put( handlerPool.size(), handler );
dataHandlerMap.put( uuid, handler );
msg = handler.obtainMessage();
} else {
// 复用线程
if ( lastUseThreadId == threadCount - 1 ) {
lastUseThreadId = 0;
} else {
lastUseThreadId++;
}
WorkHandler handler = handlerPool.get( lastUseThreadId );
dataHandlerMap.put( uuid, handler );
msg = handler.obtainMessage();
}
}
msg.obj = cloudRoadData;
msg.sendToTarget();
}
public void removeDirtyMarker( Collection< String > keys ) {
for ( WorkHandler handler : handlerPool.values() ) {
handler.removeDirtyMarker( keys );
}
}
class WorkHandler extends Handler {
public WorkHandler( Looper looper ) {
super( looper );
}
@Override
public void handleMessage( Message msg ) {
CloudRoadData cloudRoadData = ( CloudRoadData ) msg.obj;
renderCarOneFrame( cloudRoadData );
}
private final Map< String, IMogoMarker > markerCache = new ArrayMap<>();
private final Map< String, CloudRoadData > roadDataCache = new ArrayMap<>();
private final Map< String, Long > lastExecutionTimeCache = new ArrayMap<>();
private final Map< String, Boolean > isMatchStatusCache = new ArrayMap<>();
private void renderCarOneFrame( CloudRoadData cloudRoadData ) {
if ( cloudRoadData == null ) {
return;
}
// 暂时只显示车辆
if ( TextUtils.isEmpty( cloudRoadData.getSn() ) ) {
if ( !SnapshotSetDataDrawer.getInstance().isRenderType( cloudRoadData.getType() ) ) {
return;
}
}
String uniqueKey = cloudRoadData.getUniqueKey();
if ( TextUtils.isEmpty( uniqueKey )
// 本地过滤重复下发的adas识别车辆
|| AdasRecognizedResultDrawer.getInstance().hasCached( uniqueKey ) ) {
return;
}
final long start = System.currentTimeMillis();
IMogoMarker marker = markerCache.get( uniqueKey );
CloudRoadData lastPosition = roadDataCache.put( uniqueKey, cloudRoadData );
if ( marker == null || marker.isDestroyed() ) {
marker = SnapshotSetDataDrawer.getInstance().drawSnapshotDataMarker( cloudRoadData );
if ( marker == null ) {
return;
}
markerCache.put( uniqueKey, marker );
if ( !TextUtils.isEmpty( cloudRoadData.getSn() ) ) {
SnapshotSetDataDrawer.getInstance().bindClickListener( marker );
}
}
double[] matchedPoint = SnapshotSetDataDrawer.getInstance().matchRoad( cloudRoadData.getUniqueKey(),
cloudRoadData.getWgslon(),
cloudRoadData.getWgslat(),
cloudRoadData.getHeading(),
true
);
Boolean isMatch = isMatchStatusCache.get( uniqueKey );
if ( matchedPoint != null ) {
if ( ( isMatch == null || !isMatch ) ) {
if ( matchedPoint[2] < 0.5 ) {
isMatch = true;
}
} else {
if ( matchedPoint[2] > 1 ) {
isMatch = false;
}
}
if ( isMatch == null ) {
isMatch = false;
}
isMatchStatusCache.put( uniqueKey, isMatch );
if ( isMatch ) {
cloudRoadData.setLon( matchedPoint[0] );
cloudRoadData.setLat( matchedPoint[1] );
}
}
SnapshotSetDataDrawer.getInstance().changeIconResourceIfNecessary( cloudRoadData, marker );
final IMogoMarker finalMarker = marker;
Logger.d( TAG, "work in " + Thread.currentThread().getName() );
// if ( lastPosition != null ) {
// MogoLatLng endLatLon = new MogoLatLng( cloudRoadData.getWgslat(),cloudRoadData.getWgslon() );
// long interval = SnapshotSetDataDrawer.getInstance().computeAnimDuration( lastPosition.getSystemTime(), cloudRoadData.getSystemTime(), lastPosition.getSatelliteTime(), cloudRoadData.getSatelliteTime() );
//
// long cost = System.currentTimeMillis() - start;
// interval -= cost;
// MogoLatLng lastPoint = new MogoLatLng( lastPosition.getWgslat(), lastPosition.getWgslon() );
// BaseDrawer.MovingPoint endPoint = new BaseDrawer.MovingPoint();
// endPoint.point = endLatLon;
// endPoint.marker = marker;
// endPoint.delay = interval;
// endPoint.angle = ( float ) cloudRoadData.getHeading();
//
// BaseDrawer.MovingPoint startPoint = new BaseDrawer.MovingPoint();
// startPoint.point = lastPoint;
// startPoint.marker = marker;
// startPoint.delay = 0;
// startPoint.angle = ( float ) lastPosition.getHeading();
// List< BaseDrawer.MovingPoint > points = BaseDrawer.interpolate( startPoint, endPoint, interval );
// Message msg = new Message();
// BaseDrawer.MovingPoints obj = new BaseDrawer.MovingPoints();
// obj.points = points;
// startSettingPointLooper(obj);
//// msg.obj = obj;
//// msg.what = MSG_POINTS_SETTING;
//// renderHandler.sendMessage( msg );
//// marker.startSmoothInMs( points, interval );
//// marker.addDynamicAnchorPosition( endLatLon, interval );
// Logger.d( TAG, "anim duration: %s, points size = %s", interval, points.size() );
// } else {
// marker.setRotateAngle( ( ( float ) cloudRoadData.getHeading() ) );
// marker.setPosition(cloudRoadData.getWgslat(), cloudRoadData.getWgslon());
// }
// SnapshotSetDataDrawer.getInstance().showSelfSpeed( AbsMogoApplication.getApp(),
// marker,
// cloudRoadData.getSpeed(),
// MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode()
// );
long interval = 0;
if(lastPosition!=null&& !lastPosition.equals( cloudRoadData )) {
long cost = System.currentTimeMillis() - start;
interval = cloudRoadData.getSystemTime() - lastPosition.getSystemTime() - cost;
}
final long finalInterval =interval;
renderHandler.post( () -> {
// 由于地图现在不支持addDynamicAnchorPosition并发所以工作线程仅做相关计算真正绘制发送到另外一条绘制线程中做
if ( lastPosition != null && !lastPosition.equals( cloudRoadData ) ) {
finalMarker.addDynamicAnchorPosition( new MogoLatLng( cloudRoadData.getWgslat(), cloudRoadData.getWgslon() ),(float)cloudRoadData.getHeading(), finalInterval );
Logger.d( TAG, "anim duration: %s in thread: %s", finalInterval, Thread.currentThread().getName() );
} else {
finalMarker.setRotateAngle( ( float ) cloudRoadData.getHeading() );
finalMarker.setPosition( cloudRoadData.getWgslat(), cloudRoadData.getWgslon() );
Logger.d( TAG, "设置点位置 in thread: %s", Thread.currentThread().getName() );
}
lastExecutionTimeCache.put( uniqueKey, SystemClock.uptimeMillis() );
SnapshotSetDataDrawer.getInstance().showSelfSpeed( AbsMogoApplication.getApp(), finalMarker, cloudRoadData.getSpeed(), MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode() );
} );
}
public void removeDirtyMarker( Collection< String > keys ) {
Map< String, IMogoMarker > result = new ArrayMap<>( keys.size() );
for ( String key : keys ) {
if ( markerCache.containsKey( key ) ) {
result.put( key, markerCache.remove( key ) );
}
}
SnapshotSetDataDrawer.getInstance().sendMessage( MSG_REMOVE_DIRTY_MARKERS, result );
}
}
public void postRender(Runnable runnable) {
renderHandler.post(runnable);
public void postRender( Runnable runnable ) {
renderHandler.post( runnable );
}
}

View File

@@ -19,76 +19,76 @@
[{"uuid":"786","carId":"0","type":"3","color":"0","inOutFlag":8,"heading":0.0,"speed":3.744978,"lat":40.1992779107,"lon":116.7359401583,"alt":0.0,"systemTime":"1615802116917","satelliteTime":"0","distance":"52.60175","driveIn":false,"driveOut":true},{"uuid":"949","carId":"0","type":"3","color":"0","inOutFlag":7,"heading":0.0,"speed":4.862971,"lat":40.1992408312,"lon":116.7356762034,"alt":0.0,"systemTime":"1615802257765","satelliteTime":"0","distance":"30.16320","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.307328,"lat":40.1991591331,"lon":116.7355600508,"alt":0.0,"systemTime":"1615802050972","satelliteTime":"0","distance":"22.98941","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":5,"heading":0.0,"speed":3.260365,"lat":40.1991953973,"lon":116.7355359587,"alt":0.0,"systemTime":"1615802181398","satelliteTime":"0","distance":"19.44161","driveIn":true,"driveOut":false}]
[{"uuid":"786","carId":"0","type":"3","color":"0","inOutFlag":8,"heading":0.0,"speed":4.676548,"lat":40.1992778641,"lon":116.7359322582,"alt":0.0,"systemTime":"1615802116996","satelliteTime":"0","distance":"51.93047","driveIn":false,"driveOut":true},{"uuid":"949","carId":"0","type":"3","color":"0","inOutFlag":7,"heading":0.0,"speed":5.009202,"lat":40.199240604,"lon":116.7356674716,"alt":0.0,"systemTime":"1615802257843","satelliteTime":"0","distance":"29.42373","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.113706,"lat":40.1991592334,"lon":116.7355666946,"alt":0.0,"systemTime":"1615802051054","satelliteTime":"0","distance":"23.48290","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":5,"heading":0.0,"speed":3.110471,"lat":40.1991953826,"lon":116.7355397422,"alt":0.0,"systemTime":"1615802181558","satelliteTime":"0","distance":"19.74339","driveIn":true,"driveOut":false}]
[{"uuid":"786","carId":"0","type":"3","color":"0","inOutFlag":8,"heading":0.0,"speed":5.317314,"lat":40.1992775717,"lon":116.7359225584,"alt":0.0,"systemTime":"1615802117077","satelliteTime":"0","distance":"51.10509","driveIn":false,"driveOut":true},{"uuid":"949","carId":"0","type":"3","color":"0","inOutFlag":7,"heading":0.0,"speed":4.636511,"lat":40.1992400082,"lon":116.7356622282,"alt":0.0,"systemTime":"1615802257916","satelliteTime":"0","distance":"28.98310","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.096209,"lat":40.1991589394,"lon":116.7355720516,"alt":0.0,"systemTime":"1615802051174","satelliteTime":"0","distance":"23.90218","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":5,"heading":0.0,"speed":3.012356,"lat":40.1991954061,"lon":116.735546403,"alt":0.0,"systemTime":"1615802181639","satelliteTime":"0","distance":"20.27430","driveIn":true,"driveOut":false}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":8,"heading":0.0,"speed":0.0,"lat":40.1992791521,"lon":116.7359085211,"alt":0.0,"systemTime":"1615802117480","satelliteTime":"0","distance":"-1.00000","driveIn":false,"driveOut":true},{"uuid":"949","carId":"0","type":"3","color":"0","inOutFlag":7,"heading":0.0,"speed":3.983068,"lat":40.199239568,"lon":116.7356565408,"alt":0.0,"systemTime":"1615802257992","satelliteTime":"0","distance":"28.50393","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.360256,"lat":40.1991585392,"lon":116.735579628,"alt":0.0,"systemTime":"1615802051252","satelliteTime":"0","distance":"24.49668","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":3.063223,"lat":40.1991953165,"lon":116.7355517732,"alt":0.0,"systemTime":"1615802181714","satelliteTime":"0","distance":"20.70771","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":8,"heading":0.0,"speed":2.271649,"lat":40.199278852,"lon":116.7358995485,"alt":0.0,"systemTime":"1615802117555","satelliteTime":"0","distance":"49.15743","driveIn":false,"driveOut":true},{"uuid":"949","carId":"0","type":"3","color":"0","inOutFlag":7,"heading":0.0,"speed":3.311933,"lat":40.199239281,"lon":116.7356522482,"alt":0.0,"systemTime":"1615802258063","satelliteTime":"0","distance":"28.14207","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.666871,"lat":40.1991583736,"lon":116.7355858766,"alt":0.0,"systemTime":"1615802051374","satelliteTime":"0","distance":"24.98084","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":3.158866,"lat":40.199195218,"lon":116.735557361,"alt":0.0,"systemTime":"1615802181796","satelliteTime":"0","distance":"21.15993","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":8,"heading":0.0,"speed":2.86804,"lat":40.1992784959,"lon":116.735894219,"alt":0.0,"systemTime":"1615802117737","satelliteTime":"0","distance":"48.70289","driveIn":false,"driveOut":true},{"uuid":"949","carId":"0","type":"3","color":"0","inOutFlag":7,"heading":0.0,"speed":3.481111,"lat":40.1992398335,"lon":116.7356407372,"alt":0.0,"systemTime":"1615802258241","satelliteTime":"0","distance":"27.16143","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.654301,"lat":40.1991582732,"lon":116.7355914933,"alt":0.0,"systemTime":"1615802051494","satelliteTime":"0","distance":"25.41531","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":3.05733,"lat":40.199195603,"lon":116.7355611353,"alt":0.0,"systemTime":"1615802181878","satelliteTime":"0","distance":"21.44982","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":8,"heading":0.0,"speed":4.810977,"lat":40.1992779922,"lon":116.7358790134,"alt":0.0,"systemTime":"1615802117819","satelliteTime":"0","distance":"47.40882","driveIn":false,"driveOut":true},{"uuid":"949","carId":"0","type":"3","color":"0","inOutFlag":7,"heading":0.0,"speed":4.047473,"lat":40.1992402445,"lon":116.7356352855,"alt":0.0,"systemTime":"1615802258316","satelliteTime":"0","distance":"26.69582","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.558737,"lat":40.1991574452,"lon":116.7355977684,"alt":0.0,"systemTime":"1615802051656","satelliteTime":"0","distance":"25.93654","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":2.874259,"lat":40.1991952388,"lon":116.7355674545,"alt":0.0,"systemTime":"1615802181954","satelliteTime":"0","distance":"21.97229","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":8,"heading":0.0,"speed":5.524149,"lat":40.199277205,"lon":116.7358707005,"alt":0.0,"systemTime":"1615802117900","satelliteTime":"0","distance":"46.69860","driveIn":false,"driveOut":true},{"uuid":"949","carId":"0","type":"3","color":"0","inOutFlag":7,"heading":0.0,"speed":4.319131,"lat":40.1992400809,"lon":116.7356278404,"alt":0.0,"systemTime":"1615802258390","satelliteTime":"0","distance":"26.06574","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.373051,"lat":40.1991575783,"lon":116.7356033378,"alt":0.0,"systemTime":"1615802051737","satelliteTime":"0","distance":"26.35902","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":2.887222,"lat":40.1991949277,"lon":116.735572198,"alt":0.0,"systemTime":"1615802182162","satelliteTime":"0","distance":"22.36629","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":8,"heading":0.0,"speed":5.967031,"lat":40.1992775306,"lon":116.7358600072,"alt":0.0,"systemTime":"1615802117981","satelliteTime":"0","distance":"45.79222","driveIn":false,"driveOut":true},{"uuid":"949","carId":"0","type":"3","color":"0","inOutFlag":7,"heading":0.0,"speed":4.293089,"lat":40.1992400772,"lon":116.7356197552,"alt":0.0,"systemTime":"1615802258461","satelliteTime":"0","distance":"25.38020","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.323301,"lat":40.1991571316,"lon":116.7356091048,"alt":0.0,"systemTime":"1615802051816","satelliteTime":"0","distance":"26.82527","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":3.06316,"lat":40.1991950654,"lon":116.7355786841,"alt":0.0,"systemTime":"1615802182241","satelliteTime":"0","distance":"22.88663","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":8,"heading":0.0,"speed":5.494833,"lat":40.199277818,"lon":116.7358586075,"alt":0.0,"systemTime":"1615802118073","satelliteTime":"0","distance":"45.67495","driveIn":false,"driveOut":true},{"uuid":"949","carId":"0","type":"3","color":"0","inOutFlag":7,"heading":0.0,"speed":4.218418,"lat":40.1992402857,"lon":116.7356116235,"alt":0.0,"systemTime":"1615802258668","satelliteTime":"0","distance":"24.68902","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.300756,"lat":40.1991577086,"lon":116.7356150517,"alt":0.0,"systemTime":"1615802051904","satelliteTime":"0","distance":"27.25990","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":3.171351,"lat":40.1991950974,"lon":116.7355834345,"alt":0.0,"systemTime":"1615802182317","satelliteTime":"0","distance":"23.27091","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":8,"heading":0.0,"speed":4.162639,"lat":40.199278146,"lon":116.7358632981,"alt":0.0,"systemTime":"1615802118155","satelliteTime":"0","distance":"46.07511","driveIn":false,"driveOut":true},{"uuid":"949","carId":"0","type":"3","color":"0","inOutFlag":7,"heading":0.0,"speed":4.421367,"lat":40.1992398879,"lon":116.7356047083,"alt":0.0,"systemTime":"1615802258750","satelliteTime":"0","distance":"24.10630","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.226784,"lat":40.1991576846,"lon":116.7356201776,"alt":0.0,"systemTime":"1615802051981","satelliteTime":"0","distance":"27.65978","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":3.153336,"lat":40.1991951342,"lon":116.735589591,"alt":0.0,"systemTime":"1615802182394","satelliteTime":"0","distance":"23.77006","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":8,"heading":0.0,"speed":2.840005,"lat":40.1992786586,"lon":116.735863501,"alt":0.0,"systemTime":"1615802118342","satelliteTime":"0","distance":"46.09526","driveIn":false,"driveOut":true},{"uuid":"949","carId":"0","type":"3","color":"0","inOutFlag":7,"heading":0.0,"speed":4.69259,"lat":40.1992402221,"lon":116.7355898673,"alt":0.0,"systemTime":"1615802258823","satelliteTime":"0","distance":"22.84557","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.037928,"lat":40.1991582271,"lon":116.7356243718,"alt":0.0,"systemTime":"1615802052056","satelliteTime":"0","distance":"27.96306","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":3.237472,"lat":40.1991948799,"lon":116.7355955536,"alt":0.0,"systemTime":"1615802182467","satelliteTime":"0","distance":"24.26368","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":8,"heading":0.0,"speed":1.647377,"lat":40.1992790599,"lon":116.7358606085,"alt":0.0,"systemTime":"1615802118416","satelliteTime":"0","distance":"45.85200","driveIn":false,"driveOut":true},{"uuid":"949","carId":"0","type":"3","color":"0","inOutFlag":7,"heading":0.0,"speed":4.941518,"lat":40.1992400572,"lon":116.7355858555,"alt":0.0,"systemTime":"1615802258896","satelliteTime":"0","distance":"22.50721","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":2.792672,"lat":40.1991586043,"lon":116.7356292168,"alt":0.0,"systemTime":"1615802052161","satelliteTime":"0","distance":"28.32586","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":3.241449,"lat":40.1991948029,"lon":116.7356008635,"alt":0.0,"systemTime":"1615802182542","satelliteTime":"0","distance":"24.69905","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":5,"heading":0.0,"speed":0.999643,"lat":40.1992799151,"lon":116.7358655423,"alt":0.0,"systemTime":"1615802118492","satelliteTime":"0","distance":"46.27602","driveIn":true,"driveOut":false},{"uuid":"949","carId":"0","type":"3","color":"0","inOutFlag":7,"heading":0.0,"speed":4.793724,"lat":40.1992403587,"lon":116.7355763838,"alt":0.0,"systemTime":"1615802258970","satelliteTime":"0","distance":"21.70195","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":2.998442,"lat":40.1991579436,"lon":116.735637641,"alt":0.0,"systemTime":"1615802052244","satelliteTime":"0","distance":"29.01544","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":3.276191,"lat":40.1991947212,"lon":116.7356068267,"alt":0.0,"systemTime":"1615802182747","satelliteTime":"0","distance":"25.18854","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":5,"heading":0.0,"speed":0.663719,"lat":40.1992795137,"lon":116.7358592749,"alt":0.0,"systemTime":"1615802118569","satelliteTime":"0","distance":"45.74148","driveIn":true,"driveOut":false},{"uuid":"949","carId":"0","type":"3","color":"0","inOutFlag":7,"heading":0.0,"speed":4.628361,"lat":40.1992402818,"lon":116.7355692058,"alt":0.0,"systemTime":"1615802259046","satelliteTime":"0","distance":"21.09473","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.477113,"lat":40.1991571504,"lon":116.735643502,"alt":0.0,"systemTime":"1615802052365","satelliteTime":"0","distance":"29.51006","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":3.325596,"lat":40.1991945331,"lon":116.735613504,"alt":0.0,"systemTime":"1615802182830","satelliteTime":"0","distance":"25.74035","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":5,"heading":0.0,"speed":1.245314,"lat":40.1992792911,"lon":116.7358488223,"alt":0.0,"systemTime":"1615802118662","satelliteTime":"0","distance":"44.85271","driveIn":true,"driveOut":false},{"uuid":"949","carId":"0","type":"3","color":"0","inOutFlag":7,"heading":0.0,"speed":4.386057,"lat":40.1992402943,"lon":116.7355600948,"alt":0.0,"systemTime":"1615802259230","satelliteTime":"0","distance":"20.32314","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.694839,"lat":40.199156636,"lon":116.7356489357,"alt":0.0,"systemTime":"1615802052441","satelliteTime":"0","distance":"29.95976","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":3.31123,"lat":40.1991943333,"lon":116.7356179439,"alt":0.0,"systemTime":"1615802182905","satelliteTime":"0","distance":"26.10988","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":5,"heading":0.0,"speed":2.262741,"lat":40.1992791818,"lon":116.7358458909,"alt":0.0,"systemTime":"1615802118860","satelliteTime":"0","distance":"44.60317","driveIn":true,"driveOut":false},{"uuid":"949","carId":"0","type":"3","color":"0","inOutFlag":7,"heading":0.0,"speed":4.633321,"lat":40.1992402664,"lon":116.7355531039,"alt":0.0,"systemTime":"1615802259303","satelliteTime":"0","distance":"19.73166","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.611957,"lat":40.1991559809,"lon":116.7356558043,"alt":0.0,"systemTime":"1615802052575","satelliteTime":"0","distance":"30.52908","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":3.24476,"lat":40.1991944342,"lon":116.7356240746,"alt":0.0,"systemTime":"1615802182982","satelliteTime":"0","distance":"26.60950","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":5,"heading":0.0,"speed":2.953721,"lat":40.1992799544,"lon":116.7358447571,"alt":0.0,"systemTime":"1615802118934","satelliteTime":"0","distance":"44.51173","driveIn":true,"driveOut":false},{"uuid":"949","carId":"0","type":"3","color":"0","inOutFlag":7,"heading":0.0,"speed":4.622197,"lat":40.1992401671,"lon":116.7355435611,"alt":0.0,"systemTime":"1615802259372","satelliteTime":"0","distance":"18.92524","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.511434,"lat":40.1991558754,"lon":116.735662246,"alt":0.0,"systemTime":"1615802052654","satelliteTime":"0","distance":"31.04305","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":3.129088,"lat":40.1991945356,"lon":116.7356293619,"alt":0.0,"systemTime":"1615802183065","satelliteTime":"0","distance":"27.04063","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":5,"heading":0.0,"speed":3.127559,"lat":40.1992802176,"lon":116.7358350352,"alt":0.0,"systemTime":"1615802119012","satelliteTime":"0","distance":"43.68819","driveIn":true,"driveOut":false},{"uuid":"949","carId":"0","type":"3","color":"0","inOutFlag":7,"heading":0.0,"speed":4.643083,"lat":40.1992402051,"lon":116.7355365938,"alt":0.0,"systemTime":"1615802259444","satelliteTime":"0","distance":"18.33548","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.805402,"lat":40.1991552353,"lon":116.7356703068,"alt":0.0,"systemTime":"1615802052772","satelliteTime":"0","distance":"31.70801","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":3.30228,"lat":40.1991942085,"lon":116.7356370333,"alt":0.0,"systemTime":"1615802183140","satelliteTime":"0","distance":"27.68053","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":5,"heading":0.0,"speed":3.286891,"lat":40.1992801525,"lon":116.7358255437,"alt":0.0,"systemTime":"1615802119089","satelliteTime":"0","distance":"42.88214","driveIn":true,"driveOut":false},{"uuid":"949","carId":"0","type":"3","color":"0","inOutFlag":7,"heading":0.0,"speed":4.40361,"lat":40.1992401712,"lon":116.735529994,"alt":0.0,"systemTime":"1615802259649","satelliteTime":"0","distance":"17.77781","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.915542,"lat":40.1991557627,"lon":116.7356758082,"alt":0.0,"systemTime":"1615802052854","satelliteTime":"0","distance":"32.12452","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":3.513479,"lat":40.1991943051,"lon":116.7356421653,"alt":0.0,"systemTime":"1615802183327","satelliteTime":"0","distance":"28.10019","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":5,"heading":0.0,"speed":4.120306,"lat":40.199279515,"lon":116.7358174636,"alt":0.0,"systemTime":"1615802119167","satelliteTime":"0","distance":"42.19212","driveIn":true,"driveOut":false},{"uuid":"949","carId":"0","type":"3","color":"0","inOutFlag":7,"heading":0.0,"speed":4.077891,"lat":40.1992402244,"lon":116.7355235069,"alt":0.0,"systemTime":"1615802259720","satelliteTime":"0","distance":"17.22884","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.399828,"lat":40.1991570232,"lon":116.7356778401,"alt":0.0,"systemTime":"1615802052975","satelliteTime":"0","distance":"32.23751","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":3.644802,"lat":40.1991941758,"lon":116.7356498443,"alt":0.0,"systemTime":"1615802183405","satelliteTime":"0","distance":"28.73649","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":5,"heading":0.0,"speed":4.357308,"lat":40.1992789976,"lon":116.7358121803,"alt":0.0,"systemTime":"1615802119365","satelliteTime":"0","distance":"41.74030","driveIn":true,"driveOut":false},{"uuid":"949","carId":"0","type":"3","color":"0","inOutFlag":7,"heading":0.0,"speed":4.011987,"lat":40.1992402835,"lon":116.7355141819,"alt":0.0,"systemTime":"1615802259796","satelliteTime":"0","distance":"16.44022","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":2.72872,"lat":40.1991576327,"lon":116.735682825,"alt":0.0,"systemTime":"1615802053049","satelliteTime":"0","distance":"32.61240","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":3.493815,"lat":40.1991946095,"lon":116.7356535221,"alt":0.0,"systemTime":"1615802183482","satelliteTime":"0","distance":"29.02821","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":5,"heading":0.0,"speed":3.669352,"lat":40.1992790521,"lon":116.7358096916,"alt":0.0,"systemTime":"1615802119439","satelliteTime":"0","distance":"41.52941","driveIn":true,"driveOut":false},{"uuid":"949","carId":"0","type":"3","color":"0","inOutFlag":7,"heading":0.0,"speed":4.32773,"lat":40.1992402438,"lon":116.7355065977,"alt":0.0,"systemTime":"1615802259878","satelliteTime":"0","distance":"15.80031","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":2.274866,"lat":40.1991582446,"lon":116.7356864519,"alt":0.0,"systemTime":"1615802053177","satelliteTime":"0","distance":"32.87971","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":3.169951,"lat":40.1991949346,"lon":116.7356591704,"alt":0.0,"systemTime":"1615802183558","satelliteTime":"0","distance":"29.48612","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":5,"heading":0.0,"speed":2.584403,"lat":40.1992793633,"lon":116.7358060875,"alt":0.0,"systemTime":"1615802119520","satelliteTime":"0","distance":"41.22556","driveIn":true,"driveOut":false},{"uuid":"949","carId":"0","type":"3","color":"0","inOutFlag":7,"heading":0.0,"speed":4.698614,"lat":40.1992401773,"lon":116.7354971698,"alt":0.0,"systemTime":"1615802259952","satelliteTime":"0","distance":"15.00567","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":2.703485,"lat":40.1991562036,"lon":116.735698808,"alt":0.0,"systemTime":"1615802053258","satelliteTime":"0","distance":"33.94599","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":2.918437,"lat":40.1991946981,"lon":116.7356636703,"alt":0.0,"systemTime":"1615802183737","satelliteTime":"0","distance":"29.86426","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":5,"heading":0.0,"speed":2.225735,"lat":40.1992795693,"lon":116.7357965161,"alt":0.0,"systemTime":"1615802119598","satelliteTime":"0","distance":"40.41463","driveIn":true,"driveOut":false},{"uuid":"949","carId":"0","type":"3","color":"0","inOutFlag":7,"heading":0.0,"speed":4.810998,"lat":40.199240297,"lon":116.7354895955,"alt":0.0,"systemTime":"1615802260160","satelliteTime":"0","distance":"14.36529","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.643549,"lat":40.1991560494,"lon":116.7357035949,"alt":0.0,"systemTime":"1615802053382","satelliteTime":"0","distance":"34.33592","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":2.962875,"lat":40.199195142,"lon":116.7356710014,"alt":0.0,"systemTime":"1615802183807","satelliteTime":"0","distance":"30.45956","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":5,"heading":0.0,"speed":2.832566,"lat":40.1992797683,"lon":116.7357873094,"alt":0.0,"systemTime":"1615802119675","satelliteTime":"0","distance":"39.63474","driveIn":true,"driveOut":false},{"uuid":"949","carId":"0","type":"3","color":"0","inOutFlag":7,"heading":0.0,"speed":4.787498,"lat":40.1992400482,"lon":116.7354805102,"alt":0.0,"systemTime":"1615802260242","satelliteTime":"0","distance":"13.60369","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":4.016298,"lat":40.1991570187,"lon":116.7357067635,"alt":0.0,"systemTime":"1615802053461","satelliteTime":"0","distance":"34.55558","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":3.224998,"lat":40.1991951322,"lon":116.7356758104,"alt":0.0,"systemTime":"1615802183882","satelliteTime":"0","distance":"30.85817","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":5,"heading":0.0,"speed":3.659139,"lat":40.1992796698,"lon":116.7357816559,"alt":0.0,"systemTime":"1615802119755","satelliteTime":"0","distance":"39.15432","driveIn":true,"driveOut":false},{"uuid":"949","carId":"0","type":"3","color":"0","inOutFlag":7,"heading":0.0,"speed":4.710055,"lat":40.199240007,"lon":116.7354734071,"alt":0.0,"systemTime":"1615802260322","satelliteTime":"0","distance":"13.00667","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.775972,"lat":40.1991568593,"lon":116.7357134195,"alt":0.0,"systemTime":"1615802053574","satelliteTime":"0","distance":"35.09735","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":3.459951,"lat":40.1991943953,"lon":116.7356835994,"alt":0.0,"systemTime":"1615802183958","satelliteTime":"0","distance":"31.52207","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":5,"heading":0.0,"speed":3.599107,"lat":40.1992795248,"lon":116.7357782983,"alt":0.0,"systemTime":"1615802119917","satelliteTime":"0","distance":"38.86838","driveIn":true,"driveOut":false},{"uuid":"949","carId":"0","type":"3","color":"0","inOutFlag":7,"heading":0.0,"speed":4.700326,"lat":40.1992403527,"lon":116.7354636156,"alt":0.0,"systemTime":"1615802260401","satelliteTime":"0","distance":"12.17782","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.16311,"lat":40.1991579146,"lon":116.7357175953,"alt":0.0,"systemTime":"1615802053648","satelliteTime":"0","distance":"35.39727","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":3.427513,"lat":40.1991943792,"lon":116.7356872588,"alt":0.0,"systemTime":"1615802184131","satelliteTime":"0","distance":"31.82594","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":5,"heading":0.0,"speed":3.590058,"lat":40.1992793401,"lon":116.7357675394,"alt":0.0,"systemTime":"1615802119997","satelliteTime":"0","distance":"37.95417","driveIn":true,"driveOut":false},{"uuid":"949","carId":"0","type":"3","color":"0","inOutFlag":7,"heading":0.0,"speed":4.784769,"lat":40.1992406815,"lon":116.735455875,"alt":0.0,"systemTime":"1615802260475","satelliteTime":"0","distance":"11.52207","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":2.556938,"lat":40.199158625,"lon":116.7357192674,"alt":0.0,"systemTime":"1615802053764","satelliteTime":"0","distance":"35.50783","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":2.979728,"lat":40.1991947275,"lon":116.7356910003,"alt":0.0,"systemTime":"1615802184203","satelliteTime":"0","distance":"32.12794","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":5,"heading":0.0,"speed":4.087134,"lat":40.1992789313,"lon":116.735758191,"alt":0.0,"systemTime":"1615802120076","satelliteTime":"0","distance":"37.15803","driveIn":true,"driveOut":false},{"uuid":"949","carId":"0","type":"3","color":"0","inOutFlag":7,"heading":0.0,"speed":4.773538,"lat":40.1992409209,"lon":116.7354475587,"alt":0.0,"systemTime":"1615802260551","satelliteTime":"0","distance":"10.82012","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":2.537513,"lat":40.1991579636,"lon":116.7357272712,"alt":0.0,"systemTime":"1615802053844","satelliteTime":"0","distance":"36.17808","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":2.357381,"lat":40.199194841,"lon":116.7356932768,"alt":0.0,"systemTime":"1615802184284","satelliteTime":"0","distance":"32.31424","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":5,"heading":0.0,"speed":4.811716,"lat":40.1992791683,"lon":116.7357542908,"alt":0.0,"systemTime":"1615802120154","satelliteTime":"0","distance":"36.82886","driveIn":true,"driveOut":false},{"uuid":"949","carId":"0","type":"3","color":"0","inOutFlag":4,"heading":0.0,"speed":4.615699,"lat":40.1992408736,"lon":116.7354406484,"alt":0.0,"systemTime":"1615802260740","satelliteTime":"0","distance":"10.24227","driveIn":false,"driveOut":true},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":2.517359,"lat":40.1991584653,"lon":116.7357299471,"alt":0.0,"systemTime":"1615802053975","satelliteTime":"0","distance":"36.37789","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":2.182996,"lat":40.1991941699,"lon":116.7357042218,"alt":0.0,"systemTime":"1615802184363","satelliteTime":"0","distance":"33.23941","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":5,"heading":0.0,"speed":4.58601,"lat":40.1992794462,"lon":116.735751443,"alt":0.0,"systemTime":"1615802120358","satelliteTime":"0","distance":"36.58935","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.06026,"lat":40.1991578475,"lon":116.735739305,"alt":0.0,"systemTime":"1615802054056","satelliteTime":"0","distance":"37.15757","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":2.902358,"lat":40.1991945269,"lon":116.7357082993,"alt":0.0,"systemTime":"1615802184563","satelliteTime":"0","distance":"33.57009","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":5,"heading":0.0,"speed":3.672491,"lat":40.199279632,"lon":116.7357438557,"alt":0.0,"systemTime":"1615802120431","satelliteTime":"0","distance":"35.94716","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.626374,"lat":40.1991567429,"lon":116.7357491169,"alt":0.0,"systemTime":"1615802054165","satelliteTime":"0","distance":"37.99085","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":3.200551,"lat":40.1991952698,"lon":116.735713313,"alt":0.0,"systemTime":"1615802184638","satelliteTime":"0","distance":"33.97032","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":5,"heading":0.0,"speed":3.442311,"lat":40.1992790602,"lon":116.735737202,"alt":0.0,"systemTime":"1615802120504","satelliteTime":"0","distance":"35.37838","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":4.317677,"lat":40.1991565286,"lon":116.7357572212,"alt":0.0,"systemTime":"1615802054242","satelliteTime":"0","distance":"38.65684","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":3.179831,"lat":40.1991957711,"lon":116.7357175831,"alt":0.0,"systemTime":"1615802184714","satelliteTime":"0","distance":"34.31474","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":5,"heading":0.0,"speed":4.123498,"lat":40.199279384,"lon":116.7357249141,"alt":0.0,"systemTime":"1615802120590","satelliteTime":"0","distance":"34.33871","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":4.437632,"lat":40.1991565626,"lon":116.7357624193,"alt":0.0,"systemTime":"1615802054377","satelliteTime":"0","distance":"39.07896","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":2.656279,"lat":40.1991954964,"lon":116.7357227947,"alt":0.0,"systemTime":"1615802184796","satelliteTime":"0","distance":"34.75512","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":5,"heading":0.0,"speed":4.944893,"lat":40.1992790543,"lon":116.7357180548,"alt":0.0,"systemTime":"1615802120681","satelliteTime":"0","distance":"33.75436","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":4.152788,"lat":40.1991573606,"lon":116.7357698276,"alt":0.0,"systemTime":"1615802054455","satelliteTime":"0","distance":"39.65784","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":3.23597,"lat":40.1991935909,"lon":116.7357326558,"alt":0.0,"systemTime":"1615802184877","satelliteTime":"0","distance":"35.61899","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":5,"heading":0.0,"speed":5.0563,"lat":40.1992793154,"lon":116.7357132032,"alt":0.0,"systemTime":"1615802120764","satelliteTime":"0","distance":"33.34506","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.573127,"lat":40.1991578003,"lon":116.7357741717,"alt":0.0,"systemTime":"1615802054562","satelliteTime":"0","distance":"39.99897","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":3.640305,"lat":40.1991942363,"lon":116.7357364005,"alt":0.0,"systemTime":"1615802184959","satelliteTime":"0","distance":"35.91700","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":5,"heading":0.0,"speed":4.330799,"lat":40.1992792432,"lon":116.7357067926,"alt":0.0,"systemTime":"1615802120945","satelliteTime":"0","distance":"32.80090","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.587479,"lat":40.1991569306,"lon":116.7357832722,"alt":0.0,"systemTime":"1615802054644","satelliteTime":"0","distance":"40.76952","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":3.557845,"lat":40.199195183,"lon":116.735735494,"alt":0.0,"systemTime":"1615802185163","satelliteTime":"0","distance":"35.82095","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":5,"heading":0.0,"speed":3.994465,"lat":40.199279381,"lon":116.7356976163,"alt":0.0,"systemTime":"1615802121022","satelliteTime":"0","distance":"32.02410","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":4.142085,"lat":40.1991556391,"lon":116.7357975925,"alt":0.0,"systemTime":"1615802054764","satelliteTime":"0","distance":"41.98042","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":2.590332,"lat":40.1991955653,"lon":116.7357411941,"alt":0.0,"systemTime":"1615802185239","satelliteTime":"0","distance":"36.28857","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":5,"heading":0.0,"speed":3.81858,"lat":40.199279627,"lon":116.7356932344,"alt":0.0,"systemTime":"1615802121099","satelliteTime":"0","distance":"31.65479","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":5.118244,"lat":40.1991544035,"lon":116.7358089282,"alt":0.0,"systemTime":"1615802054846","satelliteTime":"0","distance":"42.94587","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":2.199256,"lat":40.1991952769,"lon":116.7357450592,"alt":0.0,"systemTime":"1615802185320","satelliteTime":"0","distance":"36.61736","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":5,"heading":0.0,"speed":3.900847,"lat":40.1992804946,"lon":116.7356855685,"alt":0.0,"systemTime":"1615802121181","satelliteTime":"0","distance":"31.01298","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":5.55582,"lat":40.199153539,"lon":116.7358154705,"alt":0.0,"systemTime":"1615802054964","satelliteTime":"0","distance":"43.50771","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":2.218443,"lat":40.1991955315,"lon":116.7357500105,"alt":0.0,"systemTime":"1615802185405","satelliteTime":"0","distance":"37.02564","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":5,"heading":0.0,"speed":3.617652,"lat":40.1992804511,"lon":116.7356806913,"alt":0.0,"systemTime":"1615802121285","satelliteTime":"0","distance":"30.59935","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":4.969211,"lat":40.1991538807,"lon":116.7358154332,"alt":0.0,"systemTime":"1615802055047","satelliteTime":"0","distance":"43.49458","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":5,"heading":0.0,"speed":3.563988,"lat":40.1992802179,"lon":116.7356725741,"alt":0.0,"systemTime":"1615802121383","satelliteTime":"0","distance":"29.90947","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.904251,"lat":40.1991523158,"lon":116.735826276,"alt":0.0,"systemTime":"1615802055163","satelliteTime":"0","distance":"44.42982","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":5,"heading":0.0,"speed":3.686164,"lat":40.199279808,"lon":116.7356672887,"alt":0.0,"systemTime":"1615802121558","satelliteTime":"0","distance":"29.45782","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.484671,"lat":40.1991526147,"lon":116.7358289791,"alt":0.0,"systemTime":"1615802055254","satelliteTime":"0","distance":"44.64292","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":5,"heading":0.0,"speed":3.938946,"lat":40.1992796742,"lon":116.7356573255,"alt":0.0,"systemTime":"1615802121639","satelliteTime":"0","distance":"28.61257","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.244963,"lat":40.1991518658,"lon":116.7358360355,"alt":0.0,"systemTime":"1615802055393","satelliteTime":"0","distance":"45.24395","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":5,"heading":0.0,"speed":3.985659,"lat":40.199279895,"lon":116.7356537953,"alt":0.0,"systemTime":"1615802121712","satelliteTime":"0","distance":"28.31575","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.572601,"lat":40.1991512749,"lon":116.7358432634,"alt":0.0,"systemTime":"1615802055472","satelliteTime":"0","distance":"45.85466","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":5,"heading":0.0,"speed":3.872353,"lat":40.1992796948,"lon":116.7356450959,"alt":0.0,"systemTime":"1615802121792","satelliteTime":"0","distance":"27.57707","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.537741,"lat":40.1991506081,"lon":116.7358492109,"alt":0.0,"systemTime":"1615802055550","satelliteTime":"0","distance":"46.36247","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":5,"heading":0.0,"speed":3.877197,"lat":40.1992797071,"lon":116.7356384808,"alt":0.0,"systemTime":"1615802121875","satelliteTime":"0","distance":"27.01711","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.387744,"lat":40.1991522948,"lon":116.7358460624,"alt":0.0,"systemTime":"1615802055648","satelliteTime":"0","distance":"46.05576","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":5,"heading":0.0,"speed":3.969447,"lat":40.1992800247,"lon":116.735630632,"alt":0.0,"systemTime":"1615802121952","satelliteTime":"0","distance":"26.35609","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":2.488923,"lat":40.1991533725,"lon":116.7358459409,"alt":0.0,"systemTime":"1615802055742","satelliteTime":"0","distance":"46.01549","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":5,"heading":0.0,"speed":4.22635,"lat":40.1992798694,"lon":116.7356235334,"alt":0.0,"systemTime":"1615802122149","satelliteTime":"0","distance":"25.75370","driveIn":true,"driveOut":false}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":8,"heading":0.0,"speed":4.183265,"lat":40.19927966,"lon":116.7356157793,"alt":0.0,"systemTime":"1615802122223","satelliteTime":"0","distance":"25.09532","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":8,"heading":0.0,"speed":4.074504,"lat":40.199279581,"lon":116.7356102196,"alt":0.0,"systemTime":"1615802122295","satelliteTime":"0","distance":"24.62410","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":8,"heading":0.0,"speed":3.973487,"lat":40.1992799455,"lon":116.7356019047,"alt":0.0,"systemTime":"1615802122372","satelliteTime":"0","distance":"23.92511","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":1,"heading":0.0,"speed":3.989798,"lat":40.1992800214,"lon":116.7355951976,"alt":0.0,"systemTime":"1615802122477","satelliteTime":"0","distance":"23.35903","driveIn":true,"driveOut":false}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":1,"heading":0.0,"speed":4.230833,"lat":40.1992799853,"lon":116.7355860343,"alt":0.0,"systemTime":"1615802122553","satelliteTime":"0","distance":"22.58424","driveIn":true,"driveOut":false}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":1,"heading":0.0,"speed":4.494411,"lat":40.1992800352,"lon":116.735578528,"alt":0.0,"systemTime":"1615802122759","satelliteTime":"0","distance":"21.95080","driveIn":true,"driveOut":false}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":1,"heading":0.0,"speed":4.527164,"lat":40.1992797832,"lon":116.7355706568,"alt":0.0,"systemTime":"1615802122839","satelliteTime":"0","distance":"21.28286","driveIn":true,"driveOut":false}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":1,"heading":0.0,"speed":4.376662,"lat":40.1992798646,"lon":116.7355642523,"alt":0.0,"systemTime":"1615802122910","satelliteTime":"0","distance":"20.74332","driveIn":true,"driveOut":false}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":3,"heading":0.0,"speed":4.249522,"lat":40.1992799562,"lon":116.7355553346,"alt":0.0,"systemTime":"1615802122985","satelliteTime":"0","distance":"19.99221","driveIn":true,"driveOut":false}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":3,"heading":0.0,"speed":4.150593,"lat":40.1992801342,"lon":116.7355499241,"alt":0.0,"systemTime":"1615802123075","satelliteTime":"0","distance":"19.53855","driveIn":true,"driveOut":false}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":3,"heading":0.0,"speed":4.019808,"lat":40.1992800419,"lon":116.735542442,"alt":0.0,"systemTime":"1615802123156","satelliteTime":"0","distance":"18.90663","driveIn":true,"driveOut":false}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":3,"heading":0.0,"speed":3.769295,"lat":40.1992800439,"lon":116.7355372524,"alt":0.0,"systemTime":"1615802123329","satelliteTime":"0","distance":"18.46951","driveIn":true,"driveOut":false}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":3,"heading":0.0,"speed":3.664146,"lat":40.1992799942,"lon":116.7355292226,"alt":0.0,"systemTime":"1615802123406","satelliteTime":"0","distance":"17.79273","driveIn":true,"driveOut":false}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":3,"heading":0.0,"speed":3.982035,"lat":40.1992799562,"lon":116.7355209949,"alt":0.0,"systemTime":"1615802123482","satelliteTime":"0","distance":"17.09997","driveIn":true,"driveOut":false}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":3,"heading":0.0,"speed":4.412724,"lat":40.1992798039,"lon":116.7355119934,"alt":0.0,"systemTime":"1615802123566","satelliteTime":"0","distance":"16.34082","driveIn":true,"driveOut":false}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":3,"heading":0.0,"speed":4.630624,"lat":40.1992796496,"lon":116.7355054741,"alt":0.0,"systemTime":"1615802123665","satelliteTime":"0","distance":"15.79063","driveIn":true,"driveOut":false}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":3,"heading":0.0,"speed":4.539972,"lat":40.1992799876,"lon":116.7354966969,"alt":0.0,"systemTime":"1615802123753","satelliteTime":"0","distance":"15.06050","driveIn":true,"driveOut":false}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":3,"heading":0.0,"speed":4.444885,"lat":40.1992800832,"lon":116.7354892595,"alt":0.0,"systemTime":"1615802123921","satelliteTime":"0","distance":"14.43942","driveIn":true,"driveOut":false}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":3,"heading":0.0,"speed":4.430207,"lat":40.1992800748,"lon":116.7354813266,"alt":0.0,"systemTime":"1615802123998","satelliteTime":"0","distance":"13.77584","driveIn":true,"driveOut":false}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":3,"heading":0.0,"speed":4.516784,"lat":40.1992798122,"lon":116.7354730486,"alt":0.0,"systemTime":"1615802124085","satelliteTime":"0","distance":"13.07911","driveIn":true,"driveOut":false}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":3,"heading":0.0,"speed":4.629067,"lat":40.1992799876,"lon":116.735463914,"alt":0.0,"systemTime":"1615802124173","satelliteTime":"0","distance":"12.32186","driveIn":true,"driveOut":false}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":3,"heading":0.0,"speed":4.639268,"lat":40.1992803948,"lon":116.7354575887,"alt":0.0,"systemTime":"1615802124259","satelliteTime":"0","distance":"11.80592","driveIn":true,"driveOut":false}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":3,"heading":0.0,"speed":4.524597,"lat":40.1992803096,"lon":116.7354489189,"alt":0.0,"systemTime":"1615802124428","satelliteTime":"0","distance":"11.08557","driveIn":true,"driveOut":false}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":3,"heading":0.0,"speed":4.408017,"lat":40.1992801134,"lon":116.7354414139,"alt":0.0,"systemTime":"1615802124505","satelliteTime":"0","distance":"10.46056","driveIn":true,"driveOut":false}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":3,"heading":0.0,"speed":4.376606,"lat":40.1992803019,"lon":116.7354337727,"alt":0.0,"systemTime":"1615802124585","satelliteTime":"0","distance":"9.837222","driveIn":true,"driveOut":false}]
[{"uuid":"789","carId":"0","type":"3","color":"0","inOutFlag":3,"heading":0.0,"speed":4.208932,"lat":40.1992804239,"lon":116.735428194,"alt":0.0,"systemTime":"1615802124673","satelliteTime":"0","distance":"9.383926","driveIn":true,"driveOut":false}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":8,"heading":0.0,"speed":0.0,"lat":40.1992791521,"lon":116.7359085211,"alt":0.0,"systemTime":"1615802117480","satelliteTime":"0","distance":"-1.00000","driveIn":false,"driveOut":true},{"uuid":"949","carId":"0","type":"3","color":"0","inOutFlag":7,"heading":0.0,"speed":3.983068,"lat":40.199239568,"lon":116.7356565408,"alt":0.0,"systemTime":"1615802257992","satelliteTime":"0","distance":"28.50393","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.360256,"lat":40.1991585392,"lon":116.735579628,"alt":0.0,"systemTime":"1615802051252","satelliteTime":"0","distance":"24.49668","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":3.063223,"lat":40.1991953165,"lon":116.7355517732,"alt":0.0,"systemTime":"1615802181714","satelliteTime":"0","distance":"20.70771","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":8,"heading":0.0,"speed":2.271649,"lat":40.199278852,"lon":116.7358995485,"alt":0.0,"systemTime":"1615802117555","satelliteTime":"0","distance":"49.15743","driveIn":false,"driveOut":true},{"uuid":"949","carId":"0","type":"3","color":"0","inOutFlag":7,"heading":0.0,"speed":3.311933,"lat":40.199239281,"lon":116.7356522482,"alt":0.0,"systemTime":"1615802258063","satelliteTime":"0","distance":"28.14207","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.666871,"lat":40.1991583736,"lon":116.7355858766,"alt":0.0,"systemTime":"1615802051374","satelliteTime":"0","distance":"24.98084","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":3.158866,"lat":40.199195218,"lon":116.735557361,"alt":0.0,"systemTime":"1615802181796","satelliteTime":"0","distance":"21.15993","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":8,"heading":0.0,"speed":2.86804,"lat":40.1992784959,"lon":116.735894219,"alt":0.0,"systemTime":"1615802117737","satelliteTime":"0","distance":"48.70289","driveIn":false,"driveOut":true},{"uuid":"949","carId":"0","type":"3","color":"0","inOutFlag":7,"heading":0.0,"speed":3.481111,"lat":40.1992398335,"lon":116.7356407372,"alt":0.0,"systemTime":"1615802258241","satelliteTime":"0","distance":"27.16143","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.654301,"lat":40.1991582732,"lon":116.7355914933,"alt":0.0,"systemTime":"1615802051494","satelliteTime":"0","distance":"25.41531","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":3.05733,"lat":40.199195603,"lon":116.7355611353,"alt":0.0,"systemTime":"1615802181878","satelliteTime":"0","distance":"21.44982","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":8,"heading":0.0,"speed":4.810977,"lat":40.1992779922,"lon":116.7358790134,"alt":0.0,"systemTime":"1615802117819","satelliteTime":"0","distance":"47.40882","driveIn":false,"driveOut":true},{"uuid":"949","carId":"0","type":"3","color":"0","inOutFlag":7,"heading":0.0,"speed":4.047473,"lat":40.1992402445,"lon":116.7356352855,"alt":0.0,"systemTime":"1615802258316","satelliteTime":"0","distance":"26.69582","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.558737,"lat":40.1991574452,"lon":116.7355977684,"alt":0.0,"systemTime":"1615802051656","satelliteTime":"0","distance":"25.93654","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":2.874259,"lat":40.1991952388,"lon":116.7355674545,"alt":0.0,"systemTime":"1615802181954","satelliteTime":"0","distance":"21.97229","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":8,"heading":0.0,"speed":5.524149,"lat":40.199277205,"lon":116.7358707005,"alt":0.0,"systemTime":"1615802117900","satelliteTime":"0","distance":"46.69860","driveIn":false,"driveOut":true},{"uuid":"949","carId":"0","type":"3","color":"0","inOutFlag":7,"heading":0.0,"speed":4.319131,"lat":40.1992400809,"lon":116.7356278404,"alt":0.0,"systemTime":"1615802258390","satelliteTime":"0","distance":"26.06574","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.373051,"lat":40.1991575783,"lon":116.7356033378,"alt":0.0,"systemTime":"1615802051737","satelliteTime":"0","distance":"26.35902","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":2.887222,"lat":40.1991949277,"lon":116.735572198,"alt":0.0,"systemTime":"1615802182162","satelliteTime":"0","distance":"22.36629","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":8,"heading":0.0,"speed":5.967031,"lat":40.1992775306,"lon":116.7358600072,"alt":0.0,"systemTime":"1615802117981","satelliteTime":"0","distance":"45.79222","driveIn":false,"driveOut":true},{"uuid":"949","carId":"0","type":"3","color":"0","inOutFlag":7,"heading":0.0,"speed":4.293089,"lat":40.1992400772,"lon":116.7356197552,"alt":0.0,"systemTime":"1615802258461","satelliteTime":"0","distance":"25.38020","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.323301,"lat":40.1991571316,"lon":116.7356091048,"alt":0.0,"systemTime":"1615802051816","satelliteTime":"0","distance":"26.82527","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":3.06316,"lat":40.1991950654,"lon":116.7355786841,"alt":0.0,"systemTime":"1615802182241","satelliteTime":"0","distance":"22.88663","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":8,"heading":0.0,"speed":5.494833,"lat":40.199277818,"lon":116.7358586075,"alt":0.0,"systemTime":"1615802118073","satelliteTime":"0","distance":"45.67495","driveIn":false,"driveOut":true},{"uuid":"949","carId":"0","type":"3","color":"0","inOutFlag":7,"heading":0.0,"speed":4.218418,"lat":40.1992402857,"lon":116.7356116235,"alt":0.0,"systemTime":"1615802258668","satelliteTime":"0","distance":"24.68902","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.300756,"lat":40.1991577086,"lon":116.7356150517,"alt":0.0,"systemTime":"1615802051904","satelliteTime":"0","distance":"27.25990","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":3.171351,"lat":40.1991950974,"lon":116.7355834345,"alt":0.0,"systemTime":"1615802182317","satelliteTime":"0","distance":"23.27091","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":8,"heading":0.0,"speed":4.162639,"lat":40.199278146,"lon":116.7358632981,"alt":0.0,"systemTime":"1615802118155","satelliteTime":"0","distance":"46.07511","driveIn":false,"driveOut":true},{"uuid":"949","carId":"0","type":"3","color":"0","inOutFlag":7,"heading":0.0,"speed":4.421367,"lat":40.1992398879,"lon":116.7356047083,"alt":0.0,"systemTime":"1615802258750","satelliteTime":"0","distance":"24.10630","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.226784,"lat":40.1991576846,"lon":116.7356201776,"alt":0.0,"systemTime":"1615802051981","satelliteTime":"0","distance":"27.65978","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":3.153336,"lat":40.1991951342,"lon":116.735589591,"alt":0.0,"systemTime":"1615802182394","satelliteTime":"0","distance":"23.77006","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":8,"heading":0.0,"speed":2.840005,"lat":40.1992786586,"lon":116.735863501,"alt":0.0,"systemTime":"1615802118342","satelliteTime":"0","distance":"46.09526","driveIn":false,"driveOut":true},{"uuid":"949","carId":"0","type":"3","color":"0","inOutFlag":7,"heading":0.0,"speed":4.69259,"lat":40.1992402221,"lon":116.7355898673,"alt":0.0,"systemTime":"1615802258823","satelliteTime":"0","distance":"22.84557","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.037928,"lat":40.1991582271,"lon":116.7356243718,"alt":0.0,"systemTime":"1615802052056","satelliteTime":"0","distance":"27.96306","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":3.237472,"lat":40.1991948799,"lon":116.7355955536,"alt":0.0,"systemTime":"1615802182467","satelliteTime":"0","distance":"24.26368","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":8,"heading":0.0,"speed":1.647377,"lat":40.1992790599,"lon":116.7358606085,"alt":0.0,"systemTime":"1615802118416","satelliteTime":"0","distance":"45.85200","driveIn":false,"driveOut":true},{"uuid":"949","carId":"0","type":"3","color":"0","inOutFlag":7,"heading":0.0,"speed":4.941518,"lat":40.1992400572,"lon":116.7355858555,"alt":0.0,"systemTime":"1615802258896","satelliteTime":"0","distance":"22.50721","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":2.792672,"lat":40.1991586043,"lon":116.7356292168,"alt":0.0,"systemTime":"1615802052161","satelliteTime":"0","distance":"28.32586","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":3.241449,"lat":40.1991948029,"lon":116.7356008635,"alt":0.0,"systemTime":"1615802182542","satelliteTime":"0","distance":"24.69905","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":5,"heading":0.0,"speed":0.999643,"lat":40.1992799151,"lon":116.7358655423,"alt":0.0,"systemTime":"1615802118492","satelliteTime":"0","distance":"46.27602","driveIn":true,"driveOut":false},{"uuid":"949","carId":"0","type":"3","color":"0","inOutFlag":7,"heading":0.0,"speed":4.793724,"lat":40.1992403587,"lon":116.7355763838,"alt":0.0,"systemTime":"1615802258970","satelliteTime":"0","distance":"21.70195","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":2.998442,"lat":40.1991579436,"lon":116.735637641,"alt":0.0,"systemTime":"1615802052244","satelliteTime":"0","distance":"29.01544","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":3.276191,"lat":40.1991947212,"lon":116.7356068267,"alt":0.0,"systemTime":"1615802182747","satelliteTime":"0","distance":"25.18854","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":5,"heading":0.0,"speed":0.663719,"lat":40.1992795137,"lon":116.7358592749,"alt":0.0,"systemTime":"1615802118569","satelliteTime":"0","distance":"45.74148","driveIn":true,"driveOut":false},{"uuid":"949","carId":"0","type":"3","color":"0","inOutFlag":7,"heading":0.0,"speed":4.628361,"lat":40.1992402818,"lon":116.7355692058,"alt":0.0,"systemTime":"1615802259046","satelliteTime":"0","distance":"21.09473","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.477113,"lat":40.1991571504,"lon":116.735643502,"alt":0.0,"systemTime":"1615802052365","satelliteTime":"0","distance":"29.51006","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":3.325596,"lat":40.1991945331,"lon":116.735613504,"alt":0.0,"systemTime":"1615802182830","satelliteTime":"0","distance":"25.74035","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":5,"heading":0.0,"speed":1.245314,"lat":40.1992792911,"lon":116.7358488223,"alt":0.0,"systemTime":"1615802118662","satelliteTime":"0","distance":"44.85271","driveIn":true,"driveOut":false},{"uuid":"949","carId":"0","type":"3","color":"0","inOutFlag":7,"heading":0.0,"speed":4.386057,"lat":40.1992402943,"lon":116.7355600948,"alt":0.0,"systemTime":"1615802259230","satelliteTime":"0","distance":"20.32314","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.694839,"lat":40.199156636,"lon":116.7356489357,"alt":0.0,"systemTime":"1615802052441","satelliteTime":"0","distance":"29.95976","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":3.31123,"lat":40.1991943333,"lon":116.7356179439,"alt":0.0,"systemTime":"1615802182905","satelliteTime":"0","distance":"26.10988","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":5,"heading":0.0,"speed":2.262741,"lat":40.1992791818,"lon":116.7358458909,"alt":0.0,"systemTime":"1615802118860","satelliteTime":"0","distance":"44.60317","driveIn":true,"driveOut":false},{"uuid":"949","carId":"0","type":"3","color":"0","inOutFlag":7,"heading":0.0,"speed":4.633321,"lat":40.1992402664,"lon":116.7355531039,"alt":0.0,"systemTime":"1615802259303","satelliteTime":"0","distance":"19.73166","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.611957,"lat":40.1991559809,"lon":116.7356558043,"alt":0.0,"systemTime":"1615802052575","satelliteTime":"0","distance":"30.52908","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":3.24476,"lat":40.1991944342,"lon":116.7356240746,"alt":0.0,"systemTime":"1615802182982","satelliteTime":"0","distance":"26.60950","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":5,"heading":0.0,"speed":2.953721,"lat":40.1992799544,"lon":116.7358447571,"alt":0.0,"systemTime":"1615802118934","satelliteTime":"0","distance":"44.51173","driveIn":true,"driveOut":false},{"uuid":"949","carId":"0","type":"3","color":"0","inOutFlag":7,"heading":0.0,"speed":4.622197,"lat":40.1992401671,"lon":116.7355435611,"alt":0.0,"systemTime":"1615802259372","satelliteTime":"0","distance":"18.92524","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.511434,"lat":40.1991558754,"lon":116.735662246,"alt":0.0,"systemTime":"1615802052654","satelliteTime":"0","distance":"31.04305","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":3.129088,"lat":40.1991945356,"lon":116.7356293619,"alt":0.0,"systemTime":"1615802183065","satelliteTime":"0","distance":"27.04063","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":5,"heading":0.0,"speed":3.127559,"lat":40.1992802176,"lon":116.7358350352,"alt":0.0,"systemTime":"1615802119012","satelliteTime":"0","distance":"43.68819","driveIn":true,"driveOut":false},{"uuid":"949","carId":"0","type":"3","color":"0","inOutFlag":7,"heading":0.0,"speed":4.643083,"lat":40.1992402051,"lon":116.7355365938,"alt":0.0,"systemTime":"1615802259444","satelliteTime":"0","distance":"18.33548","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.805402,"lat":40.1991552353,"lon":116.7356703068,"alt":0.0,"systemTime":"1615802052772","satelliteTime":"0","distance":"31.70801","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":3.30228,"lat":40.1991942085,"lon":116.7356370333,"alt":0.0,"systemTime":"1615802183140","satelliteTime":"0","distance":"27.68053","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":5,"heading":0.0,"speed":3.286891,"lat":40.1992801525,"lon":116.7358255437,"alt":0.0,"systemTime":"1615802119089","satelliteTime":"0","distance":"42.88214","driveIn":true,"driveOut":false},{"uuid":"949","carId":"0","type":"3","color":"0","inOutFlag":7,"heading":0.0,"speed":4.40361,"lat":40.1992401712,"lon":116.735529994,"alt":0.0,"systemTime":"1615802259649","satelliteTime":"0","distance":"17.77781","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.915542,"lat":40.1991557627,"lon":116.7356758082,"alt":0.0,"systemTime":"1615802052854","satelliteTime":"0","distance":"32.12452","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":3.513479,"lat":40.1991943051,"lon":116.7356421653,"alt":0.0,"systemTime":"1615802183327","satelliteTime":"0","distance":"28.10019","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":5,"heading":0.0,"speed":4.120306,"lat":40.199279515,"lon":116.7358174636,"alt":0.0,"systemTime":"1615802119167","satelliteTime":"0","distance":"42.19212","driveIn":true,"driveOut":false},{"uuid":"949","carId":"0","type":"3","color":"0","inOutFlag":7,"heading":0.0,"speed":4.077891,"lat":40.1992402244,"lon":116.7355235069,"alt":0.0,"systemTime":"1615802259720","satelliteTime":"0","distance":"17.22884","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.399828,"lat":40.1991570232,"lon":116.7356778401,"alt":0.0,"systemTime":"1615802052975","satelliteTime":"0","distance":"32.23751","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":3.644802,"lat":40.1991941758,"lon":116.7356498443,"alt":0.0,"systemTime":"1615802183405","satelliteTime":"0","distance":"28.73649","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":5,"heading":0.0,"speed":4.357308,"lat":40.1992789976,"lon":116.7358121803,"alt":0.0,"systemTime":"1615802119365","satelliteTime":"0","distance":"41.74030","driveIn":true,"driveOut":false},{"uuid":"949","carId":"0","type":"3","color":"0","inOutFlag":7,"heading":0.0,"speed":4.011987,"lat":40.1992402835,"lon":116.7355141819,"alt":0.0,"systemTime":"1615802259796","satelliteTime":"0","distance":"16.44022","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":2.72872,"lat":40.1991576327,"lon":116.735682825,"alt":0.0,"systemTime":"1615802053049","satelliteTime":"0","distance":"32.61240","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":3.493815,"lat":40.1991946095,"lon":116.7356535221,"alt":0.0,"systemTime":"1615802183482","satelliteTime":"0","distance":"29.02821","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":5,"heading":0.0,"speed":3.669352,"lat":40.1992790521,"lon":116.7358096916,"alt":0.0,"systemTime":"1615802119439","satelliteTime":"0","distance":"41.52941","driveIn":true,"driveOut":false},{"uuid":"949","carId":"0","type":"3","color":"0","inOutFlag":7,"heading":0.0,"speed":4.32773,"lat":40.1992402438,"lon":116.7355065977,"alt":0.0,"systemTime":"1615802259878","satelliteTime":"0","distance":"15.80031","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":2.274866,"lat":40.1991582446,"lon":116.7356864519,"alt":0.0,"systemTime":"1615802053177","satelliteTime":"0","distance":"32.87971","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":3.169951,"lat":40.1991949346,"lon":116.7356591704,"alt":0.0,"systemTime":"1615802183558","satelliteTime":"0","distance":"29.48612","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":5,"heading":0.0,"speed":2.584403,"lat":40.1992793633,"lon":116.7358060875,"alt":0.0,"systemTime":"1615802119520","satelliteTime":"0","distance":"41.22556","driveIn":true,"driveOut":false},{"uuid":"949","carId":"0","type":"3","color":"0","inOutFlag":7,"heading":0.0,"speed":4.698614,"lat":40.1992401773,"lon":116.7354971698,"alt":0.0,"systemTime":"1615802259952","satelliteTime":"0","distance":"15.00567","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":2.703485,"lat":40.1991562036,"lon":116.735698808,"alt":0.0,"systemTime":"1615802053258","satelliteTime":"0","distance":"33.94599","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":2.918437,"lat":40.1991946981,"lon":116.7356636703,"alt":0.0,"systemTime":"1615802183737","satelliteTime":"0","distance":"29.86426","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":5,"heading":0.0,"speed":2.225735,"lat":40.1992795693,"lon":116.7357965161,"alt":0.0,"systemTime":"1615802119598","satelliteTime":"0","distance":"40.41463","driveIn":true,"driveOut":false},{"uuid":"949","carId":"0","type":"3","color":"0","inOutFlag":7,"heading":0.0,"speed":4.810998,"lat":40.199240297,"lon":116.7354895955,"alt":0.0,"systemTime":"1615802260160","satelliteTime":"0","distance":"14.36529","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.643549,"lat":40.1991560494,"lon":116.7357035949,"alt":0.0,"systemTime":"1615802053382","satelliteTime":"0","distance":"34.33592","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":2.962875,"lat":40.199195142,"lon":116.7356710014,"alt":0.0,"systemTime":"1615802183807","satelliteTime":"0","distance":"30.45956","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":5,"heading":0.0,"speed":2.832566,"lat":40.1992797683,"lon":116.7357873094,"alt":0.0,"systemTime":"1615802119675","satelliteTime":"0","distance":"39.63474","driveIn":true,"driveOut":false},{"uuid":"949","carId":"0","type":"3","color":"0","inOutFlag":7,"heading":0.0,"speed":4.787498,"lat":40.1992400482,"lon":116.7354805102,"alt":0.0,"systemTime":"1615802260242","satelliteTime":"0","distance":"13.60369","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":4.016298,"lat":40.1991570187,"lon":116.7357067635,"alt":0.0,"systemTime":"1615802053461","satelliteTime":"0","distance":"34.55558","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":3.224998,"lat":40.1991951322,"lon":116.7356758104,"alt":0.0,"systemTime":"1615802183882","satelliteTime":"0","distance":"30.85817","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":5,"heading":0.0,"speed":3.659139,"lat":40.1992796698,"lon":116.7357816559,"alt":0.0,"systemTime":"1615802119755","satelliteTime":"0","distance":"39.15432","driveIn":true,"driveOut":false},{"uuid":"949","carId":"0","type":"3","color":"0","inOutFlag":7,"heading":0.0,"speed":4.710055,"lat":40.199240007,"lon":116.7354734071,"alt":0.0,"systemTime":"1615802260322","satelliteTime":"0","distance":"13.00667","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.775972,"lat":40.1991568593,"lon":116.7357134195,"alt":0.0,"systemTime":"1615802053574","satelliteTime":"0","distance":"35.09735","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":3.459951,"lat":40.1991943953,"lon":116.7356835994,"alt":0.0,"systemTime":"1615802183958","satelliteTime":"0","distance":"31.52207","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":5,"heading":0.0,"speed":3.599107,"lat":40.1992795248,"lon":116.7357782983,"alt":0.0,"systemTime":"1615802119917","satelliteTime":"0","distance":"38.86838","driveIn":true,"driveOut":false},{"uuid":"949","carId":"0","type":"3","color":"0","inOutFlag":7,"heading":0.0,"speed":4.700326,"lat":40.1992403527,"lon":116.7354636156,"alt":0.0,"systemTime":"1615802260401","satelliteTime":"0","distance":"12.17782","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.16311,"lat":40.1991579146,"lon":116.7357175953,"alt":0.0,"systemTime":"1615802053648","satelliteTime":"0","distance":"35.39727","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":3.427513,"lat":40.1991943792,"lon":116.7356872588,"alt":0.0,"systemTime":"1615802184131","satelliteTime":"0","distance":"31.82594","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":5,"heading":0.0,"speed":3.590058,"lat":40.1992793401,"lon":116.7357675394,"alt":0.0,"systemTime":"1615802119997","satelliteTime":"0","distance":"37.95417","driveIn":true,"driveOut":false},{"uuid":"949","carId":"0","type":"3","color":"0","inOutFlag":7,"heading":0.0,"speed":4.784769,"lat":40.1992406815,"lon":116.735455875,"alt":0.0,"systemTime":"1615802260475","satelliteTime":"0","distance":"11.52207","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":2.556938,"lat":40.199158625,"lon":116.7357192674,"alt":0.0,"systemTime":"1615802053764","satelliteTime":"0","distance":"35.50783","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":2.979728,"lat":40.1991947275,"lon":116.7356910003,"alt":0.0,"systemTime":"1615802184203","satelliteTime":"0","distance":"32.12794","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":5,"heading":0.0,"speed":4.087134,"lat":40.1992789313,"lon":116.735758191,"alt":0.0,"systemTime":"1615802120076","satelliteTime":"0","distance":"37.15803","driveIn":true,"driveOut":false},{"uuid":"949","carId":"0","type":"3","color":"0","inOutFlag":7,"heading":0.0,"speed":4.773538,"lat":40.1992409209,"lon":116.7354475587,"alt":0.0,"systemTime":"1615802260551","satelliteTime":"0","distance":"10.82012","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":2.537513,"lat":40.1991579636,"lon":116.7357272712,"alt":0.0,"systemTime":"1615802053844","satelliteTime":"0","distance":"36.17808","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":2.357381,"lat":40.199194841,"lon":116.7356932768,"alt":0.0,"systemTime":"1615802184284","satelliteTime":"0","distance":"32.31424","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":5,"heading":0.0,"speed":4.811716,"lat":40.1992791683,"lon":116.7357542908,"alt":0.0,"systemTime":"1615802120154","satelliteTime":"0","distance":"36.82886","driveIn":true,"driveOut":false},{"uuid":"949","carId":"0","type":"3","color":"0","inOutFlag":4,"heading":0.0,"speed":4.615699,"lat":40.1992408736,"lon":116.7354406484,"alt":0.0,"systemTime":"1615802260740","satelliteTime":"0","distance":"10.24227","driveIn":false,"driveOut":true},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":2.517359,"lat":40.1991584653,"lon":116.7357299471,"alt":0.0,"systemTime":"1615802053975","satelliteTime":"0","distance":"36.37789","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":2.182996,"lat":40.1991941699,"lon":116.7357042218,"alt":0.0,"systemTime":"1615802184363","satelliteTime":"0","distance":"33.23941","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":5,"heading":0.0,"speed":4.58601,"lat":40.1992794462,"lon":116.735751443,"alt":0.0,"systemTime":"1615802120358","satelliteTime":"0","distance":"36.58935","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.06026,"lat":40.1991578475,"lon":116.735739305,"alt":0.0,"systemTime":"1615802054056","satelliteTime":"0","distance":"37.15757","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":2.902358,"lat":40.1991945269,"lon":116.7357082993,"alt":0.0,"systemTime":"1615802184563","satelliteTime":"0","distance":"33.57009","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":5,"heading":0.0,"speed":3.672491,"lat":40.199279632,"lon":116.7357438557,"alt":0.0,"systemTime":"1615802120431","satelliteTime":"0","distance":"35.94716","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.626374,"lat":40.1991567429,"lon":116.7357491169,"alt":0.0,"systemTime":"1615802054165","satelliteTime":"0","distance":"37.99085","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":3.200551,"lat":40.1991952698,"lon":116.735713313,"alt":0.0,"systemTime":"1615802184638","satelliteTime":"0","distance":"33.97032","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":5,"heading":0.0,"speed":3.442311,"lat":40.1992790602,"lon":116.735737202,"alt":0.0,"systemTime":"1615802120504","satelliteTime":"0","distance":"35.37838","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":4.317677,"lat":40.1991565286,"lon":116.7357572212,"alt":0.0,"systemTime":"1615802054242","satelliteTime":"0","distance":"38.65684","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":3.179831,"lat":40.1991957711,"lon":116.7357175831,"alt":0.0,"systemTime":"1615802184714","satelliteTime":"0","distance":"34.31474","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":5,"heading":0.0,"speed":4.123498,"lat":40.199279384,"lon":116.7357249141,"alt":0.0,"systemTime":"1615802120590","satelliteTime":"0","distance":"34.33871","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":4.437632,"lat":40.1991565626,"lon":116.7357624193,"alt":0.0,"systemTime":"1615802054377","satelliteTime":"0","distance":"39.07896","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":2.656279,"lat":40.1991954964,"lon":116.7357227947,"alt":0.0,"systemTime":"1615802184796","satelliteTime":"0","distance":"34.75512","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":5,"heading":0.0,"speed":4.944893,"lat":40.1992790543,"lon":116.7357180548,"alt":0.0,"systemTime":"1615802120681","satelliteTime":"0","distance":"33.75436","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":4.152788,"lat":40.1991573606,"lon":116.7357698276,"alt":0.0,"systemTime":"1615802054455","satelliteTime":"0","distance":"39.65784","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":3.23597,"lat":40.1991935909,"lon":116.7357326558,"alt":0.0,"systemTime":"1615802184877","satelliteTime":"0","distance":"35.61899","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":5,"heading":0.0,"speed":5.0563,"lat":40.1992793154,"lon":116.7357132032,"alt":0.0,"systemTime":"1615802120764","satelliteTime":"0","distance":"33.34506","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.573127,"lat":40.1991578003,"lon":116.7357741717,"alt":0.0,"systemTime":"1615802054562","satelliteTime":"0","distance":"39.99897","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":3.640305,"lat":40.1991942363,"lon":116.7357364005,"alt":0.0,"systemTime":"1615802184959","satelliteTime":"0","distance":"35.91700","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":5,"heading":0.0,"speed":4.330799,"lat":40.1992792432,"lon":116.7357067926,"alt":0.0,"systemTime":"1615802120945","satelliteTime":"0","distance":"32.80090","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.587479,"lat":40.1991569306,"lon":116.7357832722,"alt":0.0,"systemTime":"1615802054644","satelliteTime":"0","distance":"40.76952","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":3.557845,"lat":40.199195183,"lon":116.735735494,"alt":0.0,"systemTime":"1615802185163","satelliteTime":"0","distance":"35.82095","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":5,"heading":0.0,"speed":3.994465,"lat":40.199279381,"lon":116.7356976163,"alt":0.0,"systemTime":"1615802121022","satelliteTime":"0","distance":"32.02410","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":4.142085,"lat":40.1991556391,"lon":116.7357975925,"alt":0.0,"systemTime":"1615802054764","satelliteTime":"0","distance":"41.98042","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":2.590332,"lat":40.1991955653,"lon":116.7357411941,"alt":0.0,"systemTime":"1615802185239","satelliteTime":"0","distance":"36.28857","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":5,"heading":0.0,"speed":3.81858,"lat":40.199279627,"lon":116.7356932344,"alt":0.0,"systemTime":"1615802121099","satelliteTime":"0","distance":"31.65479","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":5.118244,"lat":40.1991544035,"lon":116.7358089282,"alt":0.0,"systemTime":"1615802054846","satelliteTime":"0","distance":"42.94587","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":2.199256,"lat":40.1991952769,"lon":116.7357450592,"alt":0.0,"systemTime":"1615802185320","satelliteTime":"0","distance":"36.61736","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":5,"heading":0.0,"speed":3.900847,"lat":40.1992804946,"lon":116.7356855685,"alt":0.0,"systemTime":"1615802121181","satelliteTime":"0","distance":"31.01298","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":5.55582,"lat":40.199153539,"lon":116.7358154705,"alt":0.0,"systemTime":"1615802054964","satelliteTime":"0","distance":"43.50771","driveIn":false,"driveOut":true},{"uuid":"859","carId":"0","type":"3","color":"0","inOutFlag":6,"heading":0.0,"speed":2.218443,"lat":40.1991955315,"lon":116.7357500105,"alt":0.0,"systemTime":"1615802185405","satelliteTime":"0","distance":"37.02564","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":5,"heading":0.0,"speed":3.617652,"lat":40.1992804511,"lon":116.7356806913,"alt":0.0,"systemTime":"1615802121285","satelliteTime":"0","distance":"30.59935","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":4.969211,"lat":40.1991538807,"lon":116.7358154332,"alt":0.0,"systemTime":"1615802055047","satelliteTime":"0","distance":"43.49458","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":5,"heading":0.0,"speed":3.563988,"lat":40.1992802179,"lon":116.7356725741,"alt":0.0,"systemTime":"1615802121383","satelliteTime":"0","distance":"29.90947","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.904251,"lat":40.1991523158,"lon":116.735826276,"alt":0.0,"systemTime":"1615802055163","satelliteTime":"0","distance":"44.42982","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":5,"heading":0.0,"speed":3.686164,"lat":40.199279808,"lon":116.7356672887,"alt":0.0,"systemTime":"1615802121558","satelliteTime":"0","distance":"29.45782","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.484671,"lat":40.1991526147,"lon":116.7358289791,"alt":0.0,"systemTime":"1615802055254","satelliteTime":"0","distance":"44.64292","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":5,"heading":0.0,"speed":3.938946,"lat":40.1992796742,"lon":116.7356573255,"alt":0.0,"systemTime":"1615802121639","satelliteTime":"0","distance":"28.61257","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.244963,"lat":40.1991518658,"lon":116.7358360355,"alt":0.0,"systemTime":"1615802055393","satelliteTime":"0","distance":"45.24395","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":5,"heading":0.0,"speed":3.985659,"lat":40.199279895,"lon":116.7356537953,"alt":0.0,"systemTime":"1615802121712","satelliteTime":"0","distance":"28.31575","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.572601,"lat":40.1991512749,"lon":116.7358432634,"alt":0.0,"systemTime":"1615802055472","satelliteTime":"0","distance":"45.85466","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":5,"heading":0.0,"speed":3.872353,"lat":40.1992796948,"lon":116.7356450959,"alt":0.0,"systemTime":"1615802121792","satelliteTime":"0","distance":"27.57707","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.537741,"lat":40.1991506081,"lon":116.7358492109,"alt":0.0,"systemTime":"1615802055550","satelliteTime":"0","distance":"46.36247","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":5,"heading":0.0,"speed":3.877197,"lat":40.1992797071,"lon":116.7356384808,"alt":0.0,"systemTime":"1615802121875","satelliteTime":"0","distance":"27.01711","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":3.387744,"lat":40.1991522948,"lon":116.7358460624,"alt":0.0,"systemTime":"1615802055648","satelliteTime":"0","distance":"46.05576","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":5,"heading":0.0,"speed":3.969447,"lat":40.1992800247,"lon":116.735630632,"alt":0.0,"systemTime":"1615802121952","satelliteTime":"0","distance":"26.35609","driveIn":true,"driveOut":false},{"uuid":"643","carId":"0","type":"3","color":"0","inOutFlag":2,"heading":0.0,"speed":2.488923,"lat":40.1991533725,"lon":116.7358459409,"alt":0.0,"systemTime":"1615802055742","satelliteTime":"0","distance":"46.01549","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":5,"heading":0.0,"speed":4.22635,"lat":40.1992798694,"lon":116.7356235334,"alt":0.0,"systemTime":"1615802122149","satelliteTime":"0","distance":"25.75370","driveIn":true,"driveOut":false}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":8,"heading":0.0,"speed":4.183265,"lat":40.19927966,"lon":116.7356157793,"alt":0.0,"systemTime":"1615802122223","satelliteTime":"0","distance":"25.09532","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":8,"heading":0.0,"speed":4.074504,"lat":40.199279581,"lon":116.7356102196,"alt":0.0,"systemTime":"1615802122295","satelliteTime":"0","distance":"24.62410","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":8,"heading":0.0,"speed":3.973487,"lat":40.1992799455,"lon":116.7356019047,"alt":0.0,"systemTime":"1615802122372","satelliteTime":"0","distance":"23.92511","driveIn":false,"driveOut":true}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":1,"heading":0.0,"speed":3.989798,"lat":40.1992800214,"lon":116.7355951976,"alt":0.0,"systemTime":"1615802122477","satelliteTime":"0","distance":"23.35903","driveIn":true,"driveOut":false}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":1,"heading":0.0,"speed":4.230833,"lat":40.1992799853,"lon":116.7355860343,"alt":0.0,"systemTime":"1615802122553","satelliteTime":"0","distance":"22.58424","driveIn":true,"driveOut":false}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":1,"heading":0.0,"speed":4.494411,"lat":40.1992800352,"lon":116.735578528,"alt":0.0,"systemTime":"1615802122759","satelliteTime":"0","distance":"21.95080","driveIn":true,"driveOut":false}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":1,"heading":0.0,"speed":4.527164,"lat":40.1992797832,"lon":116.7355706568,"alt":0.0,"systemTime":"1615802122839","satelliteTime":"0","distance":"21.28286","driveIn":true,"driveOut":false}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":1,"heading":0.0,"speed":4.376662,"lat":40.1992798646,"lon":116.7355642523,"alt":0.0,"systemTime":"1615802122910","satelliteTime":"0","distance":"20.74332","driveIn":true,"driveOut":false}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":3,"heading":0.0,"speed":4.249522,"lat":40.1992799562,"lon":116.7355553346,"alt":0.0,"systemTime":"1615802122985","satelliteTime":"0","distance":"19.99221","driveIn":true,"driveOut":false}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":3,"heading":0.0,"speed":4.150593,"lat":40.1992801342,"lon":116.7355499241,"alt":0.0,"systemTime":"1615802123075","satelliteTime":"0","distance":"19.53855","driveIn":true,"driveOut":false}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":3,"heading":0.0,"speed":4.019808,"lat":40.1992800419,"lon":116.735542442,"alt":0.0,"systemTime":"1615802123156","satelliteTime":"0","distance":"18.90663","driveIn":true,"driveOut":false}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":3,"heading":0.0,"speed":3.769295,"lat":40.1992800439,"lon":116.7355372524,"alt":0.0,"systemTime":"1615802123329","satelliteTime":"0","distance":"18.46951","driveIn":true,"driveOut":false}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":3,"heading":0.0,"speed":3.664146,"lat":40.1992799942,"lon":116.7355292226,"alt":0.0,"systemTime":"1615802123406","satelliteTime":"0","distance":"17.79273","driveIn":true,"driveOut":false}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":3,"heading":0.0,"speed":3.982035,"lat":40.1992799562,"lon":116.7355209949,"alt":0.0,"systemTime":"1615802123482","satelliteTime":"0","distance":"17.09997","driveIn":true,"driveOut":false}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":3,"heading":0.0,"speed":4.412724,"lat":40.1992798039,"lon":116.7355119934,"alt":0.0,"systemTime":"1615802123566","satelliteTime":"0","distance":"16.34082","driveIn":true,"driveOut":false}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":3,"heading":0.0,"speed":4.630624,"lat":40.1992796496,"lon":116.7355054741,"alt":0.0,"systemTime":"1615802123665","satelliteTime":"0","distance":"15.79063","driveIn":true,"driveOut":false}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":3,"heading":0.0,"speed":4.539972,"lat":40.1992799876,"lon":116.7354966969,"alt":0.0,"systemTime":"1615802123753","satelliteTime":"0","distance":"15.06050","driveIn":true,"driveOut":false}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":3,"heading":0.0,"speed":4.444885,"lat":40.1992800832,"lon":116.7354892595,"alt":0.0,"systemTime":"1615802123921","satelliteTime":"0","distance":"14.43942","driveIn":true,"driveOut":false}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":3,"heading":0.0,"speed":4.430207,"lat":40.1992800748,"lon":116.7354813266,"alt":0.0,"systemTime":"1615802123998","satelliteTime":"0","distance":"13.77584","driveIn":true,"driveOut":false}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":3,"heading":0.0,"speed":4.516784,"lat":40.1992798122,"lon":116.7354730486,"alt":0.0,"systemTime":"1615802124085","satelliteTime":"0","distance":"13.07911","driveIn":true,"driveOut":false}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":3,"heading":0.0,"speed":4.629067,"lat":40.1992799876,"lon":116.735463914,"alt":0.0,"systemTime":"1615802124173","satelliteTime":"0","distance":"12.32186","driveIn":true,"driveOut":false}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":3,"heading":0.0,"speed":4.639268,"lat":40.1992803948,"lon":116.7354575887,"alt":0.0,"systemTime":"1615802124259","satelliteTime":"0","distance":"11.80592","driveIn":true,"driveOut":false}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":3,"heading":0.0,"speed":4.524597,"lat":40.1992803096,"lon":116.7354489189,"alt":0.0,"systemTime":"1615802124428","satelliteTime":"0","distance":"11.08557","driveIn":true,"driveOut":false}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":3,"heading":0.0,"speed":4.408017,"lat":40.1992801134,"lon":116.7354414139,"alt":0.0,"systemTime":"1615802124505","satelliteTime":"0","distance":"10.46056","driveIn":true,"driveOut":false}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":3,"heading":0.0,"speed":4.376606,"lat":40.1992803019,"lon":116.7354337727,"alt":0.0,"systemTime":"1615802124585","satelliteTime":"0","distance":"9.837222","driveIn":true,"driveOut":false}]
[{"uuid":"789","carId":"0","type":"1","color":"0","inOutFlag":3,"heading":0.0,"speed":4.208932,"lat":40.1992804239,"lon":116.735428194,"alt":0.0,"systemTime":"1615802124673","satelliteTime":"0","distance":"9.383926","driveIn":true,"driveOut":false}]

File diff suppressed because one or more lines are too long

View File

@@ -924,6 +924,8 @@ public class MockIntentHandler implements IntentHandler {
if ( cloudRoadData == null ) {
return false;
}
cloudRoadData.setWgslon( cloudRoadData.getLon() );
cloudRoadData.setWgslat( cloudRoadData.getLat() );
cloudRoadData.setUuid( "1_21" );
allList.add( cloudRoadData );
data.setAllList( allList );
@@ -931,7 +933,7 @@ public class MockIntentHandler implements IntentHandler {
final long start = System.currentTimeMillis();
SnapshotSetDataDrawer.getInstance().renderSnapshotData( data );
Log.i( "mock-timer-snapshot", "cost " + ( System.currentTimeMillis() - start ) + "ms" );
mLocationMockHandler.sendEmptyMessageDelayed( 21, 100L );
// mLocationMockHandler.sendEmptyMessageDelayed( 21, 100L );
return true;
}

View File

@@ -5,7 +5,6 @@ import android.graphics.Rect;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
import android.util.Log;
import com.mogo.commons.AbsMogoApplication;
import com.mogo.commons.debug.DebugConfig;
@@ -31,7 +30,6 @@ import com.mogo.module.common.entity.MarkerResponse;
import com.mogo.module.common.entity.MarkerShowEntity;
import com.mogo.module.common.utils.CloudPoiManager;
import com.mogo.module.service.MarkerServiceHandler;
import com.mogo.module.service.MogoServices;
import com.mogo.module.service.R;
import com.mogo.module.service.ServiceConst;
import com.mogo.module.service.network.RefreshCallback;
@@ -47,7 +45,6 @@ import com.mogo.utils.ThreadPoolService;
import com.mogo.utils.UiThreadHandler;
import com.mogo.utils.ViewUtils;
import com.mogo.utils.WorkThreadHandler;
import com.mogo.utils.logger.Logger;
import com.zhidao.carchattingprovider.ICallChatResponse;
import org.json.JSONArray;
@@ -149,7 +146,7 @@ public class MapMarkerManager implements IMogoMarkerClickListener,
DebugConfig.setStatus( DebugConfig.sDownloadSnapshot, true );
Message msg = mSnapshotHandler.obtainMessage();
msg.obj = mogoSnapshotSetData;
msg.sendToTarget();
// msg.sendToTarget();
}
} );
// adas 每隔一秒传递的数据