lizhanwei
2020-01-09 db61166b033e61d543f2489b725118ee5b09d521
增加推送车辆模型,场地地图接口;增加查看地图Fragment
5个文件已修改
3个文件已添加
496 ■■■■ 已修改文件
app/src/main/assets/map.json 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/assets/vehiclemodel.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/Constant.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/app.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/MapFragment.java 365 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/NetWorkTrainFragment.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/util/FileUtil.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/layout_mapfragment.xml 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/assets/map.json
New file
@@ -0,0 +1,23 @@
[{
  "id": 863,
  "item": 1,
  "point": [{
    "x-y": [-11.9669, 28.013, -11.5114, 27.137, -10.8069, 27.5039, -10.2969, 26.4212, -9.2102, 26.8894, -9.6513, 28.0027, -8.9758, 28.3797, -9.5057, 29.3232]
  },
    {
      "x-y": [-11.9669, 28.013, -11.5114, 27.137, -10.8069, 27.5039, -10.2969, 26.4212, -9.2102, 26.8894, -9.6513, 28.0027, -8.9758, 28.3797, -9.5057, 29.3232]
    }
  ]
},
  {
    "id": 3000,
    "item": 2,
    "point": [{
      "x-y": [-11.9669, 28.013, -11.5114, 27.137, -10.8069, 27.5039, -10.2969, 26.4212, -9.2102, 26.8894, -9.6513, 28.0027, -8.9758, 28.3797, -9.5057, 29.3232]
    },
      {
        "x-y": [-11.9669, 28.013, -11.5114, 27.137, -10.8069, 27.5039, -10.2969, 26.4212, -9.2102, 26.8894, -9.6513, 28.0027, -8.9758, 28.3797, -9.5057, 29.3232]
      }
    ]
  }
]
app/src/main/assets/vehiclemodel.json
New file
@@ -0,0 +1,9 @@
{
  "main_ant": [123.3, 85.5],
  "axial": [0, 18],
  "left_front_tire": [4, 5],
  "right_front_tire": [6, 7],
  "left_rear_tire": [8, 9],
  "right_rear_tire": [10, 11],
  "point": [-11.9669, 28.013, -11.5114, 27.137, -10.8069, 27.5039, -10.2969, 26.4212, -9.2102, 26.8894, -9.6513, 28.0027, -8.9758, 28.3797, -9.5057, 29.3232]
}
app/src/main/java/safeluck/drive/evaluation/Constant.java
@@ -50,4 +50,6 @@
    //I类评判表
    public static final int SUBJECT_I = 1;
    public static final String MAP = "map.json";
    public static final String VEHICLE = "vehiclemodel.json";
}
app/src/main/java/safeluck/drive/evaluation/app.java
@@ -27,6 +27,7 @@
import safeluck.drive.evaluation.DB.failitems.FailedProjRepository;
import safeluck.drive.evaluation.DB.rtktb.RTKConfig;
import safeluck.drive.evaluation.DB.rtktb.RTKWorkRepository;
import safeluck.drive.evaluation.util.FileUtil;
import safeluck.drive.evaluation.util.SystemUtil;
/**
@@ -189,6 +190,15 @@
                }
                rtkWorkRepository.insertRTKConfig(rtkConfig);
                break;
            case Constant.FETCH_MAP_INFO:
                StringBuffer buffer =FileUtil.readAssetTxtFile(this,Constant.MAP);
                AYSdk.getInstance().sendCmd(Constant.PUSH_MAP_INFO,buffer.toString());
                break;
            case Constant.REQ_VECHILE_PROFILE:
                StringBuffer vebuffer =FileUtil.readAssetTxtFile(this,Constant.VEHICLE);
                AYSdk.getInstance().sendCmd(Constant.PUSH_VECHILE_PROFILE,vebuffer.toString());
                break;
        }
    }
app/src/main/java/safeluck/drive/evaluation/fragment/MapFragment.java
@@ -1,72 +1,295 @@
//package safeluck.drive.evaluation.fragment;
package safeluck.drive.evaluation.fragment;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.opengl.GLSurfaceView;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.Toolbar;
import me.yokeyword.fragmentation.SupportFragment;
import safeluck.drive.evaluation.R;
/**
 * MyApplication2
 * Created by lzw on 2019/9/26. 15:20:58
 * 邮箱:632393724@qq.com
 * All Rights Saved! Chongqing AnYun Tech co. LTD
 */
public class MapFragment extends SupportFragment{
    private boolean isDrawing = false;
    public static SupportFragment newInstance(){
        return new MapFragment();
    }
    private SurfaceView mSurfaceView;
    private static final String TAG = "MapFragment";
    private SurfaceHolder holder;
    Path path = new Path();
    private Canvas canvas;
    private int x=-1;
    private int y = -1;
    private Toolbar toolbar;
    private Bitmap bmp = null;
    private Canvas canvas2 = null;
    private Paint paint = null;
    private int screen_width = 0, screen_height = 0;
    private String osd = null;
    private String osd2 = null;
    private String osd3 = null;
    private LinearLayout linearLayout;//surfaceview的父容器,为了移动surfaceview而使用,因为scrollto不能移动view,
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.layout_mapfragment,container,false);
        initView(view);
        return view;
    }
    private void initView(View view) {
        toolbar = view.findViewById(R.id.toolbar);
        toolbar.setTitle("简单地图");
        toolbar.setNavigationIcon(R.drawable.ic_arrow_back_white_24dp);
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                _mActivity.onBackPressed();
            }
        });
        mSurfaceView = view.findViewById(R.id.surfaceview);
        holder = mSurfaceView.getHolder();
        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();
                    surfaceHolder.unlockCanvasAndPost(canvas);
                    bmp = Bitmap.createBitmap(screen_width, screen_height, Bitmap.Config.ARGB_8888);
                    canvas2 = new Canvas(bmp);
                    canvas2.drawColor(Color.WHITE);
                    paint = new Paint();
                    paint.setTextSize(30);
                    paint.setColor(Color.BLACK);
                    paint.setStrokeWidth(1.5f);
                    paint.setAntiAlias(true);
                    paint.setStyle(Paint.Style.STROKE);
                    holder.lockCanvas();
                    canvas.drawBitmap(bmp, 0, 0, paint);
                    holder.unlockCanvasAndPost(canvas);
                }
                new Thread(new NeedForSpeed()).start();
            }
            @Override
            public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {
            }
            @Override
            public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
            }
        });
    }
    class NeedForSpeed implements Runnable {
        @Override
        public void run() {
            double map[][] = {{1,1}, {10,1}, {10,10}, {1,10}};
            double car[][] = {{3,3}, {8,3}, {8,8}, {3,8}};
            DrawMap(map, car);
        }
    }
    public void DrawMap(final double [][]map, final double [][]car) {
        if (canvas2 == null || bmp == null) {
            return;
        }
        _mActivity.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                double base_x = 100, base_y = 100;
                double max_x = 0, min_x = 0, max_y = 0, min_y = 0;
                Log.d(TAG, "DrawMap map size " + map.length + " car size " + car.length);
                for (int i = 0; i < map.length; i++) {
                    if (i == 0) {
                        max_x = map[0][0];
                        min_x = map[0][0];
                        max_y = map[0][1];
                        min_y = map[0][1];
                    } else {
                        if (max_x < map[i][0]) {
                            max_x = map[i][0];
                        }
                        if (min_x > map[i][0]) {
                            min_x = map[i][0];
                        }
                        if (max_y < map[i][1]) {
                            max_y = map[i][1];
                        }
                        if (min_y > map[i][1]) {
                            min_y = map[i][1];
                        }
                    }
                }
                Log.d(TAG, "DrawMap max_x " + max_x + " max_y " + max_y + " min_x " + min_x + " min_y " + min_y);
                for (int i = 0; i < car.length; i++) {
                    if (max_x < car[i][0]) {
                        max_x = car[i][0];
                    }
                    if (min_x > car[i][0]) {
                        min_x = car[i][0];
                    }
                    if (max_y < car[i][1]) {
                        max_y = car[i][1];
                    }
                    if (min_y > car[i][1]) {
                        min_y = car[i][1];
                    }
                }
                Log.d(TAG, "DrawMap max_x " + max_x + " max_y " + max_y + " min_x " + min_x + " min_y " + min_y);
                long scale_x = Math.round(500 / (max_x - min_x));
                long scale_y = Math.round(300 / (max_y - min_y));
                if (scale_x >= scale_y) {
                    scale_x = scale_y;
                } else {
                    scale_y = scale_x;
                }
                Log.d(TAG, "DrawMap scale_x " + scale_x + " scale_y " + scale_y);
                canvas2.drawColor(Color.WHITE);
                paint.setStyle(Paint.Style.STROKE);
                Path path = new Path();
                if (map.length != 9) {
                    Log.d(TAG, "DrawMap X = " + String.format("%f", (float) (base_x + (map[0][0] - min_x) * scale_x)) + " Y = " +  String.format("%f", (float) (base_y + (map[0][1] - min_y) * scale_y)));
                    path.moveTo((float) (base_x + (map[0][0] - min_x) * scale_x), (float) (base_y + (map[0][1] - min_y) * scale_y));
                    for (int i = 1; i < map.length; i++) {
                        Log.d(TAG, "DrawMap to X = " + (float) (base_x + (map[i][0] - min_x) * scale_x) + " Y = "+ (float) (base_y + (map[i][1] - min_y) * scale_y));
                        path.lineTo((float) (base_x + (map[i][0] - min_x) * scale_x), (float) (base_y + (map[i][1] - min_y) * scale_y));
                    }
                    path.close();
                } else {
                    path.moveTo((float) (base_x + (map[0][0] - min_x) * scale_x), (float) (base_y + (map[0][1] - min_y) * scale_y));
                    path.lineTo((float) (base_x + (map[8][0] - min_x) * scale_x), (float) (base_y + (map[8][1] - min_y) * scale_y));
                    path.moveTo((float) (base_x + (map[2][0] - min_x) * scale_x), (float) (base_y + (map[2][1] - min_y) * scale_y));
                    path.lineTo((float) (base_x + (map[1][0] - min_x) * scale_x), (float) (base_y + (map[1][1] - min_y) * scale_y));
                    path.moveTo((float) (base_x + (map[3][0] - min_x) * scale_x), (float) (base_y + (map[3][1] - min_y) * scale_y));
                    path.lineTo((float) (base_x + (map[4][0] - min_x) * scale_x), (float) (base_y + (map[4][1] - min_y) * scale_y));
                    path.moveTo((float) (base_x + (map[6][0] - min_x) * scale_x), (float) (base_y + (map[6][1] - min_y) * scale_y));
                    path.lineTo((float) (base_x + (map[5][0] - min_x) * scale_x), (float) (base_y + (map[5][1] - min_y) * scale_y));
                    path.moveTo((float) (base_x + (map[7][0] - min_x) * scale_x), (float) (base_y + (map[7][1] - min_y) * scale_y));
                    path.lineTo((float) (base_x + (map[8][0] - min_x) * scale_x), (float) (base_y + (map[8][1] - min_y) * scale_y));
                }
                canvas2.drawPath(path, paint);
                path.moveTo((float) (base_x + (car[0][0] - min_x) * scale_x), (float) (base_y + (car[0][1] - min_y)*scale_y));
                for (int i = 1; i < car.length; i++)
                    path.lineTo((float) (base_x + (car[i][0] - min_x) * scale_x), (float) (base_y + (car[i][1] - min_y)*scale_y));
                path.close();
                canvas2.drawPath(path, paint);
                paint.setStyle(Paint.Style.FILL_AND_STROKE);
                if (osd != null) {
                    Path pathText = new Path();
                    pathText.moveTo(100, 470);
                    pathText.lineTo(700, 470);
                    canvas2.drawTextOnPath(osd, pathText, 0, 0, paint);//逆时针生成
                }
                if (osd2 != null) {
                    Path pathText = new Path();
                    pathText.moveTo(10, 30);
                    pathText.lineTo(700, 30);
                    canvas2.drawTextOnPath(osd2, pathText, 0, 0, paint);//逆时针生成
                }
                // 提交画布
                Canvas canvas = holder.lockCanvas();
                canvas.drawBitmap(bmp, 0, 0, paint);
                holder.unlockCanvasAndPost(canvas);
            }
        });
    }
    public void CCL(final int c, final int who) {
        _mActivity.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                /*if (canvas2 != null && bmp != null) {
                    if (c == 0)
                        canvas2.drawColor(Color.GREEN);
                    else
                        canvas2.drawColor(Color.GRAY);
                    // 提交画布
                    Canvas canvas = holder.lockCanvas();
                    canvas.drawBitmap(bmp, 0, 0, paint);
                    holder.unlockCanvasAndPost(canvas);
                }*/
//                Button button;
//                if (who == 0) {
//                    button = findViewById(R.id.sample_button);
//                } else {
//                    button = findViewById(R.id.net_button);
//                }
//
//import android.graphics.Canvas;
//import android.graphics.Color;
//import android.graphics.Paint;
//import android.graphics.Path;
//import android.graphics.PathDashPathEffect;
//import android.graphics.Rect;
//import android.graphics.RectF;
//import android.opengl.GLSurfaceView;
//import android.os.Bundle;
//import android.support.annotation.NonNull;
//import android.support.annotation.Nullable;
//import android.support.v7.widget.Toolbar;
//import android.util.Log;
//import android.view.LayoutInflater;
//import android.view.SurfaceHolder;
//import android.view.SurfaceView;
//import android.view.View;
//import android.view.ViewGroup;
//import android.widget.LinearLayout;
//
//import javax.security.auth.login.LoginException;
//
//import me.yokeyword.fragmentation.SupportFragment;
//import safeluck.drive.evaluation.R;
////import safeluck.drive.evaluation.render.GLRender;
//
//
///**
// * MyApplication2
// * Created by lzw on 2019/9/26. 15:20:58
// * 邮箱:632393724@qq.com
// * All Rights Saved! Chongqing AnYun Tech co. LTD
// */
//public class MapFragment extends SupportFragment{
//    private boolean isDrawing = false;
//
//    public static SupportFragment newInstance(){
//        return new MapFragment();
//    }
//    private GLSurfaceView mGLSurfaceView;
//    private static final String TAG = "MapFragment";
//    private SurfaceHolder holder;
//    Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
//    Path path = new Path();
//    private Canvas canvas;
//    private int x=-1;
//    private int y = -1;
//    private Toolbar toolbar;
//
//    private LinearLayout linearLayout;//surfaceview的父容器,为了移动surfaceview而使用,因为scrollto不能移动view,
//
//    @Nullable
//    @Override
//    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
//        View view = inflater.inflate(R.layout.layout_mapfragment,container,false);
//        initView(view);
//        return view;
//    }
//
//    private void initView(View view) {
//        toolbar = view.findViewById(R.id.toolbar);
//        toolbar.setTitle("简单地图");
//
//        mGLSurfaceView = view.findViewById(R.id.glsurface);
//        mGLSurfaceView.setRenderer(new GLRender());
//    }
//
//
//
//}
//                if (c == 0)
//                    button.setBackgroundColor(Color.GREEN);
//                else
//                    button.setBackgroundColor(Color.RED);
            }
        });
    }
}
app/src/main/java/safeluck/drive/evaluation/fragment/NetWorkTrainFragment.java
@@ -86,6 +86,8 @@
    private void initView(View view) {
        mListView = view.findViewById(R.id.lv);
        mListView.setFocusable(false);
        view.findViewById(R.id.view_map).setOnClickListener(this);
        mScoreAdapter = new ScoreAdapter(_mActivity);
        mListView.setAdapter(mScoreAdapter);
        btn_start_exam = view.findViewById(R.id.btn_start);
@@ -121,6 +123,13 @@
                    e.printStackTrace();
                }
                break;
            case R.id.view_map:
                MapFragment mapFragment = findFragment(MapFragment.class);
                if (mapFragment==null){
                    mapFragment = (MapFragment)MapFragment.newInstance();
                }
                start(mapFragment);
                break;
        }
    }
app/src/main/java/safeluck/drive/evaluation/util/FileUtil.java
@@ -5,9 +5,13 @@
import android.content.res.Resources;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
public class FileUtil {
    /**
@@ -43,4 +47,52 @@
        return stringBuffer;
    }
    /**
     *
     * @param fromFile 源文件路径包括文件名(绝对路径)
     * @param toFile
     */
    public static void copyFile(String fromFile,String toFile){
        try {
            InputStream inputStream =new FileInputStream(fromFile);
            OutputStream outputStream = new FileOutputStream(toFile);
            byte[] bytes = new byte[1024];
            while ((inputStream.read(bytes))>0){
                outputStream.write(bytes);
            }
            inputStream.close();
            outputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    /**
     * 拷贝assert目录下的文件到 安装包目录下
     * @param context
     * @param assertfileName
     */
    public static void copyAssertFileToSD(Context context,String assertfileName){
        try {
            InputStream inputStream = null;
            try {
                inputStream = context.getAssets()
                        .open(assertfileName);
            } catch (IOException e) {
                e.printStackTrace();
            }
            OutputStream outputStream = new FileOutputStream(  new File(context.getExternalFilesDir(null), assertfileName));
            byte[] bytes = new byte[1024];
            while ((inputStream.read(bytes))>0){
                outputStream.write(bytes);
            }
            inputStream.close();
            outputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
app/src/main/res/layout/layout_mapfragment.xml
New file
@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <com.google.android.material.appbar.AppBarLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay">
        <androidx.appcompat.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
            app:popupTheme="@style/AppTheme.NoActionBar.PopupOverlay"
            app:titleTextAppearance="@style/Toolbar_TextAppearance_White"/>
    </com.google.android.material.appbar.AppBarLayout>
    <SurfaceView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/surfaceview"/>
</LinearLayout>