From 91bb7b8a153546114e67847fd77423b1a63f1669 Mon Sep 17 00:00:00 2001
From: yy1717 <fctom1215@outlook.com>
Date: 星期一, 22 二月 2021 13:33:28 +0800
Subject: [PATCH] Merge branch 'master' of https://gitee.com/endian11/DriveJudge

---
 app/src/main/java/safeluck/drive/evaluation/util/DataInit.kt                    |    8 
 app/src/main/java/safeluck/drive/evaluation/fragment/ArcGisMapFragmentMMPK.java |  601 +++++++++++++++
 app/src/main/java/safeluck/drive/evaluation/fragment/ArcGisMapFragment.java     |  595 ++++++++++++++
 app/src/main/java/safeluck/drive/evaluation/fragment/ArcGisMapFragmentVTPK.java |  590 ++++++++++++++
 app/src/main/java/safeluck/drive/evaluation/httpmodule/HttpGisCarRespBean.java  |  538 +++++++++++++
 app/src/main/res/layout/layout_arc_gis.xml                                      |   50 
 app/src/main/java/safeluck/drive/evaluation/httpmodule/HttpCarRespBean.java     |    4 
 7 files changed, 2,354 insertions(+), 32 deletions(-)

diff --git a/app/src/main/java/safeluck/drive/evaluation/fragment/ArcGisMapFragment.java b/app/src/main/java/safeluck/drive/evaluation/fragment/ArcGisMapFragment.java
index 4fda76a..feabb12 100644
--- a/app/src/main/java/safeluck/drive/evaluation/fragment/ArcGisMapFragment.java
+++ b/app/src/main/java/safeluck/drive/evaluation/fragment/ArcGisMapFragment.java
@@ -1,7 +1,12 @@
 package safeluck.drive.evaluation.fragment;
 
 import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
 import android.graphics.Color;
+import android.graphics.Paint;
+import android.graphics.Path;
+import android.graphics.PointF;
 import android.os.Bundle;
 
 import android.os.Environment;
@@ -11,6 +16,8 @@
 import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.MotionEvent;
+import android.view.SurfaceHolder;
+import android.view.SurfaceView;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.Toast;
@@ -26,21 +33,32 @@
 import com.esri.arcgisruntime.geometry.SpatialReference;
 import com.esri.arcgisruntime.layers.ArcGISMapImageLayer;
 import com.esri.arcgisruntime.layers.ArcGISTiledLayer;
+import com.esri.arcgisruntime.loadable.LoadStatus;
 import com.esri.arcgisruntime.mapping.ArcGISMap;
+import com.esri.arcgisruntime.mapping.MobileMapPackage;
 import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener;
 import com.esri.arcgisruntime.mapping.view.Graphic;
 import com.esri.arcgisruntime.mapping.view.GraphicsOverlay;
+import com.esri.arcgisruntime.mapping.view.MapScaleChangedEvent;
+import com.esri.arcgisruntime.mapping.view.MapScaleChangedListener;
 import com.esri.arcgisruntime.mapping.view.MapView;
 import com.esri.arcgisruntime.symbology.SimpleFillSymbol;
 import com.esri.arcgisruntime.symbology.SimpleLineSymbol;
 import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol;
 import com.google.gson.Gson;
 
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.io.File;
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
 
 import me.yokeyword.fragmentation.SupportFragment;
 import safeluck.drive.evaluation.Constant;
@@ -51,6 +69,7 @@
 import safeluck.drive.evaluation.bean.GisCarModel;
 import safeluck.drive.evaluation.bean.MapInfoHead;
 import safeluck.drive.evaluation.bean.RTKInfoBean;
+import safeluck.drive.evaluation.bean.RealTimeCarPos;
 import safeluck.drive.evaluation.cEventCenter.CEventCenter;
 import safeluck.drive.evaluation.cEventCenter.ICEventListener;
 import safeluck.drive.evaluation.util.CThreadPoolExecutor;
@@ -69,6 +88,7 @@
     private static final int ENTER = 1;//杩涘叆 绉戜簩鏌愪釜椤圭洰鍦板浘
 
     private LinkedBlockingQueue queue = new LinkedBlockingQueue(100);
+    private LinkedBlockingQueue queue1 = new LinkedBlockingQueue(100);
     private ExecutorService consumer = Executors.newSingleThreadExecutor();
     private ExecutorService producer = Executors.newSingleThreadExecutor();
     SimpleLineSymbol lineSymbolGls = new SimpleLineSymbol(SimpleLineSymbol.Style.SOLID, Color.BLACK, 0.5f);
@@ -102,18 +122,25 @@
                 ExamStatus examStatus = (ExamStatus)obj;
                 if (examStatus.getMap_id()>-1){
                     if (examStatus.getEnter()==ENTER){
-                        MyLog.i(TAG,String.format("杩涘叆[%d] map",examStatus.getMap_id()));
                         double scale = mMapView.getMapScale();
-                        mMapView.setViewpointScaleAsync(scale * 0.2*0.2);
+                        MyLog.i(TAG,String.format("杩涘叆[%d] map,scale=%f",examStatus.getMap_id(),scale));
+                        mMapView.setViewpointScaleAsync(scale * 0.2);
+
+
+
                     }else{
-                        MyLog.i(TAG,String.format("閫�鍑篬%d] map",examStatus.getMap_id()));
                         double scale = mMapView.getMapScale();
-                        mMapView.setViewpointScaleAsync(scale * 5*5);
+                        MyLog.i(TAG,String.format("閫�鍑篬%d] map,scale=%f",examStatus.getMap_id(),scale));
+
+                        mMapView.setViewpointScaleAsync(scale * 5);
+
                     }
                 }
             }
         }
     };
+    private SurfaceView mSurfaceView;
+    private SurfaceHolder holder;
 
     public static SupportFragment newInstance(String s){
         ArcGisMapFragment jiaXiaoFragment = new ArcGisMapFragment();
@@ -140,13 +167,19 @@
                     List<safeluck.drive.evaluation.bean.Point> newCarPoints = (List<safeluck.drive.evaluation.bean.Point>) msg.obj;
                     Log.i(TAG,"handle message newcarPoints.size="+newCarPoints.size());
                     drawGlses(newCarPoints,gisCarModel);
-
+                    drawRightPart();
                     break;
             }
         }
     };
 
     PointCollection mPointCollection = new PointCollection(SpatialReference.create(4544));
+    private Bitmap bmp2 = null;
+    private Paint paint = new Paint();
+
+    private Canvas canvas3 = null;
+    private int screen_width = 0, screen_height = 0,display_width=0;
+    private ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
     @Nullable
     @Override
     public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
@@ -154,7 +187,67 @@
 
         View view = inflater.inflate(R.layout.layout_arc_gis,container,false);
         mMapView = view.findViewById(R.id.mapView);
+        mMapView.addMapScaleChangedListener(new MapScaleChangedListener() {
+            @Override
+            public void mapScaleChanged(MapScaleChangedEvent mapScaleChangedEvent) {
+                Log.i(TAG,"mapscaleChangelistenre");
+            }
+        });
         view.findViewById(R.id.btn_change_map).setOnClickListener(this);
+        mSurfaceView = view.findViewById(R.id.surfaceview_arcgis);
+
+        holder = mSurfaceView.getHolder();
+        display_width = getResources().getDisplayMetrics().widthPixels;
+        holder.addCallback(new SurfaceHolder.Callback() {
+            @Override
+            public void surfaceCreated(SurfaceHolder surfaceHolder) {
+                Canvas canvas = surfaceHolder.lockCanvas();
+
+                if (canvas != null) {
+//                    Log.d(TAG, "W = " + canvas.getWidth() + " H = " + canvas.getHeight());
+                    screen_width = canvas.getWidth();
+                    screen_height = canvas.getHeight();
+                    Log.d(TAG, "W = " + screen_width+ " H = " + screen_height );
+                    surfaceHolder.unlockCanvasAndPost(canvas);
+
+                    bmp2 = Bitmap.createBitmap(screen_width,  screen_height, Bitmap.Config.ARGB_8888);
+                    canvas3 = new Canvas(bmp2);
+                    canvas3.drawColor(Color.WHITE);
+
+                    Log.d(TAG, "displaywidth W = " + display_width + "BMP H = " + bmp2.getHeight());
+
+
+                    paint.setTextSize(30);
+                    paint.setColor(Color.BLACK);
+                    paint.setStrokeWidth(1.5f);
+                    paint.setAntiAlias(true);
+                    paint.setStyle(Paint.Style.STROKE);
+
+                    holder.lockCanvas();
+
+
+                    if (canvas != null){
+
+
+                        canvas.drawBitmap(bmp2,0, 0, paint);
+                        holder.unlockCanvasAndPost(canvas);
+                    }
+                }
+            }
+
+            @Override
+            public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {
+
+            }
+
+            @Override
+            public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
+
+            }
+        });
+
+
+
         Log.i(TAG,String.format("褰撳墠绾跨▼鍙�%d,json=%s",Thread.currentThread().getId(),"onCreateView"));
         url = getArguments().getString("arcgis_url");
         CThreadPoolExecutor.runInBackground(()->{
@@ -164,11 +257,35 @@
 
         });
         consumer.execute(new CalRunnable());
+        scheduledExecutorService.scheduleAtFixedRate(new Runnable() {
+            @Override
+            public void run() {
+//                Log.i(TAG,"1s鍒�");
+                if (lastcount==count){
+//                    Log.i(TAG,"宸茬粡娌″湪鍙戞秷鎭簡");
+                    leftDistance = 0.0;
+                    rightDistance = 0.0;
+                }
+                lastcount = count;
+            }
+        },1000,1000, TimeUnit.MILLISECONDS);
 
         setupMap();
 
 
         addTrailheadsLayer();
+//        url = Environment.getExternalStorageDirectory().getAbsolutePath()+ File.separator+_mActivity.getPackageName()+"/shoufei0220.mmpk";
+//        Log.i(TAG,"url ========="+url);
+//        final MobileMapPackage mobileMapPackage = new MobileMapPackage(url);
+//        mobileMapPackage.loadAsync();
+//        mobileMapPackage.addDoneLoadingListener(()->{
+//            LoadStatus loadStatus = mobileMapPackage.getLoadStatus();
+//            if (loadStatus==LoadStatus.LOADED){
+//                List<ArcGISMap> mainArcGisMapL = mobileMapPackage.getMaps();
+//                ArcGISMap mainArcGismapMMPK = mainArcGisMapL.get(0);
+//                mMapView.setMap(mainArcGismapMMPK);
+//            }
+//        });
         return view;
     }
 
@@ -199,22 +316,126 @@
                 break;
         }
     }
-
+    private String osdHeading = null;
+    private String osdRtkSpeed = null;
+    private  List<Integer> body = new ArrayList<>();
+    private  List<Integer> tire = new ArrayList<>();
+    int line = 0;
+    double car[][] = {{8.278, 1.467}, {7.2780000000000009, 1.467}, {7.2780000000000009, -1.533}, {8.278, -1.533}
+            , {9.278, -1.5330000000000004}, {9.277999999999999, 1.467000000000001}};
     class CalRunnable implements Runnable{
-
+        private String json;
+        private int cmd;
         @Override
         public void run() {
             while (flag){
 
+                MessageRemoteService messageRemoteService = (MessageRemoteService) queue1.peek();
+                if (messageRemoteService == null){
+                    try {
+                        Thread.sleep(100);
+                    } catch (InterruptedException e) {
+                        e.printStackTrace();
+                    }
+                }
+                messageRemoteService = (MessageRemoteService) queue1.poll();
+                if (messageRemoteService != null) {
+                    this.cmd = messageRemoteService.msgCode;
+                    this.json = messageRemoteService.json;
+                    MyLog.i(TAG, json);
 
+
+                    RealTimeCarPos timeCarPos = gson.fromJson((String) json, RealTimeCarPos.class);
+                    List<Double> points = timeCarPos.getPoint();
+                    switch (timeCarPos.getMove()) {
+                        case 0:
+                            osdMoveDirect = "鍋滆溅";
+                            break;
+                        case 1:
+                            osdMoveDirect = "鍓嶈繘";
+                            break;
+                        case -1:
+                            osdMoveDirect = "鍚庨��";
+                            break;
+                    }
+                    osdHeading = "鏂瑰悜瑙�" + String.valueOf(timeCarPos.getHeading());
+
+                    BigDecimal bd = new BigDecimal(timeCarPos.getSpeed());
+                    bd = bd.setScale(3, BigDecimal.ROUND_HALF_UP);
+                    osdRtkSpeed = "閫熷害:" + bd;
+
+
+                    line = 0;
+
+
+
+
+                    car = new double[points.size() / 2][2];
+
+                    for (int i = 0; i < points.size(); i++) {
+                        if ((i % 2) == 0) {
+                            car[line][0] = points.get(i);
+                        } else {
+                            double value = points.get(i);
+                            car[line][1] = value;
+                            line++;
+                        }
+
+                    }
+
+                    List<Double> mainAnt = timeCarPos.getMain_ant();
+                    List<Integer> tire1 = timeCarPos.getLeft_front_tire();
+                    List<Integer> tire2 = timeCarPos.getRight_front_tire();
+                    List<Integer> tire3 = timeCarPos.getLeft_rear_tire();
+                    List<Integer> tire4 = timeCarPos.getRight_rear_tire();
+
+                    body = timeCarPos.getBody();
+
+                    tire = new ArrayList<>();
+
+                    double yaw = timeCarPos.getHeading();
+
+                    tire.add(tire1.get(0));
+                    tire.add(tire2.get(0));
+                    tire.add(tire3.get(0));
+                    tire.add(tire4.get(0));
+
+
+                }
+
+
+
+
+
+
+
+
+
+
+
+//                rtkInfoBean = (RTKInfoBean)queue.peek();
+//                if (rtkInfoBean ==null){
+//                    try {
+//                        Thread.sleep(100);
+//                    } catch (InterruptedException e) {
+//                        e.printStackTrace();
+//                    }
+//                }
                 rtkInfoBean = (RTKInfoBean)queue.poll();
                 if (rtkInfoBean != null){
                     Log.i(TAG,String.format("鍙栧嚭涓�涓紝queue.size=%d,rtkinfo=%s,绾跨▼鍙�=%d",queue.size(),rtkInfoBean.toString(),Thread.currentThread().getId()));
                     yaw = rtkInfoBean.getHeading();
                     startX = rtkInfoBean.getCoord_y();
                     startY = rtkInfoBean.getCoord_x();
+                    osdHeading="鏂瑰悜瑙�"+String.valueOf(rtkInfoBean.getHeading());
 
 
+
+
+
+                    if (mMapView != null){
+                        mMapView.setViewpointRotationAsync(rtkInfoBean.getHeading());
+                    }
                 addGraphicLayer(yaw,startX,startY);
 
 
@@ -225,14 +446,277 @@
 
         }
     }
+    float base_x = 300;
+    float base_y = 20;
+    long scale_x,scale_y;
+    double min_x=0.0,min_y = 0;
+    private String osdMoveDirect = null;
+    private void drawRightPart() {
+        paint.setStyle(Paint.Style.FILL_AND_STROKE);
+
+        canvas3.drawColor(Color.YELLOW);
+
+
+
+if (gisCarModel != null){
+    PointF mainPoint = new PointF(startX, startY);
+
+
+
+    for (int i = 0; i < car.length; i++) {
+        PointF oldPoint = new PointF(car[i][0], car[i][1]);
+        PointF newPoint = rotatePoint(oldPoint, mainPoint, yaw );
+        car[i][0] = newPoint.getX();
+        car[i][1] = newPoint.getY();
+
+        car[i][0] = car[i][0] - mainPoint.getX();
+        car[i][1] = car[i][1] - mainPoint.getY();
+        car[i][1] = -car[i][1];
+    }
+
+}
+
+
+
+        // 鎸囧崡閽� ++++++++++++++++++++++++++++++++++++++++++++++++++++
+        float compassOX = bmp2.getWidth() - 60, compassOY = 60;
+        Log.i(TAG,"draw widht="+(bmp2.getWidth() - 60));
+        float compass1X = compassOX + 7, compass1Y = compassOY;
+        float compass2X = compassOX, compass2Y = compassOY + 30;
+        float compass3X = compassOX - 7, compass3Y = compassOY;
+
+        float compass4X = compassOX + 7, compass4Y = compassOY;
+        float compass5X = compassOX, compass5Y = compassOY - 30;
+        float compass6X = compassOX - 7, compass6Y = compassOY;
+
+        PointF compassO = new PointF(compassOX, compassOY);
+        PointF compass1 = new PointF(compass1X, compass1Y);
+        PointF compass2 = new PointF(compass2X, compass2Y);
+        PointF compass3 = new PointF(compass3X, compass3Y);
+        PointF compass4 = new PointF(compass4X, compass4Y);
+        PointF compass5 = new PointF(compass5X, compass5Y);
+        PointF compass6 = new PointF(compass6X, compass6Y);
+
+        compass1 = rotatePoint(compass1, compassO, yaw);
+        compass2 = rotatePoint(compass2, compassO, yaw);
+        compass3 = rotatePoint(compass3, compassO, yaw);
+        compass4 = rotatePoint(compass4, compassO, yaw);
+        compass5 = rotatePoint(compass5, compassO, yaw);
+        compass6 = rotatePoint(compass6, compassO, yaw);
+
+        paint.setStyle(Paint.Style.STROKE);
+        paint.setColor(Color.RED);
+
+        canvas3.drawCircle((float)compassO.getX(), (float)compassO.getY(), 20, paint);
+        canvas3.drawCircle((float)compassO.getX(), (float)compassO.getY(), 40, paint);
+
+        paint.setStyle(Paint.Style.FILL_AND_STROKE);
+        paint.setColor(Color.BLUE);
+        Path compassN = new Path();
+
+        compassN.moveTo((float)compassO.getX(), (float)compassO.getY());
+        compassN.lineTo((float)compass1.getX(), (float)compass1.getY());
+        compassN.lineTo((float)compass2.getX(), (float)compass2.getY());
+        compassN.lineTo((float)compass3.getX(), (float)compass3.getY());
+        compassN.close();
+        canvas3.drawPath(compassN, paint);
+
+        paint.setColor(Color.RED);
+        Path compassS = new Path();
+        compassS.moveTo((float)compassO.getX(), (float)compassO.getY());
+        compassS.lineTo((float)compass4.getX(), (float)compass4.getY());
+        compassS.lineTo((float)compass5.getX(), (float)compass5.getY());
+        compassS.lineTo((float)compass6.getX(), (float)compass6.getY());
+        compassS.close();
+        canvas3.drawPath(compassS, paint);
+        // 鎸囧崡閽� -------------------------------------------
+
+
+        if (osdHeading != null) {
+            Path pathText = new Path();
+            pathText.moveTo(10, 30);
+            pathText.lineTo(700, 30);
+            canvas3.drawTextOnPath(osdHeading, pathText, 0, 0, paint);//閫嗘椂閽堢敓鎴�
+        }
+
+
+        if (osdRtkSpeed != null) {
+            Path pathText = new Path();
+            pathText.moveTo(10, 70);
+            pathText.lineTo(700, 70);
+            canvas3.drawTextOnPath(osdRtkSpeed, pathText, 0, 0, paint);//閫嗘椂閽堢敓鎴�
+        }
 
 
 
 
+        base_x = 170;
+        base_y = 350;
+
+        scale_x=scale_y = 27;
+
+        paint.setStyle(Paint.Style.FILL_AND_STROKE);
+        paint.setColor(Color.BLUE);
+//        canvas2.drawCircle((float) (base_x + (mainAnt.get(0) - min_x) * scale_x), (float) (base_y + (mainAnt.get(1) - min_y) * scale_y), 2, paint);
+        canvas3.drawCircle((float) base_x, (float) base_y, 2, paint);
+
+        if (gisCarModel != null){
+            paint.setColor(Color.RED);
+            Log.i(TAG,String.format("scalex=%d,scaley=%d,car[0][0]=%f,base_x=%f,base_y=%f",scale_x,scale_y,car[tire.get(0)][0],base_x,base_y));
+            canvas3.drawCircle((float) (base_x + (car[tire.get(0)][0]) * scale_x), (float) (base_y + (car[tire.get(0)][1]) * scale_y), 2.5f, paint);
+            canvas3.drawCircle((float) (base_x + (car[tire.get(1)][0]) * scale_x), (float) (base_y + (car[tire.get(1)][1]) * scale_y), 2.5f, paint);
+            canvas3.drawCircle((float) (base_x + (car[tire.get(2)][0]) * scale_x), (float) (base_y + (car[tire.get(2)][1]) * scale_y), 2.5f, paint);
+            canvas3.drawCircle((float) (base_x + (car[tire.get(3)][0]) * scale_x), (float) (base_y + (car[tire.get(3)][1]) * scale_y), 2.5f, paint);
 
 
 
+            Path pathCanvs3 = new Path();
+            pathCanvs3.moveTo((float) (base_x + (car[body.get(0)][0] - min_x) * scale_x), (float) (base_y + (car[body.get(0)][1] - min_y) * scale_y));
+            for (int i = 1; i < body.size(); i++){
+//                    Log.d(TAG, "for 寰幆 DrawMap to X = " + (float) (base_x + (car[body.get(i)][0] - min_x) * scale_x)+ " Y = " + (float) (base_y + (car[body.get(i)][1] - min_y) * scale_y));
+                Log.i(TAG,String.format("car[%d][0]=%f,to X =%f,car[%d][1]=%f,to Y=%f",i,car[body.get(i)][0],
+                        (float) (base_x + (car[body.get(i)][0] - min_x) * scale_x),i,car[body.get(i)][1],(float) (base_y + (car[body.get(i)][1] - min_y) * scale_y)));
+                pathCanvs3.lineTo((float) (base_x + (car[body.get(i)][0] - min_x) * scale_x), (float) (base_y + (car[body.get(i)][1] - min_y) * scale_y));
+            }
+            paint.setStyle(Paint.Style.STROKE);
+            paint.setColor(Color.BLACK);
+            pathCanvs3.close();
+            canvas3.drawPath(pathCanvs3,paint);
+        }
 
+
+        Paint mPaint = new Paint();
+        mPaint.setTextSize(20);
+        mPaint.setStyle(Paint.Style.FILL_AND_STROKE);
+        osdMoveDirect="9.4345";
+        if (osdMoveDirect != null) {
+            Path pathText = new Path();
+            pathText.moveTo(base_x-110, base_y-35);
+            pathText.lineTo(base_x-20, base_y-35);
+            if (leftDistance == 0.0){
+
+                canvas3.drawTextOnPath("...", pathText, 0, 0, mPaint);//閫嗘椂閽堢敓鎴�
+            }else{
+
+                canvas3.drawTextOnPath(String.valueOf(leftDistance), pathText, 0, 0, mPaint);//閫嗘椂閽堢敓鎴�
+            }
+        }
+        if (osdMoveDirect != null) {
+            Path pathText = new Path();
+            pathText.moveTo(base_x+30, base_y-35);
+            pathText.lineTo(base_x+110, base_y-35);
+            if (rightDistance == 0.0){
+
+                canvas3.drawTextOnPath("...", pathText, 0, 0, mPaint);//閫嗘椂閽堢敓鎴�
+            }else{
+                canvas3.drawTextOnPath(String.valueOf(rightDistance), pathText, 0, 0, mPaint);//閫嗘椂閽堢敓鎴�
+            }
+
+        }
+        paint.setColor(Color.RED);
+        canvas3.drawLine(base_x-120,base_y-200,base_x-120,base_y+200,paint);
+        canvas3.drawLine(base_x+120,base_y-200,base_x+120,base_y+200,paint);
+
+        DrawArrows(canvas3,Color.GREEN,15f,base_x-20,base_y-30,base_x-120,base_y-30);//宸﹁竟绠ご锛堝乏杈硅窛
+        DrawArrows(canvas3,Color.GREEN,15f,base_x+20,base_y-30,base_x+120,base_y-30);//鍙宠竟绠ご锛堣竟璺�
+
+
+        // 鎻愪氦鐢诲竷
+        Canvas canvas = holder.lockCanvas();
+        if (canvas != null){
+
+
+            canvas.drawBitmap(bmp2,0, 0, paint);
+            holder.unlockCanvasAndPost(canvas);
+        }
+    }
+    void DrawArrows(Canvas canvas, int color, float arrowSize, float x1,
+                    float y1, float x2, float y2) {
+        paint.setAntiAlias(true);
+        paint.setStyle(Paint.Style.STROKE);
+        paint.setColor(color);
+
+        // 鐢荤洿绾�
+        canvas.drawLine(x1, y1, x2, y2, paint);
+
+        // 绠ご涓殑绗竴鏉$嚎鐨勮捣鐐�
+        int x3 = 0;
+        int y3 = 0;
+
+        // 绠ご涓殑绗簩鏉$嚎鐨勮捣鐐�
+        int x4 = 0;
+        int y4 = 0;
+
+        double awrad = Math.atan(3.5 / 8);
+        double[] arrXY_1 = rotateVec(x2 - x1, y2 - y1, awrad, arrowSize);
+        double[] arrXY_2 = rotateVec(x2 - x1, y2 - y1, -awrad, arrowSize);
+
+        // 绗竴绔偣
+        Double X3 = Double.valueOf(x2 - arrXY_1[0]);
+        x3 = X3.intValue();
+        Double Y3 = Double.valueOf(y2 - arrXY_1[1]);
+        y3 = Y3.intValue();
+
+        // 绗簩绔偣
+        Double X4 = Double.valueOf(x2 - arrXY_2[0]);
+        x4 = X4.intValue();
+        Double Y4 = Double.valueOf(y2 - arrXY_2[1]);
+        y4 = Y4.intValue();
+
+        Path arrowsPath = new Path();
+        arrowsPath.moveTo(x2, y2);
+        arrowsPath.lineTo(x3, y3);
+        arrowsPath.lineTo(x4, y4);
+        arrowsPath.close();
+        canvas.drawLine(x3, y3, x2, y2, paint);
+        canvas.drawLine(x4, y4, x2, y2, paint);
+    }
+    private double[] rotateVec(float px, float py, double ang, double arrowSize) {
+        double mathstr[] = new double[2];
+        double vx = px * Math.cos(ang) - py * Math.sin(ang);
+        double vy = px * Math.sin(ang) + py * Math.cos(ang);
+        double d = Math.sqrt(vx * vx + vy * vy);
+        vx = vx / d * arrowSize;
+        vy = vy / d * arrowSize;
+        mathstr[0] = vx;
+        mathstr[1] = vy;
+        return mathstr;
+    }
+
+    public PointF rotatePoint(PointF oldPoint, PointF centre, double degree) {
+        PointF newPoint = new PointF(0, 0);
+
+        newPoint.setX( (oldPoint.getX()-centre.getX())*Math.cos(Math.toRadians(degree)) - (oldPoint.getY()-centre.getY())*Math.sin(Math.toRadians(degree)) + centre.getX() );
+        newPoint.setY ( (oldPoint.getX()-centre.getX())*Math.sin(Math.toRadians(degree)) + (oldPoint.getY()-centre.getY())*Math.cos(Math.toRadians(degree)) + centre.getY() );
+
+        return newPoint;
+    }
+
+    class PointF {
+        double x;
+        double y;
+
+        public PointF(double x, double y) {
+            this.x = x;
+            this.y = y;
+        }
+
+        double getX() {
+            return x;
+        }
+
+        double getY() {
+            return y;
+        }
+
+        void setX(double x) {
+            this.x = x;
+        }
+
+        void setY(double y) {
+            this.y = y;
+        }
+    }
     private void setupMap() {
         if (mMapView != null) {
 
@@ -249,7 +733,7 @@
             // create an empty map instance
             ArcGISMap map = new ArcGISMap();
             Log.i(TAG,String.format("map.getMiniScale=%f",map.getMinScale()));
-            map.setMinScale(1000.0);
+            map.setMinScale(400.0);
             // add map image layer as operational layer
             map.getOperationalLayers().add(mapImageLayer);
             mMapView.setMap(map);
@@ -313,8 +797,9 @@
     }
     private void readGisCar() {
 
-        String carFilePath = Environment.getExternalStorageDirectory().getAbsolutePath()+"/"+_mActivity.getPackageName()+"/lianfang_giscar.json";
+        String carFilePath = Environment.getExternalStorageDirectory().getAbsolutePath()+"/"+_mActivity.getPackageName()+"/gisvehiclemodel.json";
         if (TextUtils.isEmpty(carFilePath)){
+            Toast.makeText(_mActivity, "杞﹁締妯″瀷鏂囦欢涓嶅瓨鍦�", Toast.LENGTH_SHORT).show();
             MyLog.i (TAG, "GISCar杞﹁締妯″瀷鏂囦欢涓嶅瓨鍦�");
             return ;
         }
@@ -322,6 +807,42 @@
         if (fileContentBytes !=null&&fileContentBytes.length>0){
             String buffer= new String(fileContentBytes);
             gisCarModel = new Gson().fromJson(buffer, GisCarModel.class);
+
+
+
+//            line = 0;
+//
+//
+//            List<Double> points = gisCarModel.getPoint();
+//
+//            car = new double[points.size() / 2][2];
+//
+//            for (int i = 0; i < points.size(); i++) {
+//                if ((i % 2) == 0) {
+//                    car[line][0] = points.get(i);
+//                } else {
+//                    double value = points.get(i);
+//                    car[line][1] = value;
+//                    line++;
+//                }
+//
+//            }
+//
+//
+//            List<Integer> tire1 = gisCarModel.getLeft_front_tire();
+//            List<Integer> tire2 = gisCarModel.getRight_front_tire();
+//            List<Integer> tire3 = gisCarModel.getLeft_rear_tire();
+//            List<Integer> tire4 = gisCarModel.getRight_rear_tire();
+//
+//            body = gisCarModel.getBody();
+//
+//            tire = new ArrayList<>();
+//
+//
+//            tire.add(tire1.get(0));
+//            tire.add(tire2.get(0));
+//            tire.add(tire3.get(0));
+//            tire.add(tire4.get(0));
         }else{
             return;
         }
@@ -345,6 +866,7 @@
         if(gisCarModel== null){
             return;
         }
+
         long beginTime = System.currentTimeMillis();
 
 
@@ -566,6 +1088,8 @@
         queue.clear();
         CEventCenter.onBindEvent(false,icEventListener, Constant.BIND_RTK_INFO_MAP);
         CEventCenter.onBindEvent(false,icEventListener1, Constant.BIND_EXAM_STATUS_TOPIC);
+        CEventCenter.onBindEvent(false, speedListener, Constant.BIND_RTK_SPEED_TOPIC);
+        CEventCenter.onBindEvent(false, icEventListenerCar, Constant.REAL_TIME_POS_CAR_TOPIC);
 
 
     }
@@ -575,6 +1099,59 @@
         super.onAttach(context);
         CEventCenter.onBindEvent(true,icEventListener,Constant.BIND_RTK_INFO_MAP);
         CEventCenter.onBindEvent(true,icEventListener1,Constant.BIND_EXAM_STATUS_TOPIC);
+        CEventCenter.onBindEvent(true, speedListener, Constant.BIND_RTK_SPEED_TOPIC);
+        CEventCenter.onBindEvent(true, icEventListenerCar, Constant.REAL_TIME_POS_CAR_TOPIC);
     }
 
+    private long count =0;
+    private long lastcount =0;
+    private double gpsSpeed = 0;
+    private double leftDistance = 0;
+    private double rightDistance = 0;
+    private ICEventListener speedListener = new ICEventListener() {
+        @Override
+        public void onCEvent(String topic, int msgCode, int resultCode, Object obj) {
+            if (msgCode == Constant.RTK_INFO){
+                gpsSpeed = (double)obj;
+            }
+            if (msgCode == Constant.LEFT_RIGHT_DISTANCE){
+                String str = (String)obj;
+                count++;
+
+                try {
+                    JSONObject jsonObject = new JSONObject(str);
+                    leftDistance = Utils.getdouble(jsonObject.getDouble("left"),3);
+                    rightDistance = Utils.getdouble(jsonObject.getDouble("right"),3);
+
+                } catch (JSONException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+    };
+    class MessageRemoteService{
+        public int msgCode;
+        public String json;
+
+        public MessageRemoteService(int msgCode, Object obj) {
+            this.json = (String) obj;
+            this.msgCode = msgCode;
+        }
+    }
+
+    private ICEventListener icEventListenerCar = new ICEventListener() {
+        @Override
+        public void onCEvent(String topic, final int msgCode, int resultCode, final Object obj) {
+
+
+            producer.execute(new Runnable() {
+                @Override
+                public void run() {
+                    queue1.offer(new MessageRemoteService(msgCode,obj));
+                }
+            });
+
+
+        }
+    };
 }
diff --git a/app/src/main/java/safeluck/drive/evaluation/fragment/ArcGisMapFragmentMMPK.java b/app/src/main/java/safeluck/drive/evaluation/fragment/ArcGisMapFragmentMMPK.java
new file mode 100644
index 0000000..29744f1
--- /dev/null
+++ b/app/src/main/java/safeluck/drive/evaluation/fragment/ArcGisMapFragmentMMPK.java
@@ -0,0 +1,601 @@
+package safeluck.drive.evaluation.fragment;
+
+import android.content.Context;
+import android.graphics.Color;
+import android.os.Bundle;
+import android.os.Environment;
+import android.os.Handler;
+import android.os.Message;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Toast;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import com.anyun.basecommonlib.MyLog;
+import com.esri.arcgisruntime.geometry.Point;
+import com.esri.arcgisruntime.geometry.PointCollection;
+import com.esri.arcgisruntime.geometry.Polygon;
+import com.esri.arcgisruntime.geometry.Polyline;
+import com.esri.arcgisruntime.geometry.SpatialReference;
+import com.esri.arcgisruntime.layers.ArcGISMapImageLayer;
+import com.esri.arcgisruntime.layers.ArcGISVectorTiledLayer;
+import com.esri.arcgisruntime.loadable.LoadStatus;
+import com.esri.arcgisruntime.mapping.ArcGISMap;
+import com.esri.arcgisruntime.mapping.Basemap;
+import com.esri.arcgisruntime.mapping.MobileMapPackage;
+import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener;
+import com.esri.arcgisruntime.mapping.view.Graphic;
+import com.esri.arcgisruntime.mapping.view.GraphicsOverlay;
+import com.esri.arcgisruntime.mapping.view.MapView;
+import com.esri.arcgisruntime.symbology.SimpleFillSymbol;
+import com.esri.arcgisruntime.symbology.SimpleLineSymbol;
+import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol;
+import com.google.gson.Gson;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.LinkedBlockingQueue;
+
+import me.yokeyword.fragmentation.SupportFragment;
+import safeluck.drive.evaluation.Constant;
+import safeluck.drive.evaluation.DB.exam_status.ExamStatus;
+import safeluck.drive.evaluation.R;
+import safeluck.drive.evaluation.bean.ExamPlatformData;
+import safeluck.drive.evaluation.bean.GisCarModel;
+import safeluck.drive.evaluation.bean.RTKInfoBean;
+import safeluck.drive.evaluation.cEventCenter.CEventCenter;
+import safeluck.drive.evaluation.cEventCenter.ICEventListener;
+import safeluck.drive.evaluation.util.CThreadPoolExecutor;
+import safeluck.drive.evaluation.util.FileUtil;
+import safeluck.drive.evaluation.util.Utils;
+
+/**椹炬牎淇℃伅UI
+ * MyApplication2
+ * Created by lzw on 2019/3/20. 11:22:39
+ * 閭锛�632393724@qq.com
+ * All Rights Saved! Chongqing AnYun Tech co. LTD
+ */
+public class ArcGisMapFragmentMMPK extends SupportFragment implements View.OnClickListener {
+
+    private static final String TAG = ArcGisMapFragmentMMPK.class.getSimpleName();
+    private static final int ENTER = 1;//杩涘叆 绉戜簩鏌愪釜椤圭洰鍦板浘
+
+    private LinkedBlockingQueue queue = new LinkedBlockingQueue(100);
+    private ExecutorService consumer = Executors.newSingleThreadExecutor();
+    private ExecutorService producer = Executors.newSingleThreadExecutor();
+    SimpleLineSymbol lineSymbolGls = new SimpleLineSymbol(SimpleLineSymbol.Style.SOLID, Color.BLACK, 0.5f);
+
+
+    PointCollection points = new PointCollection(SpatialReference.create(4544));
+    private Gson gson = new Gson();
+    private ICEventListener icEventListener = new ICEventListener() {
+        @Override
+        public void onCEvent(String topic, int msgCode, int resultCode, Object obj) {
+
+
+
+
+                producer.execute(()->{
+                    String json = (String)obj;
+                    Log.i(TAG,String.format("褰撳墠绾跨▼鍙�%d,json=%s",Thread.currentThread().getId(),json));
+                    RTKInfoBean rtkInfoBean = gson.fromJson(json,RTKInfoBean.class);
+                    queue.offer(rtkInfoBean);
+                });
+
+//                MyLog.i(TAG,"澶勭悊瀹�11.鏃堕棿="+Utils.formatTimeYYMMDDHHmmSSSSS(System.currentTimeMillis()));
+
+
+        }
+    };
+    private ICEventListener icEventListener1 = new ICEventListener() {
+        @Override
+        public void onCEvent(String topic, int msgCode, int resultCode, Object obj) {
+            if (msgCode==13){
+                ExamStatus examStatus = (ExamStatus)obj;
+                if (examStatus.getMap_id()>-1){
+                    if (examStatus.getEnter()==ENTER){
+                        MyLog.i(TAG,String.format("杩涘叆[%d] map",examStatus.getMap_id()));
+                        double scale = mMapView.getMapScale();
+                        mMapView.setViewpointScaleAsync(scale * 0.2*0.2);
+                    }else{
+                        MyLog.i(TAG,String.format("閫�鍑篬%d] map",examStatus.getMap_id()));
+                        double scale = mMapView.getMapScale();
+                        mMapView.setViewpointScaleAsync(scale * 5*5);
+                    }
+                }
+            }
+        }
+    };
+
+    public static SupportFragment newInstance(String s){
+        ArcGisMapFragmentMMPK jiaXiaoFragment = new ArcGisMapFragmentMMPK();
+        Bundle bundle = new Bundle();
+        bundle.putString("arcgis_url",s);
+        jiaXiaoFragment.setArguments(bundle);
+        return jiaXiaoFragment;
+    }
+
+
+    private MapView mMapView ;
+    private static final int MSG_CAR = 100;
+    double yaw = 0;
+
+    GraphicsOverlay mGraphicsOverlay;
+    GraphicsOverlay mGraphicsOverlay_body;
+    private double startY = 428882,startX = 3291858;
+    private Handler mHandler = new Handler(){
+        @Override
+        public void handleMessage(Message msg) {
+            switch (msg.what){
+                case MSG_CAR:
+
+                    List<safeluck.drive.evaluation.bean.Point> newCarPoints = (List<safeluck.drive.evaluation.bean.Point>) msg.obj;
+                    Log.i(TAG,"handle message newcarPoints.size="+newCarPoints.size());
+                    drawGlses(newCarPoints,gisCarModel);
+
+                    break;
+            }
+        }
+    };
+
+    PointCollection mPointCollection = new PointCollection(SpatialReference.create(4544));
+    @Nullable
+    @Override
+    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+
+
+        View view = inflater.inflate(R.layout.layout_arc_gis,container,false);
+        mMapView = view.findViewById(R.id.mapView);
+        view.findViewById(R.id.btn_change_map).setOnClickListener(this);
+        Log.i(TAG,String.format("褰撳墠绾跨▼鍙�%d,json=%s",Thread.currentThread().getId(),"onCreateView"));
+        url = getArguments().getString("arcgis_url");
+        CThreadPoolExecutor.runInBackground(()->{
+
+            readGisCar();
+
+
+        });
+        consumer.execute(new CalRunnable());
+
+        setupMap();
+
+
+//        addTrailheadsLayer();
+
+
+
+        url = Environment.getExternalStorageDirectory().getAbsolutePath()+ File.separator+_mActivity.getPackageName()+"/shoufei0220.mmpk";
+        Log.i(TAG,"url ========="+url);
+        final MobileMapPackage mobileMapPackage = new MobileMapPackage(url);
+        mobileMapPackage.loadAsync();
+        mobileMapPackage.addDoneLoadingListener(()->{
+            LoadStatus loadStatus = mobileMapPackage.getLoadStatus();
+            if (loadStatus==LoadStatus.LOADED){
+                List<ArcGISMap> mainArcGisMapL = mobileMapPackage.getMaps();
+                ArcGISMap mainArcGismapMMPK = mainArcGisMapL.get(0);
+                mMapView.setMap(mainArcGismapMMPK);
+            }
+        });
+
+        return view;
+    }
+
+
+
+    RTKInfoBean rtkInfoBean;
+    boolean flag = true;
+
+    @Override
+    public void onClick(View v) {
+        switch (v.getId()){
+            case R.id.btn_change_map:
+                if (ExamPlatformData.getInstance().getExamType()>ExamPlatformData.EXAM_TYPE_ChangKAO){
+                    RoadDriveMapFragmentab jiaXiaoFragment = findFragment(RoadDriveMapFragmentab.class);
+                    if (jiaXiaoFragment == null) {
+                        jiaXiaoFragment = (RoadDriveMapFragmentab) RoadDriveMapFragmentab.newInstance();
+                    }
+                    startWithPop(jiaXiaoFragment);
+                }else{
+                    MapFragment jiaXiaoFragment = findFragment(MapFragment.class);
+                    if (jiaXiaoFragment == null) {
+                        jiaXiaoFragment = (MapFragment) MapFragment.newInstance();
+                    }
+                    startWithPop(jiaXiaoFragment);
+                }
+
+
+                break;
+        }
+    }
+
+    class CalRunnable implements Runnable{
+
+        @Override
+        public void run() {
+            while (flag){
+
+
+                rtkInfoBean = (RTKInfoBean)queue.poll();
+                if (rtkInfoBean != null){
+                    Log.i(TAG,String.format("鍙栧嚭涓�涓紝queue.size=%d,rtkinfo=%s,绾跨▼鍙�=%d",queue.size(),rtkInfoBean.toString(),Thread.currentThread().getId()));
+                    yaw = rtkInfoBean.getHeading();
+                    startX = rtkInfoBean.getCoord_y();
+                    startY = rtkInfoBean.getCoord_x();
+
+                    if (mMapView != null){
+                        mMapView.setViewpointRotationAsync(rtkInfoBean.getHeading());
+                    }
+                addGraphicLayer(yaw,startX,startY);
+
+
+
+                }
+
+            }
+
+        }
+    }
+
+
+
+
+
+
+
+
+    private void setupMap() {
+        if (mMapView != null) {
+
+
+            mGraphicsOverlay = addGraphicsOverlay(mMapView);
+
+        }
+    }
+String url ;
+    private void addTrailheadsLayer() {
+        if (!TextUtils.isEmpty(url)){
+            Log.i(TAG,"map_url="+url);
+            final ArcGISMapImageLayer mapImageLayer = new ArcGISMapImageLayer(url);
+            // create an empty map instance
+            ArcGISMap map = new ArcGISMap();
+            Log.i(TAG,String.format("map.getMiniScale=%f",map.getMinScale()));
+            map.setMinScale(1000.0);
+            // add map image layer as operational layer
+            map.getOperationalLayers().add(mapImageLayer);
+            mMapView.setMap(map);
+        }else{
+            Toast.makeText(_mActivity, "url涓虹┖", Toast.LENGTH_SHORT).show();
+        }
+
+
+
+    }
+
+
+
+    GisCarModel gisCarModel;
+    boolean once =true;
+    private void addGraphicLayer(double yaw,double x,double y){
+        Log.i(TAG,"addgraphicLayer寮�濮�");
+        long time = System.currentTimeMillis();
+
+
+
+        if (gisCarModel != null){
+
+
+            long  qudianTime = System.currentTimeMillis();
+            List<safeluck.drive.evaluation.bean.Point> carNew =Utils.getCarPoint(0,yaw,new safeluck.drive.evaluation.bean.Point(x,y),gisCarModel);
+            Log.i(TAG,String.format("鍙栧埌鐐硅�楁椂=%d姣,绾跨▼鍙�=%d",System.currentTimeMillis()-qudianTime,Thread.currentThread().getId()));
+            if (carNew == null) return;
+            if (once){
+                Message message = Message.obtain();
+                message.what = MSG_CAR;
+
+                message.obj = carNew;
+                mHandler.sendMessage(message);
+
+            }
+
+
+
+
+
+
+        }
+
+
+        long period= System.currentTimeMillis()-time;
+        Log.i(TAG,"鎵цaddGraphicLayer鏂规硶锛岃�楁椂="+period);
+
+
+
+    }
+
+    private GraphicsOverlay addGraphicsOverlay(MapView mapView){
+        //create the graphics overlay
+        GraphicsOverlay graphicsOverlay = new GraphicsOverlay();
+        mGraphicsOverlay_body = new GraphicsOverlay();
+        //add the overlay to the map view
+        mapView.getGraphicsOverlays().add(mGraphicsOverlay_body);
+        mapView.getGraphicsOverlays().add(graphicsOverlay);
+        return graphicsOverlay;
+    }
+    private void readGisCar() {
+
+        String carFilePath = Environment.getExternalStorageDirectory().getAbsolutePath()+"/"+_mActivity.getPackageName()+"/gisvehiclemodel.json";
+        if (TextUtils.isEmpty(carFilePath)){
+            MyLog.i (TAG, "GISCar杞﹁締妯″瀷鏂囦欢涓嶅瓨鍦�");
+            Toast.makeText(_mActivity, "杞﹁締妯″瀷鏂囦欢涓嶅瓨鍦�", Toast.LENGTH_SHORT).show();
+            return ;
+        }
+        byte[] fileContentBytes= FileUtil.readFile(carFilePath);
+        if (fileContentBytes !=null&&fileContentBytes.length>0){
+            String buffer= new String(fileContentBytes);
+            gisCarModel = new Gson().fromJson(buffer, GisCarModel.class);
+        }else{
+            return;
+        }
+
+
+    }
+
+
+
+    PointCollection points1 = new PointCollection(SpatialReference.create(4544));
+    PointCollection points2 = new PointCollection(SpatialReference.create(4544));
+    PointCollection points3 = new PointCollection(SpatialReference.create(4544));
+    PointCollection points4 = new PointCollection(SpatialReference.create(4544));
+    SimpleLineSymbol lineSymbol = new SimpleLineSymbol(SimpleLineSymbol.Style.SOLID, Color.rgb(232,0,0), 0.5f);
+    SimpleFillSymbol simpleFillSymbol = new SimpleFillSymbol(SimpleFillSymbol.Style.SOLID, Color.argb(255,232,0,0), lineSymbol);
+
+    SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.WHITE, 5);
+    SimpleFillSymbol simpleFillSymbolGls = new SimpleFillSymbol(SimpleFillSymbol.Style.SOLID, Color.argb(255,0,0,0), lineSymbolGls);
+    private void drawGlses(List<safeluck.drive.evaluation.bean.Point> carNew,  GisCarModel gisCarModel) {
+
+        if(gisCarModel== null){
+            return;
+        }
+        long beginTime = System.currentTimeMillis();
+
+
+/**==============================car body=========================================*/
+
+        List<Integer> bodys =gisCarModel.getBody();
+        points.clear();
+        for (int i = 0; i <bodys.size(); i++) {
+            points.add(carNew.get(bodys.get(i)).getX(),carNew.get(bodys.get(i)).getY());
+        }
+
+        Polygon polygon = new Polygon(points);
+
+        Graphic graphic = new Graphic(polygon,simpleFillSymbol);
+
+
+
+        /**===============================car body end========================================*/
+
+
+/**==============================鐢诲ぉ绾�=========================================*/
+
+
+//        Graphic graphicAnt = new Graphic(new Point(startX,startY), simpleMarkerSymbol);
+
+        /**==============================鐢诲ぉ绾跨粨鏉� END=========================================*/
+
+
+
+        List<Integer> leftCenterGls = gisCarModel.getLeft_center_glass();
+        points1.clear();
+        for (int i = 0; i < leftCenterGls.size(); i++) {
+            int pos = leftCenterGls.get(i);
+            points1.add(carNew.get(pos).getX(), carNew.get(pos).getY());
+
+        }
+        List<Integer> rightCenterGls = gisCarModel.getRight_center_glass();
+        points2.clear();
+        for (int i = 0; i < rightCenterGls.size(); i++) {
+            int pos = rightCenterGls.get(i);
+            points2.add(carNew.get(pos).getX(), carNew.get(pos).getY());
+
+        }
+
+
+                List<Integer> frontCLs = new ArrayList<>();
+        frontCLs.addAll(gisCarModel.getLeft_front_glass());
+        frontCLs.addAll(gisCarModel.getRight_front_glass());
+
+
+        points3.clear();
+        for (int i = 0; i < frontCLs.size(); i++) {
+            int pos = frontCLs.get(i);
+            points3.add(carNew.get(pos).getX(), carNew.get(pos).getY());
+
+        }
+                frontCLs.clear();
+        frontCLs.addAll(gisCarModel.getLeft_rear_glass());
+        frontCLs.addAll(gisCarModel.getRight_rear_glass());
+        points4.clear();
+        for (int i = 0; i < frontCLs.size(); i++) {
+            int pos = frontCLs.get(i);
+            points4.add(carNew.get(pos).getX(), carNew.get(pos).getY());
+
+        }
+        Polygon polygon1 = new Polygon(points1);
+        Polygon polygon2 = new Polygon(points2);
+        Polygon polygon3 = new Polygon(points3);
+        Polygon polygon4 = new Polygon(points4);
+
+
+        //create graphics
+
+        Graphic buoyGraphic1 = new Graphic(polygon1, simpleFillSymbolGls);
+        Graphic buoyGraphic2 = new Graphic(polygon2, simpleFillSymbolGls);
+        Graphic buoyGraphic3 = new Graphic(polygon3, simpleFillSymbolGls);
+        Graphic buoyGraphic4 = new Graphic(polygon4, simpleFillSymbolGls);
+        //add the graphics to the graphics overlay
+        /**==============================娓呴櫎GraphicsOverlay涓婃墍鏈塯raphic=========================================*/
+        long clearTime = System.currentTimeMillis();
+
+
+        mGraphicsOverlay.getGraphics().clear();
+        Log.i(TAG,"clear鏂规硶鏃堕棿+"+(System.currentTimeMillis()-clearTime));
+        /**==============================娓呴櫎GraphicsOverlay涓婃墍鏈塯raphic   END=========================================*/
+
+        mGraphicsOverlay.getGraphics().add(buoyGraphic1);
+        mGraphicsOverlay.getGraphics().add(buoyGraphic2);
+        mGraphicsOverlay.getGraphics().add(buoyGraphic3);
+        mGraphicsOverlay.getGraphics().add(buoyGraphic4);
+        mGraphicsOverlay_body.getGraphics().clear();
+        mGraphicsOverlay_body.getGraphics().add(graphic);
+//        mGraphicsOverlay.getGraphics().add(graphicAnt);
+        Log.i(TAG,"GraphicsOverLay add graphic瀹屾垚"+(System.currentTimeMillis()-beginTime));
+        if (mMapView != null){
+            mMapView.setViewpointCenterAsync(new Point(startX,startY));
+
+        }
+
+
+
+
+    }
+
+    /**
+     * 缁樺埗闈�
+     */
+    private void drawPolygon() {
+//        List<Point> points = new ArrayList<>();
+//        points.add(new Point(21.21,21.32, SpatialReference.create("4544")));
+//        PointCollection pointCollection = new PointCollection(points);
+
+        mMapView.setOnTouchListener(new DefaultMapViewOnTouchListener(_mActivity, mMapView) {
+            @Override
+            public boolean onSingleTapConfirmed(MotionEvent e) {
+
+                mGraphicsOverlay.getGraphics().clear();
+                Point point = mMapView.screenToLocation(new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())));
+                mPointCollection.add(point);
+
+                Polygon polygon = new Polygon(mPointCollection);
+
+                if (mPointCollection.size() == 1) {
+                    SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 10);
+                    Graphic pointGraphic = new Graphic(point, simpleMarkerSymbol);
+                    mGraphicsOverlay.getGraphics().add(pointGraphic);
+                }
+
+                SimpleLineSymbol lineSymbol = new SimpleLineSymbol(SimpleLineSymbol.Style.SOLID, Color.GREEN, 3.0f);
+                SimpleFillSymbol simpleFillSymbol = new SimpleFillSymbol(SimpleFillSymbol.Style.SOLID, Color.parseColor("#33e97676"), lineSymbol);
+                Graphic graphic = new Graphic(polygon, simpleFillSymbol);
+                mGraphicsOverlay.getGraphics().add(graphic);
+
+                return super.onSingleTapConfirmed(e);
+            }
+        });
+    }
+
+    /**
+     * 缁樺埗鐐�
+     */
+    private void drawPoint() {
+        mMapView.setOnTouchListener(new DefaultMapViewOnTouchListener(_mActivity, mMapView) {
+            @Override
+            public boolean onSingleTapConfirmed(MotionEvent e) {
+                Point clickPoint = mMapView.screenToLocation(new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())));
+                SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 20);
+                Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol);
+                //娓呴櫎涓婁竴涓偣
+                mGraphicsOverlay.getGraphics().clear();
+                mGraphicsOverlay.getGraphics().add(graphic);
+
+                //浣跨敤娓叉煋鍣�
+                //                Graphic graphic1 = new Graphic(clickPoint);
+                //                SimpleRenderer simpleRenderer = new SimpleRenderer(simpleMarkerSymbol);
+                //                mGraphicsOverlay.setRenderer(simpleRenderer);
+                //                mGraphicsOverlay.getGraphics().clear();
+                //                mGraphicsOverlay.getGraphics().add(graphic1);
+
+                return super.onSingleTapConfirmed(e);
+            }
+        });
+    }
+
+    /**
+     * 缁樺埗绾�
+     */
+    private void drawPolyline() {
+        mMapView.setOnTouchListener(new DefaultMapViewOnTouchListener(_mActivity, mMapView) {
+            @Override
+            public boolean onSingleTapConfirmed(MotionEvent e) {
+                Point point = mMapView.screenToLocation(new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())));
+                mPointCollection.add(point);
+
+                Polyline polyline = new Polyline(mPointCollection);
+
+                //鐐�
+                SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 10);
+                Graphic pointGraphic = new Graphic(point, simpleMarkerSymbol);
+                mGraphicsOverlay.getGraphics().add(pointGraphic);
+
+                //绾�
+                SimpleLineSymbol simpleLineSymbol = new SimpleLineSymbol(SimpleLineSymbol.Style.SOLID, Color.parseColor("#FC8145"), 3);
+                Graphic graphic = new Graphic(polyline, simpleLineSymbol);
+                mGraphicsOverlay.getGraphics().add(graphic);
+
+                return super.onSingleTapConfirmed(e);
+            }
+        });
+    }
+
+
+
+    @Override
+    public void onPause() {
+        if (mMapView != null) {
+            mMapView.pause();
+        }
+        super.onPause();
+    }
+
+    @Override
+    public void onResume() {
+        super.onResume();
+        if (mMapView != null) {
+            mMapView.resume();
+        }
+    }
+
+    @Override
+    public void onDetach() {
+        super.onDetach();
+        if (mMapView != null) {
+            mMapView.dispose();
+        }
+        Log.i(TAG,"娓呯┖闃熷垪");
+        flag = false;
+        producer.shutdown();
+        consumer .shutdown();
+        queue.clear();
+        CEventCenter.onBindEvent(false,icEventListener, Constant.BIND_RTK_INFO_MAP);
+        CEventCenter.onBindEvent(false,icEventListener1, Constant.BIND_EXAM_STATUS_TOPIC);
+
+
+    }
+
+    @Override
+    public void onAttach(Context context) {
+        super.onAttach(context);
+        CEventCenter.onBindEvent(true,icEventListener,Constant.BIND_RTK_INFO_MAP);
+        CEventCenter.onBindEvent(true,icEventListener1,Constant.BIND_EXAM_STATUS_TOPIC);
+    }
+
+}
diff --git a/app/src/main/java/safeluck/drive/evaluation/fragment/ArcGisMapFragmentVTPK.java b/app/src/main/java/safeluck/drive/evaluation/fragment/ArcGisMapFragmentVTPK.java
new file mode 100644
index 0000000..7e7d37c
--- /dev/null
+++ b/app/src/main/java/safeluck/drive/evaluation/fragment/ArcGisMapFragmentVTPK.java
@@ -0,0 +1,590 @@
+package safeluck.drive.evaluation.fragment;
+
+import android.content.Context;
+import android.graphics.Color;
+import android.os.Bundle;
+import android.os.Environment;
+import android.os.Handler;
+import android.os.Message;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Toast;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import com.anyun.basecommonlib.MyLog;
+import com.esri.arcgisruntime.data.TileCache;
+import com.esri.arcgisruntime.geometry.Point;
+import com.esri.arcgisruntime.geometry.PointCollection;
+import com.esri.arcgisruntime.geometry.Polygon;
+import com.esri.arcgisruntime.geometry.Polyline;
+import com.esri.arcgisruntime.geometry.SpatialReference;
+import com.esri.arcgisruntime.layers.ArcGISMapImageLayer;
+import com.esri.arcgisruntime.layers.ArcGISTiledLayer;
+import com.esri.arcgisruntime.layers.ArcGISVectorTiledLayer;
+import com.esri.arcgisruntime.mapping.ArcGISMap;
+import com.esri.arcgisruntime.mapping.Basemap;
+import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener;
+import com.esri.arcgisruntime.mapping.view.Graphic;
+import com.esri.arcgisruntime.mapping.view.GraphicsOverlay;
+import com.esri.arcgisruntime.mapping.view.MapView;
+import com.esri.arcgisruntime.symbology.SimpleFillSymbol;
+import com.esri.arcgisruntime.symbology.SimpleLineSymbol;
+import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol;
+import com.google.gson.Gson;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.LinkedBlockingQueue;
+
+import me.yokeyword.fragmentation.SupportFragment;
+import safeluck.drive.evaluation.Constant;
+import safeluck.drive.evaluation.DB.exam_status.ExamStatus;
+import safeluck.drive.evaluation.R;
+import safeluck.drive.evaluation.bean.ExamPlatformData;
+import safeluck.drive.evaluation.bean.GisCarModel;
+import safeluck.drive.evaluation.bean.RTKInfoBean;
+import safeluck.drive.evaluation.cEventCenter.CEventCenter;
+import safeluck.drive.evaluation.cEventCenter.ICEventListener;
+import safeluck.drive.evaluation.util.CThreadPoolExecutor;
+import safeluck.drive.evaluation.util.FileUtil;
+import safeluck.drive.evaluation.util.Utils;
+
+/**椹炬牎淇℃伅UI
+ * MyApplication2
+ * Created by lzw on 2019/3/20. 11:22:39
+ * 閭锛�632393724@qq.com
+ * All Rights Saved! Chongqing AnYun Tech co. LTD
+ */
+public class ArcGisMapFragmentVTPK extends SupportFragment implements View.OnClickListener {
+
+    private static final String TAG = ArcGisMapFragmentVTPK.class.getSimpleName();
+    private static final int ENTER = 1;//杩涘叆 绉戜簩鏌愪釜椤圭洰鍦板浘
+
+    private LinkedBlockingQueue queue = new LinkedBlockingQueue(100);
+    private ExecutorService consumer = Executors.newSingleThreadExecutor();
+    private ExecutorService producer = Executors.newSingleThreadExecutor();
+    SimpleLineSymbol lineSymbolGls = new SimpleLineSymbol(SimpleLineSymbol.Style.SOLID, Color.BLACK, 0.5f);
+
+
+    PointCollection points = new PointCollection(SpatialReference.create(4544));
+    private Gson gson = new Gson();
+    private ICEventListener icEventListener = new ICEventListener() {
+        @Override
+        public void onCEvent(String topic, int msgCode, int resultCode, Object obj) {
+
+
+
+
+                producer.execute(()->{
+                    String json = (String)obj;
+                    Log.i(TAG,String.format("褰撳墠绾跨▼鍙�%d,json=%s",Thread.currentThread().getId(),json));
+                    RTKInfoBean rtkInfoBean = gson.fromJson(json,RTKInfoBean.class);
+                    queue.offer(rtkInfoBean);
+                });
+
+//                MyLog.i(TAG,"澶勭悊瀹�11.鏃堕棿="+Utils.formatTimeYYMMDDHHmmSSSSS(System.currentTimeMillis()));
+
+
+        }
+    };
+    private ICEventListener icEventListener1 = new ICEventListener() {
+        @Override
+        public void onCEvent(String topic, int msgCode, int resultCode, Object obj) {
+            if (msgCode==13){
+                ExamStatus examStatus = (ExamStatus)obj;
+                if (examStatus.getMap_id()>-1){
+                    if (examStatus.getEnter()==ENTER){
+                        MyLog.i(TAG,String.format("杩涘叆[%d] map",examStatus.getMap_id()));
+                        double scale = mMapView.getMapScale();
+                        mMapView.setViewpointScaleAsync(scale * 0.2*0.2);
+                    }else{
+                        MyLog.i(TAG,String.format("閫�鍑篬%d] map",examStatus.getMap_id()));
+                        double scale = mMapView.getMapScale();
+                        mMapView.setViewpointScaleAsync(scale * 5*5);
+                    }
+                }
+            }
+        }
+    };
+
+    public static SupportFragment newInstance(String s){
+        ArcGisMapFragmentVTPK jiaXiaoFragment = new ArcGisMapFragmentVTPK();
+        Bundle bundle = new Bundle();
+        bundle.putString("arcgis_url",s);
+        jiaXiaoFragment.setArguments(bundle);
+        return jiaXiaoFragment;
+    }
+
+
+    private MapView mMapView ;
+    private static final int MSG_CAR = 100;
+    double yaw = 0;
+
+    GraphicsOverlay mGraphicsOverlay;
+    GraphicsOverlay mGraphicsOverlay_body;
+    private double startY = 428882,startX = 3291858;
+    private Handler mHandler = new Handler(){
+        @Override
+        public void handleMessage(Message msg) {
+            switch (msg.what){
+                case MSG_CAR:
+
+                    List<safeluck.drive.evaluation.bean.Point> newCarPoints = (List<safeluck.drive.evaluation.bean.Point>) msg.obj;
+                    Log.i(TAG,"handle message newcarPoints.size="+newCarPoints.size());
+                    drawGlses(newCarPoints,gisCarModel);
+
+                    break;
+            }
+        }
+    };
+
+    PointCollection mPointCollection = new PointCollection(SpatialReference.create(4544));
+    @Nullable
+    @Override
+    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+
+
+        View view = inflater.inflate(R.layout.layout_arc_gis,container,false);
+        mMapView = view.findViewById(R.id.mapView);
+        view.findViewById(R.id.btn_change_map).setOnClickListener(this);
+        Log.i(TAG,String.format("褰撳墠绾跨▼鍙�%d,json=%s",Thread.currentThread().getId(),"onCreateView"));
+        url = getArguments().getString("arcgis_url");
+        CThreadPoolExecutor.runInBackground(()->{
+
+            readGisCar();
+
+
+        });
+        consumer.execute(new CalRunnable());
+
+        setupMap();
+
+
+//        addTrailheadsLayer();
+
+
+
+        url = Environment.getExternalStorageDirectory().getAbsolutePath()+"/ArcGISTileVectorMine.vtpk";
+        Log.i(TAG,"url ========="+url);
+        ArcGISVectorTiledLayer arcGISTiledLayer = new ArcGISVectorTiledLayer (url);
+        Basemap basemap = new Basemap(arcGISTiledLayer);
+        ArcGISMap arcGISMap = new ArcGISMap(basemap);
+        mMapView.setMap(arcGISMap);
+
+        return view;
+    }
+
+
+
+    RTKInfoBean rtkInfoBean;
+    boolean flag = true;
+
+    @Override
+    public void onClick(View v) {
+        switch (v.getId()){
+            case R.id.btn_change_map:
+                if (ExamPlatformData.getInstance().getExamType()>ExamPlatformData.EXAM_TYPE_ChangKAO){
+                    RoadDriveMapFragmentab jiaXiaoFragment = findFragment(RoadDriveMapFragmentab.class);
+                    if (jiaXiaoFragment == null) {
+                        jiaXiaoFragment = (RoadDriveMapFragmentab) RoadDriveMapFragmentab.newInstance();
+                    }
+                    startWithPop(jiaXiaoFragment);
+                }else{
+                    MapFragment jiaXiaoFragment = findFragment(MapFragment.class);
+                    if (jiaXiaoFragment == null) {
+                        jiaXiaoFragment = (MapFragment) MapFragment.newInstance();
+                    }
+                    startWithPop(jiaXiaoFragment);
+                }
+
+
+                break;
+        }
+    }
+
+    class CalRunnable implements Runnable{
+
+        @Override
+        public void run() {
+            while (flag){
+
+
+                rtkInfoBean = (RTKInfoBean)queue.poll();
+                if (rtkInfoBean != null){
+                    Log.i(TAG,String.format("鍙栧嚭涓�涓紝queue.size=%d,rtkinfo=%s,绾跨▼鍙�=%d",queue.size(),rtkInfoBean.toString(),Thread.currentThread().getId()));
+                    yaw = rtkInfoBean.getHeading();
+                    startX = rtkInfoBean.getCoord_y();
+                    startY = rtkInfoBean.getCoord_x();
+
+
+                addGraphicLayer(yaw,startX,startY);
+
+
+
+                }
+
+            }
+
+        }
+    }
+
+
+
+
+
+
+
+
+    private void setupMap() {
+        if (mMapView != null) {
+
+
+            mGraphicsOverlay = addGraphicsOverlay(mMapView);
+
+        }
+    }
+String url ;
+    private void addTrailheadsLayer() {
+        if (!TextUtils.isEmpty(url)){
+            Log.i(TAG,"map_url="+url);
+            final ArcGISMapImageLayer mapImageLayer = new ArcGISMapImageLayer(url);
+            // create an empty map instance
+            ArcGISMap map = new ArcGISMap();
+            Log.i(TAG,String.format("map.getMiniScale=%f",map.getMinScale()));
+            map.setMinScale(1000.0);
+            // add map image layer as operational layer
+            map.getOperationalLayers().add(mapImageLayer);
+            mMapView.setMap(map);
+        }else{
+            Toast.makeText(_mActivity, "url涓虹┖", Toast.LENGTH_SHORT).show();
+        }
+
+
+
+    }
+
+
+
+    GisCarModel gisCarModel;
+    boolean once =true;
+    private void addGraphicLayer(double yaw,double x,double y){
+        Log.i(TAG,"addgraphicLayer寮�濮�");
+        long time = System.currentTimeMillis();
+
+
+
+        if (gisCarModel != null){
+
+
+            long  qudianTime = System.currentTimeMillis();
+            List<safeluck.drive.evaluation.bean.Point> carNew =Utils.getCarPoint(0,yaw,new safeluck.drive.evaluation.bean.Point(x,y),gisCarModel);
+            Log.i(TAG,String.format("鍙栧埌鐐硅�楁椂=%d姣,绾跨▼鍙�=%d",System.currentTimeMillis()-qudianTime,Thread.currentThread().getId()));
+            if (carNew == null) return;
+            if (once){
+                Message message = Message.obtain();
+                message.what = MSG_CAR;
+
+                message.obj = carNew;
+                mHandler.sendMessage(message);
+
+            }
+
+
+
+
+
+
+        }
+
+
+        long period= System.currentTimeMillis()-time;
+        Log.i(TAG,"鎵цaddGraphicLayer鏂规硶锛岃�楁椂="+period);
+
+
+
+    }
+
+    private GraphicsOverlay addGraphicsOverlay(MapView mapView){
+        //create the graphics overlay
+        GraphicsOverlay graphicsOverlay = new GraphicsOverlay();
+        mGraphicsOverlay_body = new GraphicsOverlay();
+        //add the overlay to the map view
+        mapView.getGraphicsOverlays().add(mGraphicsOverlay_body);
+        mapView.getGraphicsOverlays().add(graphicsOverlay);
+        return graphicsOverlay;
+    }
+    private void readGisCar() {
+
+        String carFilePath = Environment.getExternalStorageDirectory().getAbsolutePath()+"/"+_mActivity.getPackageName()+"/giscar.json";
+        if (TextUtils.isEmpty(carFilePath)){
+            MyLog.i (TAG, "GISCar杞﹁締妯″瀷鏂囦欢涓嶅瓨鍦�");
+            return ;
+        }
+        byte[] fileContentBytes= FileUtil.readFile(carFilePath);
+        if (fileContentBytes !=null&&fileContentBytes.length>0){
+            String buffer= new String(fileContentBytes);
+            gisCarModel = new Gson().fromJson(buffer, GisCarModel.class);
+        }else{
+            return;
+        }
+
+
+    }
+
+
+
+    PointCollection points1 = new PointCollection(SpatialReference.create(4544));
+    PointCollection points2 = new PointCollection(SpatialReference.create(4544));
+    PointCollection points3 = new PointCollection(SpatialReference.create(4544));
+    PointCollection points4 = new PointCollection(SpatialReference.create(4544));
+    SimpleLineSymbol lineSymbol = new SimpleLineSymbol(SimpleLineSymbol.Style.SOLID, Color.rgb(232,0,0), 0.5f);
+    SimpleFillSymbol simpleFillSymbol = new SimpleFillSymbol(SimpleFillSymbol.Style.SOLID, Color.argb(255,232,0,0), lineSymbol);
+
+    SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.WHITE, 5);
+    SimpleFillSymbol simpleFillSymbolGls = new SimpleFillSymbol(SimpleFillSymbol.Style.SOLID, Color.argb(255,0,0,0), lineSymbolGls);
+    private void drawGlses(List<safeluck.drive.evaluation.bean.Point> carNew,  GisCarModel gisCarModel) {
+
+        if(gisCarModel== null){
+            return;
+        }
+        long beginTime = System.currentTimeMillis();
+
+
+/**==============================car body=========================================*/
+
+        List<Integer> bodys =gisCarModel.getBody();
+        points.clear();
+        for (int i = 0; i <bodys.size(); i++) {
+            points.add(carNew.get(bodys.get(i)).getX(),carNew.get(bodys.get(i)).getY());
+        }
+
+        Polygon polygon = new Polygon(points);
+
+        Graphic graphic = new Graphic(polygon,simpleFillSymbol);
+
+
+
+        /**===============================car body end========================================*/
+
+
+/**==============================鐢诲ぉ绾�=========================================*/
+
+
+//        Graphic graphicAnt = new Graphic(new Point(startX,startY), simpleMarkerSymbol);
+
+        /**==============================鐢诲ぉ绾跨粨鏉� END=========================================*/
+
+
+
+        List<Integer> leftCenterGls = gisCarModel.getLeft_center_glass();
+        points1.clear();
+        for (int i = 0; i < leftCenterGls.size(); i++) {
+            int pos = leftCenterGls.get(i);
+            points1.add(carNew.get(pos).getX(), carNew.get(pos).getY());
+
+        }
+        List<Integer> rightCenterGls = gisCarModel.getRight_center_glass();
+        points2.clear();
+        for (int i = 0; i < leftCenterGls.size(); i++) {
+            int pos = rightCenterGls.get(i);
+            points2.add(carNew.get(pos).getX(), carNew.get(pos).getY());
+
+        }
+
+
+                List<Integer> frontCLs = new ArrayList<>();
+        frontCLs.addAll(gisCarModel.getLeft_front_glass());
+        frontCLs.addAll(gisCarModel.getRight_front_glass());
+
+
+        points3.clear();
+        for (int i = 0; i < frontCLs.size(); i++) {
+            int pos = frontCLs.get(i);
+            points3.add(carNew.get(pos).getX(), carNew.get(pos).getY());
+
+        }
+                frontCLs.clear();
+        frontCLs.addAll(gisCarModel.getLeft_rear_glass());
+        frontCLs.addAll(gisCarModel.getRight_rear_glass());
+        points4.clear();
+        for (int i = 0; i < frontCLs.size(); i++) {
+            int pos = frontCLs.get(i);
+            points4.add(carNew.get(pos).getX(), carNew.get(pos).getY());
+
+        }
+        Polygon polygon1 = new Polygon(points1);
+        Polygon polygon2 = new Polygon(points2);
+        Polygon polygon3 = new Polygon(points3);
+        Polygon polygon4 = new Polygon(points4);
+
+
+        //create graphics
+
+        Graphic buoyGraphic1 = new Graphic(polygon1, simpleFillSymbolGls);
+        Graphic buoyGraphic2 = new Graphic(polygon2, simpleFillSymbolGls);
+        Graphic buoyGraphic3 = new Graphic(polygon3, simpleFillSymbolGls);
+        Graphic buoyGraphic4 = new Graphic(polygon4, simpleFillSymbolGls);
+        //add the graphics to the graphics overlay
+        /**==============================娓呴櫎GraphicsOverlay涓婃墍鏈塯raphic=========================================*/
+        long clearTime = System.currentTimeMillis();
+
+
+        mGraphicsOverlay.getGraphics().clear();
+        Log.i(TAG,"clear鏂规硶鏃堕棿+"+(System.currentTimeMillis()-clearTime));
+        /**==============================娓呴櫎GraphicsOverlay涓婃墍鏈塯raphic   END=========================================*/
+
+        mGraphicsOverlay.getGraphics().add(buoyGraphic1);
+        mGraphicsOverlay.getGraphics().add(buoyGraphic2);
+        mGraphicsOverlay.getGraphics().add(buoyGraphic3);
+        mGraphicsOverlay.getGraphics().add(buoyGraphic4);
+        mGraphicsOverlay_body.getGraphics().clear();
+        mGraphicsOverlay_body.getGraphics().add(graphic);
+//        mGraphicsOverlay.getGraphics().add(graphicAnt);
+        Log.i(TAG,"GraphicsOverLay add graphic瀹屾垚"+(System.currentTimeMillis()-beginTime));
+//        if (mMapView != null){
+//            mMapView.setViewpointCenterAsync(new Point(startX,startY));
+//        }
+
+
+
+
+    }
+
+    /**
+     * 缁樺埗闈�
+     */
+    private void drawPolygon() {
+//        List<Point> points = new ArrayList<>();
+//        points.add(new Point(21.21,21.32, SpatialReference.create("4544")));
+//        PointCollection pointCollection = new PointCollection(points);
+
+        mMapView.setOnTouchListener(new DefaultMapViewOnTouchListener(_mActivity, mMapView) {
+            @Override
+            public boolean onSingleTapConfirmed(MotionEvent e) {
+
+                mGraphicsOverlay.getGraphics().clear();
+                Point point = mMapView.screenToLocation(new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())));
+                mPointCollection.add(point);
+
+                Polygon polygon = new Polygon(mPointCollection);
+
+                if (mPointCollection.size() == 1) {
+                    SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 10);
+                    Graphic pointGraphic = new Graphic(point, simpleMarkerSymbol);
+                    mGraphicsOverlay.getGraphics().add(pointGraphic);
+                }
+
+                SimpleLineSymbol lineSymbol = new SimpleLineSymbol(SimpleLineSymbol.Style.SOLID, Color.GREEN, 3.0f);
+                SimpleFillSymbol simpleFillSymbol = new SimpleFillSymbol(SimpleFillSymbol.Style.SOLID, Color.parseColor("#33e97676"), lineSymbol);
+                Graphic graphic = new Graphic(polygon, simpleFillSymbol);
+                mGraphicsOverlay.getGraphics().add(graphic);
+
+                return super.onSingleTapConfirmed(e);
+            }
+        });
+    }
+
+    /**
+     * 缁樺埗鐐�
+     */
+    private void drawPoint() {
+        mMapView.setOnTouchListener(new DefaultMapViewOnTouchListener(_mActivity, mMapView) {
+            @Override
+            public boolean onSingleTapConfirmed(MotionEvent e) {
+                Point clickPoint = mMapView.screenToLocation(new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())));
+                SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 20);
+                Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol);
+                //娓呴櫎涓婁竴涓偣
+                mGraphicsOverlay.getGraphics().clear();
+                mGraphicsOverlay.getGraphics().add(graphic);
+
+                //浣跨敤娓叉煋鍣�
+                //                Graphic graphic1 = new Graphic(clickPoint);
+                //                SimpleRenderer simpleRenderer = new SimpleRenderer(simpleMarkerSymbol);
+                //                mGraphicsOverlay.setRenderer(simpleRenderer);
+                //                mGraphicsOverlay.getGraphics().clear();
+                //                mGraphicsOverlay.getGraphics().add(graphic1);
+
+                return super.onSingleTapConfirmed(e);
+            }
+        });
+    }
+
+    /**
+     * 缁樺埗绾�
+     */
+    private void drawPolyline() {
+        mMapView.setOnTouchListener(new DefaultMapViewOnTouchListener(_mActivity, mMapView) {
+            @Override
+            public boolean onSingleTapConfirmed(MotionEvent e) {
+                Point point = mMapView.screenToLocation(new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())));
+                mPointCollection.add(point);
+
+                Polyline polyline = new Polyline(mPointCollection);
+
+                //鐐�
+                SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 10);
+                Graphic pointGraphic = new Graphic(point, simpleMarkerSymbol);
+                mGraphicsOverlay.getGraphics().add(pointGraphic);
+
+                //绾�
+                SimpleLineSymbol simpleLineSymbol = new SimpleLineSymbol(SimpleLineSymbol.Style.SOLID, Color.parseColor("#FC8145"), 3);
+                Graphic graphic = new Graphic(polyline, simpleLineSymbol);
+                mGraphicsOverlay.getGraphics().add(graphic);
+
+                return super.onSingleTapConfirmed(e);
+            }
+        });
+    }
+
+
+
+    @Override
+    public void onPause() {
+        if (mMapView != null) {
+            mMapView.pause();
+        }
+        super.onPause();
+    }
+
+    @Override
+    public void onResume() {
+        super.onResume();
+        if (mMapView != null) {
+            mMapView.resume();
+        }
+    }
+
+    @Override
+    public void onDetach() {
+        super.onDetach();
+        if (mMapView != null) {
+            mMapView.dispose();
+        }
+        Log.i(TAG,"娓呯┖闃熷垪");
+        flag = false;
+        producer.shutdown();
+        consumer .shutdown();
+        queue.clear();
+        CEventCenter.onBindEvent(false,icEventListener, Constant.BIND_RTK_INFO_MAP);
+        CEventCenter.onBindEvent(false,icEventListener1, Constant.BIND_EXAM_STATUS_TOPIC);
+
+
+    }
+
+    @Override
+    public void onAttach(Context context) {
+        super.onAttach(context);
+        CEventCenter.onBindEvent(true,icEventListener,Constant.BIND_RTK_INFO_MAP);
+        CEventCenter.onBindEvent(true,icEventListener1,Constant.BIND_EXAM_STATUS_TOPIC);
+    }
+
+}
diff --git a/app/src/main/java/safeluck/drive/evaluation/httpmodule/HttpCarRespBean.java b/app/src/main/java/safeluck/drive/evaluation/httpmodule/HttpCarRespBean.java
index 90c2ac0..a4334b9 100644
--- a/app/src/main/java/safeluck/drive/evaluation/httpmodule/HttpCarRespBean.java
+++ b/app/src/main/java/safeluck/drive/evaluation/httpmodule/HttpCarRespBean.java
@@ -3,6 +3,7 @@
 import java.util.List;
 
 public class HttpCarRespBean {
+
     /**
      * result : true
      * data : {"server":"gps.safeluck.com","port":"3301","gps_monitor_url":"https%3A%2F%2Ftrainsim.aaej.cn%2F%23%2Fvisitor%2Fmonitor%3Fdevice_id%3D0314200100000004%26area_type%3Dcar","map_json":{"left_front_tire":[9,10],"main_ant":[428984.9367,3291974.6021],"type":"car","body":[0,1,2,3,4,5,6,7,8,13,14,15,16,17,18,19,20,21],"ground_height":229.8357,"version":"0.1","point":[428984.1653,3291977.6796,428983.7684,3291977.5547,428983.498,3291977.0243,428983.5552,3291976.6508,428983.8355,3291975.483,428984.0438,3291974.7034,428984.1558,3291974.1226,428984.5245,3291973.295,428984.8693,3291973.2598,428983.5944,3291976.6639,428983.769,3291976.6702,428984.203,3291974.1338,428984.342,3291974.1803,428985.23,3291973.3175,428985.6473,3291973.4636,428985.8995,3291973.6719,428985.8234,3291974.5267,428985.6107,3291975.3336,428985.4377,3291976.0995,428985.1876,3291977.0475,428984.9813,3291977.5092,428984.5666,3291977.7383,428985.1356,3291977.0333,428984.9657,3291976.9994,428985.785,3291974.5007,428985.6423,3291974.4559],"axial":[0,13],"ant_pitch":0.081,"ant_height":231.2434,"right_front_tire":[22,23],"right_rear_tire":[24,25],"name":"娑櫟浜ら�氶┚鏍�","left_rear_tire":[11,12]},"version":"0.1","pzh":"璞獷8000娴�"}
@@ -237,4 +238,7 @@
             }
         }
     }
+
+
+
 }
diff --git a/app/src/main/java/safeluck/drive/evaluation/httpmodule/HttpGisCarRespBean.java b/app/src/main/java/safeluck/drive/evaluation/httpmodule/HttpGisCarRespBean.java
new file mode 100644
index 0000000..19b5631
--- /dev/null
+++ b/app/src/main/java/safeluck/drive/evaluation/httpmodule/HttpGisCarRespBean.java
@@ -0,0 +1,538 @@
+package safeluck.drive.evaluation.httpmodule;
+
+import java.util.List;
+
+public class HttpGisCarRespBean {
+    /**
+     * result : true
+     * data : {"server":"gps.safeluck.com","port":"3301","gps_monitor_url":"https%3A%2F%2Ftrainsim.aaej.cn%2F%23%2Fvisitor%2Fmonitor%3Fdevice_id%3D0314200100000003%26area_type%3Dcar","map_json":{"left_front_tire":[12,13],"main_ant":[642214.3436,3270761.9102],"right_rear_glass":[58,59,60,61],"body":[0,1,2,3,4,5,6,7,8,9,10,11,32,33,34,35,36,37,38,39,40,41,42,43],"ground_height":331.6199,"type":"car","version":"1.0","point":[642216.5511,3270759.543,642216.7239,3270759.7759,642216.8133,3270759.8769,642216.859,3270760.3094,642216.7995,3270760.4553,642216.5513,3270760.7819,642216.242,3270761.0874,642215.5468,3270761.8527,642214.7732,3270762.7061,642214.483,3270762.97,642214.1131,3270763.2124,642213.7448,3270763.0632,642216.5364,3270760.7594,642216.4056,3270760.6352,642214.763,3270762.684,642214.6482,3270762.5763,642216.0948,3270760.559,642216.2863,3270760.9176,642215.5665,3270761.3672,642215.3224,3270761.075,642215.8444,3270760.2702,642216.0948,3270760.559,642216.1878,3270761.022,642214.5299,3270762.782,642214.7092,3270762.266,642215.5793,3270761.43,642213.9578,3270762.621,642214.4689,3270762.846,642214.6577,3270762.255,642214.3621,3270762.0998,642214.242,3270762.0047,642214.3621,3270762.0098,642213.4524,3270762.8314,642213.2324,3270762.5872,642213.0537,3270762.2115,642213.3048,3270761.7942,642213.5453,3270761.5047,642214.2823,3270760.7212,642215.0634,3270759.9012,642215.346,3270759.5816,642215.6092,3270759.3543,642215.7336,3270759.2982,642216.2033,3270759.2972,642216.3468,3270759.4079,642215.3611,3270759.6032,642215.4909,3270759.7158,642213.5608,3270761.519,642213.6874,3270761.6509,642213.4249,3270761.767,642215.0934,3270759.996,642214.7549,3270760.717,642213.9469,3270761.587,642215.0584,3270760.8537,642214.8047,3270760.7012,642215.1958,3270759.8877,642215.6907,3270760.1429,642215.8444,3270760.2702,642216.0948,3270760.559,642214.1323,3270761.8943,642213.9566,3270761.6397,642213.3781,3270761.8166,642213.5721,3270762.2307,642214.3621,3270762.0998],"ant_pitch":0.602,"axial":[0,32],"ant_height":333.0715,"left_rear_glass":[26,27,28,29],"right_front_tire":[44,45],"right_rear_tire":[46,47],"right_front_glass":[52,53,54,55],"name":"棣栭椹炬牎鑱旇姵杞︽ā鍨�","left_rear_tire":[14,15],"left_front_glass":[16,17,18,19],"left_center_glass":[22,23,24,25],"right_center_glass":[48,49,50,51]},"version":"1.0","pzh":"璞獷2000娴�"}
+     */
+
+    private boolean result;
+    private DataBean data;
+
+    public boolean isResult() {
+        return result;
+    }
+
+    public void setResult(boolean result) {
+        this.result = result;
+    }
+
+    public DataBean getData() {
+        return data;
+    }
+
+    public void setData(DataBean data) {
+        this.data = data;
+    }
+
+    public static class DataBean {
+        /**
+         * server : gps.safeluck.com
+         * port : 3301
+         * gps_monitor_url : https%3A%2F%2Ftrainsim.aaej.cn%2F%23%2Fvisitor%2Fmonitor%3Fdevice_id%3D0314200100000003%26area_type%3Dcar
+         * map_json : {"left_front_tire":[12,13],"main_ant":[642214.3436,3270761.9102],"right_rear_glass":[58,59,60,61],"body":[0,1,2,3,4,5,6,7,8,9,10,11,32,33,34,35,36,37,38,39,40,41,42,43],"ground_height":331.6199,"type":"car","version":"1.0","point":[642216.5511,3270759.543,642216.7239,3270759.7759,642216.8133,3270759.8769,642216.859,3270760.3094,642216.7995,3270760.4553,642216.5513,3270760.7819,642216.242,3270761.0874,642215.5468,3270761.8527,642214.7732,3270762.7061,642214.483,3270762.97,642214.1131,3270763.2124,642213.7448,3270763.0632,642216.5364,3270760.7594,642216.4056,3270760.6352,642214.763,3270762.684,642214.6482,3270762.5763,642216.0948,3270760.559,642216.2863,3270760.9176,642215.5665,3270761.3672,642215.3224,3270761.075,642215.8444,3270760.2702,642216.0948,3270760.559,642216.1878,3270761.022,642214.5299,3270762.782,642214.7092,3270762.266,642215.5793,3270761.43,642213.9578,3270762.621,642214.4689,3270762.846,642214.6577,3270762.255,642214.3621,3270762.0998,642214.242,3270762.0047,642214.3621,3270762.0098,642213.4524,3270762.8314,642213.2324,3270762.5872,642213.0537,3270762.2115,642213.3048,3270761.7942,642213.5453,3270761.5047,642214.2823,3270760.7212,642215.0634,3270759.9012,642215.346,3270759.5816,642215.6092,3270759.3543,642215.7336,3270759.2982,642216.2033,3270759.2972,642216.3468,3270759.4079,642215.3611,3270759.6032,642215.4909,3270759.7158,642213.5608,3270761.519,642213.6874,3270761.6509,642213.4249,3270761.767,642215.0934,3270759.996,642214.7549,3270760.717,642213.9469,3270761.587,642215.0584,3270760.8537,642214.8047,3270760.7012,642215.1958,3270759.8877,642215.6907,3270760.1429,642215.8444,3270760.2702,642216.0948,3270760.559,642214.1323,3270761.8943,642213.9566,3270761.6397,642213.3781,3270761.8166,642213.5721,3270762.2307,642214.3621,3270762.0998],"ant_pitch":0.602,"axial":[0,32],"ant_height":333.0715,"left_rear_glass":[26,27,28,29],"right_front_tire":[44,45],"right_rear_tire":[46,47],"right_front_glass":[52,53,54,55],"name":"棣栭椹炬牎鑱旇姵杞︽ā鍨�","left_rear_tire":[14,15],"left_front_glass":[16,17,18,19],"left_center_glass":[22,23,24,25],"right_center_glass":[48,49,50,51]}
+         * version : 1.0
+         * pzh : 璞獷2000娴�
+         */
+
+        private String server;
+        private String port;
+        private String gps_monitor_url;
+        private MapJsonBean map_json;
+        private String version;
+        private String pzh;
+
+        public String getServer() {
+            return server;
+        }
+
+        public void setServer(String server) {
+            this.server = server;
+        }
+
+        public String getPort() {
+            return port;
+        }
+
+        public void setPort(String port) {
+            this.port = port;
+        }
+
+        public String getGps_monitor_url() {
+            return gps_monitor_url;
+        }
+
+        public void setGps_monitor_url(String gps_monitor_url) {
+            this.gps_monitor_url = gps_monitor_url;
+        }
+
+        public MapJsonBean getMap_json() {
+            return map_json;
+        }
+
+        public void setMap_json(MapJsonBean map_json) {
+            this.map_json = map_json;
+        }
+
+        public String getVersion() {
+            return version;
+        }
+
+        public void setVersion(String version) {
+            this.version = version;
+        }
+
+        public String getPzh() {
+            return pzh;
+        }
+
+        public void setPzh(String pzh) {
+            this.pzh = pzh;
+        }
+
+        public static class MapJsonBean {
+            /**
+             * left_front_tire : [12,13]
+             * main_ant : [642214.3436,3270761.9102]
+             * right_rear_glass : [58,59,60,61]
+             * body : [0,1,2,3,4,5,6,7,8,9,10,11,32,33,34,35,36,37,38,39,40,41,42,43]
+             * ground_height : 331.6199
+             * type : car
+             * version : 1.0
+             * point : [642216.5511,3270759.543,642216.7239,3270759.7759,642216.8133,3270759.8769,642216.859,3270760.3094,642216.7995,3270760.4553,642216.5513,3270760.7819,642216.242,3270761.0874,642215.5468,3270761.8527,642214.7732,3270762.7061,642214.483,3270762.97,642214.1131,3270763.2124,642213.7448,3270763.0632,642216.5364,3270760.7594,642216.4056,3270760.6352,642214.763,3270762.684,642214.6482,3270762.5763,642216.0948,3270760.559,642216.2863,3270760.9176,642215.5665,3270761.3672,642215.3224,3270761.075,642215.8444,3270760.2702,642216.0948,3270760.559,642216.1878,3270761.022,642214.5299,3270762.782,642214.7092,3270762.266,642215.5793,3270761.43,642213.9578,3270762.621,642214.4689,3270762.846,642214.6577,3270762.255,642214.3621,3270762.0998,642214.242,3270762.0047,642214.3621,3270762.0098,642213.4524,3270762.8314,642213.2324,3270762.5872,642213.0537,3270762.2115,642213.3048,3270761.7942,642213.5453,3270761.5047,642214.2823,3270760.7212,642215.0634,3270759.9012,642215.346,3270759.5816,642215.6092,3270759.3543,642215.7336,3270759.2982,642216.2033,3270759.2972,642216.3468,3270759.4079,642215.3611,3270759.6032,642215.4909,3270759.7158,642213.5608,3270761.519,642213.6874,3270761.6509,642213.4249,3270761.767,642215.0934,3270759.996,642214.7549,3270760.717,642213.9469,3270761.587,642215.0584,3270760.8537,642214.8047,3270760.7012,642215.1958,3270759.8877,642215.6907,3270760.1429,642215.8444,3270760.2702,642216.0948,3270760.559,642214.1323,3270761.8943,642213.9566,3270761.6397,642213.3781,3270761.8166,642213.5721,3270762.2307,642214.3621,3270762.0998]
+             * ant_pitch : 0.602
+             * axial : [0,32]
+             * ant_height : 333.0715
+             * left_rear_glass : [26,27,28,29]
+             * right_front_tire : [44,45]
+             * right_rear_tire : [46,47]
+             * right_front_glass : [52,53,54,55]
+             * name : 棣栭椹炬牎鑱旇姵杞︽ā鍨�
+             * left_rear_tire : [14,15]
+             * left_front_glass : [16,17,18,19]
+             * left_center_glass : [22,23,24,25]
+             * right_center_glass : [48,49,50,51]
+             */
+
+            private double ground_height;
+            private String type;
+            private String version;
+            private double ant_pitch;
+            private double ant_height;
+            private String name;
+            private List<Double> left_front_tire;
+            private List<Double> main_ant;
+            private List<Double> right_rear_glass;
+            private List<Double> body;
+            private List<Double> point;
+            private List<Double> axial;
+            private List<Double> left_rear_glass;
+            private List<Double> right_front_tire;
+            private List<Double> right_rear_tire;
+            private List<Double> right_front_glass;
+            private List<Double> left_rear_tire;
+            private List<Double> left_front_glass;
+            private List<Double> left_center_glass;
+            private List<Double> right_center_glass;
+
+            public double getGround_height() {
+                return ground_height;
+            }
+
+            public void setGround_height(double ground_height) {
+                this.ground_height = ground_height;
+            }
+
+            public String getType() {
+                return type;
+            }
+
+            public void setType(String type) {
+                this.type = type;
+            }
+
+            public String getVersion() {
+                return version;
+            }
+
+            public void setVersion(String version) {
+                this.version = version;
+            }
+
+            public double getAnt_pitch() {
+                return ant_pitch;
+            }
+
+            public void setAnt_pitch(double ant_pitch) {
+                this.ant_pitch = ant_pitch;
+            }
+
+            public double getAnt_height() {
+                return ant_height;
+            }
+
+            public void setAnt_height(double ant_height) {
+                this.ant_height = ant_height;
+            }
+
+            public String getName() {
+                return name;
+            }
+
+            public void setName(String name) {
+                this.name = name;
+            }
+
+            public List<Double> getLeft_front_tire() {
+                return left_front_tire;
+            }
+
+            public void setLeft_front_tire(List<Double> left_front_tire) {
+                this.left_front_tire = left_front_tire;
+            }
+
+            public List<Double> getMain_ant() {
+                return main_ant;
+            }
+
+            public void setMain_ant(List<Double> main_ant) {
+                this.main_ant = main_ant;
+            }
+
+            public List<Double> getRight_rear_glass() {
+                return right_rear_glass;
+            }
+
+            public void setRight_rear_glass(List<Double> right_rear_glass) {
+                this.right_rear_glass = right_rear_glass;
+            }
+
+            public List<Double> getBody() {
+                return body;
+            }
+
+            public void setBody(List<Double> body) {
+                this.body = body;
+            }
+
+            public List<Double> getPoint() {
+                return point;
+            }
+
+            public void setPoint(List<Double> point) {
+                this.point = point;
+            }
+
+            public List<Double> getAxial() {
+                return axial;
+            }
+
+            public void setAxial(List<Double> axial) {
+                this.axial = axial;
+            }
+
+            public List<Double> getLeft_rear_glass() {
+                return left_rear_glass;
+            }
+
+            public void setLeft_rear_glass(List<Double> left_rear_glass) {
+                this.left_rear_glass = left_rear_glass;
+            }
+
+            public List<Double> getRight_front_tire() {
+                return right_front_tire;
+            }
+
+            public void setRight_front_tire(List<Double> right_front_tire) {
+                this.right_front_tire = right_front_tire;
+            }
+
+            public List<Double> getRight_rear_tire() {
+                return right_rear_tire;
+            }
+
+            public void setRight_rear_tire(List<Double> right_rear_tire) {
+                this.right_rear_tire = right_rear_tire;
+            }
+
+            public List<Double> getRight_front_glass() {
+                return right_front_glass;
+            }
+
+            public void setRight_front_glass(List<Double> right_front_glass) {
+                this.right_front_glass = right_front_glass;
+            }
+
+            public List<Double> getLeft_rear_tire() {
+                return left_rear_tire;
+            }
+
+            public void setLeft_rear_tire(List<Double> left_rear_tire) {
+                this.left_rear_tire = left_rear_tire;
+            }
+
+            public List<Double> getLeft_front_glass() {
+                return left_front_glass;
+            }
+
+            public void setLeft_front_glass(List<Double> left_front_glass) {
+                this.left_front_glass = left_front_glass;
+            }
+
+            public List<Double> getLeft_center_glass() {
+                return left_center_glass;
+            }
+
+            public void setLeft_center_glass(List<Double> left_center_glass) {
+                this.left_center_glass = left_center_glass;
+            }
+
+            public List<Double> getRight_center_glass() {
+                return right_center_glass;
+            }
+
+            public void setRight_center_glass(List<Double> right_center_glass) {
+                this.right_center_glass = right_center_glass;
+            }
+        }
+    }
+//    /**
+//     * result : true
+//     * data : {"server":"gps.safeluck.com","port":"3301","gps_monitor_url":"https%3A%2F%2Ftrainsim.aaej.cn%2F%23%2Fvisitor%2Fmonitor%3Fdevice_id%3D0314200100000004%26area_type%3Dcar","map_json":{"left_front_tire":[9,10],"main_ant":[428984.9367,3291974.6021],"type":"car","body":[0,1,2,3,4,5,6,7,8,13,14,15,16,17,18,19,20,21],"ground_height":229.8357,"version":"0.1","point":[428984.1653,3291977.6796,428983.7684,3291977.5547,428983.498,3291977.0243,428983.5552,3291976.6508,428983.8355,3291975.483,428984.0438,3291974.7034,428984.1558,3291974.1226,428984.5245,3291973.295,428984.8693,3291973.2598,428983.5944,3291976.6639,428983.769,3291976.6702,428984.203,3291974.1338,428984.342,3291974.1803,428985.23,3291973.3175,428985.6473,3291973.4636,428985.8995,3291973.6719,428985.8234,3291974.5267,428985.6107,3291975.3336,428985.4377,3291976.0995,428985.1876,3291977.0475,428984.9813,3291977.5092,428984.5666,3291977.7383,428985.1356,3291977.0333,428984.9657,3291976.9994,428985.785,3291974.5007,428985.6423,3291974.4559],"axial":[0,13],"ant_pitch":0.081,"ant_height":231.2434,"right_front_tire":[22,23],"right_rear_tire":[24,25],"name":"娑櫟浜ら�氶┚鏍�","left_rear_tire":[11,12]},"version":"0.1","pzh":"璞獷8000娴�"}
+//     */
+//
+//
+//    private boolean result;
+//    private DataBean data;
+//
+//    public boolean isResult() {
+//        return result;
+//    }
+//
+//    public void setResult(boolean result) {
+//        this.result = result;
+//    }
+//
+//    public DataBean getData() {
+//        return data;
+//    }
+//
+//    public void setData(DataBean data) {
+//        this.data = data;
+//    }
+//
+//    public static class DataBean {
+//        /**
+//         * server : gps.safeluck.com
+//         * port : 3301
+//         * map_json : {"axial":[0,12],"left_front_tire":[8,9],"main_ant":[-9151.5063,13030.5118],"right_front_tire":[20,21],"right_rear_tire":[22,23],"name":"绉戜簩鍦鸿�冭溅妯″瀷","left_rear_tire":[10,11],"type":"car","body":[0,1,2,3,4,5,6,7,12,13,14,15,16,17,18,19],"point":[-9149.6063,13033.0768,-9149.9978,13033.3124,-9150.3258,13033.3485,-9150.8341,13032.8985,-9151.7318,13031.6639,-9152.3573,13030.83,-9152.5214,13030.5639,-9152.602,13030.3105,-9150.8053,13032.8843,-9150.6537,13032.7602,-9152.3352,13030.8124,-9152.221,13030.7008,-9152.092,13029.7892,-9151.4638,13029.4333,-9151.2111,13029.568,-9150.9808,13029.8341,-9150.3546,13030.6796,-9149.458,13031.8642,-9149.1611,13032.4276,-9149.2827,13032.7653,-9149.4842,13031.8708,-9149.6176,13031.9937,-9151.0011,13029.8717,-9151.1367,13029.9878]}
+//         * pzh : 璞獷8000娴�
+//         */
+//
+//        private String server;
+//        private String port;
+//        private String version;
+//
+//        public String getGps_monitor_url() {
+//            return gps_monitor_url;
+//        }
+//
+//        public void setGps_monitor_url(String gps_monitor_url) {
+//            this.gps_monitor_url = gps_monitor_url;
+//        }
+//
+//        private String gps_monitor_url;
+//        private MapJsonBean map_json;
+//        private String pzh;
+//
+//        public String getServer() {
+//            return server;
+//        }
+//
+//        public String getVersion() {
+//            return version;
+//        }
+//
+//        public void setVersion(String version) {
+//            this.version = version;
+//        }
+//
+//
+//
+//        public void setServer(String server) {
+//            this.server = server;
+//        }
+//
+//        public String getPort() {
+//            return port;
+//        }
+//
+//        public void setPort(String port) {
+//            this.port = port;
+//        }
+//
+//        public MapJsonBean getMap_json() {
+//            return map_json;
+//        }
+//
+//        public void setMap_json(MapJsonBean map_json) {
+//            this.map_json = map_json;
+//        }
+//
+//        public String getPzh() {
+//            return pzh;
+//        }
+//
+//        public void setPzh(String pzh) {
+//            this.pzh = pzh;
+//        }
+//
+//        public static class MapJsonBean {
+//            /**
+//             * axial : [0,12]
+//             * left_front_tire : [8,9]
+//             * main_ant : [-9151.5063,13030.5118]
+//             * right_front_tire : [20,21]
+//             * right_rear_tire : [22,23]
+//             * name : 绉戜簩鍦鸿�冭溅妯″瀷
+//             * left_rear_tire : [10,11]
+//             * type : car
+//             * body : [0,1,2,3,4,5,6,7,12,13,14,15,16,17,18,19]
+//             * point : [-9149.6063,13033.0768,-9149.9978,13033.3124,-9150.3258,13033.3485,-9150.8341,13032.8985,-9151.7318,13031.6639,-9152.3573,13030.83,-9152.5214,13030.5639,-9152.602,13030.3105,-9150.8053,13032.8843,-9150.6537,13032.7602,-9152.3352,13030.8124,-9152.221,13030.7008,-9152.092,13029.7892,-9151.4638,13029.4333,-9151.2111,13029.568,-9150.9808,13029.8341,-9150.3546,13030.6796,-9149.458,13031.8642,-9149.1611,13032.4276,-9149.2827,13032.7653,-9149.4842,13031.8708,-9149.6176,13031.9937,-9151.0011,13029.8717,-9151.1367,13029.9878]
+//             */
+//
+//            private String name;
+//            private String type;
+//            private List<Integer> axial;
+//            private List<Integer> left_front_tire;
+//            private List<Double> main_ant;
+//            private List<Integer> right_front_tire;
+//            private List<Integer> right_rear_tire;
+//            private List<Integer> left_rear_tire;
+//            private List<Integer> body;
+//            private List<Double> point;
+//
+//    private double ground_height;
+//    private String version;
+//    private double ant_pitch;
+//    private double ant_height;
+//
+//            public String getName() {
+//                return name;
+//            }
+//
+//            public void setName(String name) {
+//                this.name = name;
+//            }
+//
+//            public String getType() {
+//                return type;
+//            }
+//
+//            public void setType(String type) {
+//                this.type = type;
+//            }
+//
+//            public List<Integer> getAxial() {
+//                return axial;
+//            }
+//
+//
+//    public double getGround_height() {
+//        return ground_height;
+//    }
+//
+//    public void setGround_height(double ground_height) {
+//        this.ground_height = ground_height;
+//    }
+//
+//    public String getVersion() {
+//        return version;
+//    }
+//
+//    public void setVersion(String version) {
+//        this.version = version;
+//    }
+//
+//    public double getAnt_pitch() {
+//        return ant_pitch;
+//    }
+//
+//    public void setAnt_pitch(double ant_pitch) {
+//        this.ant_pitch = ant_pitch;
+//    }
+//
+//    public double getAnt_height() {
+//        return ant_height;
+//    }
+//
+//    public void setAnt_height(double ant_height) {
+//        this.ant_height = ant_height;
+//    }
+//            public void setAxial(List<Integer> axial) {
+//                this.axial = axial;
+//            }
+//
+//            public List<Integer> getLeft_front_tire() {
+//                return left_front_tire;
+//            }
+//
+//            public void setLeft_front_tire(List<Integer> left_front_tire) {
+//                this.left_front_tire = left_front_tire;
+//            }
+//
+//            public List<Double> getMain_ant() {
+//                return main_ant;
+//            }
+//
+//            public void setMain_ant(List<Double> main_ant) {
+//                this.main_ant = main_ant;
+//            }
+//
+//            public List<Integer> getRight_front_tire() {
+//                return right_front_tire;
+//            }
+//
+//            public void setRight_front_tire(List<Integer> right_front_tire) {
+//                this.right_front_tire = right_front_tire;
+//            }
+//
+//            public List<Integer> getRight_rear_tire() {
+//                return right_rear_tire;
+//            }
+//
+//            public void setRight_rear_tire(List<Integer> right_rear_tire) {
+//                this.right_rear_tire = right_rear_tire;
+//            }
+//
+//            public List<Integer> getLeft_rear_tire() {
+//                return left_rear_tire;
+//            }
+//
+//            public void setLeft_rear_tire(List<Integer> left_rear_tire) {
+//                this.left_rear_tire = left_rear_tire;
+//            }
+//
+//            public List<Integer> getBody() {
+//                return body;
+//            }
+//
+//            public void setBody(List<Integer> body) {
+//                this.body = body;
+//            }
+//
+//            public List<Double> getPoint() {
+//                return point;
+//            }
+//
+//            public void setPoint(List<Double> point) {
+//                this.point = point;
+//            }
+//        }
+//    }
+
+
+
+}
diff --git a/app/src/main/java/safeluck/drive/evaluation/util/DataInit.kt b/app/src/main/java/safeluck/drive/evaluation/util/DataInit.kt
index d3e5108..85633f0 100644
--- a/app/src/main/java/safeluck/drive/evaluation/util/DataInit.kt
+++ b/app/src/main/java/safeluck/drive/evaluation/util/DataInit.kt
@@ -24,10 +24,7 @@
 import safeluck.drive.evaluation.app
 import safeluck.drive.evaluation.bean.*
 import safeluck.drive.evaluation.bean.SimulateNightBean.QuestionBean
-import safeluck.drive.evaluation.httpmodule.HttpCarRespBean
-import safeluck.drive.evaluation.httpmodule.HttpRequetBean
-import safeluck.drive.evaluation.httpmodule.HttpRoadMapRsp
-import safeluck.drive.evaluation.httpmodule.HttpYardRsp
+import safeluck.drive.evaluation.httpmodule.*
 import safeluck.drive.evaluation.httpmodule.RetrofitCreator.Companion.getRestService
 import safeluck.drive.evaluation.platformMessage.PlatFormConstant
 import java.io.File
@@ -326,6 +323,7 @@
                         else ->{
                             mapInfoHead.type = BaseDataUIBean.TYPE_.car
                             val car = gson.fromJson<HttpCarRespBean>(str,HttpCarRespBean::class.java)
+                            val gcar = gson.fromJson<HttpGisCarRespBean>(str, HttpGisCarRespBean::class.java)
 //                        car.isResult = false
                             if (car.isResult){
                                 if (car.data !=null){
@@ -337,8 +335,10 @@
 //                                    Log.i(TAG, "瑙f瀽涔嬪悗鐨勮溅妯″瀷=$str")
                                     CThreadPoolExecutor.runInBackground(Runnable{
                                         str = gson.toJson(car.data.map_json)
+                                        var giscarStr = gson.toJson(gcar.data.map_json)
                                         MyLog.i(PlatFormConstant.HTTPTAG,"杞﹁締妯″瀷淇濆瓨鎴愬姛")
                                         FileUtil.writeTxtFileToSD(app.getAppContext(),fileName,str,"")
+                                        FileUtil.writeTxtFileToSD(app.getAppContext(),"gis"+fileName,giscarStr,"")
                                         sendVehicleInfo()
                                     })
 
diff --git a/app/src/main/res/layout/layout_arc_gis.xml b/app/src/main/res/layout/layout_arc_gis.xml
index 58a2d20..b393920 100644
--- a/app/src/main/res/layout/layout_arc_gis.xml
+++ b/app/src/main/res/layout/layout_arc_gis.xml
@@ -1,22 +1,34 @@
 <?xml version="1.0" encoding="utf-8"?>
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:id="@+id/activity_main"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-   >
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools" android:layout_height="match_parent"
+    android:orientation="horizontal"
+    android:layout_width="match_parent">
+    <FrameLayout
+        android:id="@+id/activity_main"
+        android:layout_width="0dp"
+        android:layout_height="match_parent"
+      android:layout_weight="3"
+        >
 
-    <com.esri.arcgisruntime.mapping.view.MapView
-        android:id="@+id/mapView"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent" >
-    </com.esri.arcgisruntime.mapping.view.MapView>
-    <Button
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_gravity="bottom|left"
-        android:id="@+id/btn_change_map"
-        android:background="@drawable/btn_state_save"
+        <com.esri.arcgisruntime.mapping.view.MapView
+            android:id="@+id/mapView"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            >
+        </com.esri.arcgisruntime.mapping.view.MapView>
+        <Button
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="bottom|left"
+            android:id="@+id/btn_change_map"
+            android:background="@drawable/btn_state_save"
 
-        android:text="鍒囨崲鍦板浘"/>
-</FrameLayout>
\ No newline at end of file
+            android:text="鍒囨崲鍦板浘"/>
+
+    </FrameLayout>
+    <SurfaceView
+        android:layout_width="0dp"
+        android:layout_height="match_parent"
+        android:layout_weight="1"
+        android:id="@+id/surfaceview_arcgis"/>
+</LinearLayout>

--
Gitblit v1.8.0