lizhanwei
2020-04-02 b5c6c200d60aae805614495512ab24eafcce1fb9
摆正考试地图
5个文件已修改
1个文件已添加
434 ■■■■■ 已修改文件
app/src/main/java/safeluck/drive/evaluation/DB/rtktb/RTKConfigUpdateWorker.kt 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/app.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/MapFragment.java 75 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/httpmodule/HttpCarRespBean.java 181 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/util/FileUtil.java 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/util/Utils.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/DB/rtktb/RTKConfigUpdateWorker.kt
@@ -1,20 +1,31 @@
package safeluck.drive.evaluation.DB.rtktb
import android.content.Context
import android.os.Looper
import android.text.TextUtils
import android.util.Log
import android.widget.Toast
import androidx.work.Worker
import androidx.work.WorkerParameters
import com.anyun.exam.lib.AYSdk
import com.anyun.exam.lib.MyLog
import com.google.gson.Gson
import okhttp3.ResponseBody
import org.json.JSONException
import org.json.JSONObject
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
import safeluck.drive.evaluation.DB.Constant
import safeluck.drive.evaluation.DB.WorkRoomDataBase
import safeluck.drive.evaluation.bean.ExamPlatformData
import safeluck.drive.evaluation.httpmodule.HttpCarRespBean
import safeluck.drive.evaluation.httpmodule.HttpRequetBean
import safeluck.drive.evaluation.httpmodule.RetrofitCreator.Companion.getRestService
import safeluck.drive.evaluation.im.IMSClientBootstrap
import safeluck.drive.evaluation.platformMessage.PlatFormConstant
import safeluck.drive.evaluation.util.FileUtil
import java.io.IOException
class RTKConfigUpdateWorker(context:Context, workerParams: WorkerParameters) :Worker(context, workerParams){
@@ -43,6 +54,59 @@
             */
            phone = sn
            Log.i(TAG,"phone="+phone)
            if (!FileUtil.isMapExist(applicationContext,"map.json")){
                MyLog.i("地图文件不存在,去平台取")
                getRestService().getMapsAndVehicleModel(HttpRequetBean(sn, "place")).enqueue(object : Callback<ResponseBody> {
                    override fun onResponse(call: Call<ResponseBody>, response: Response<ResponseBody>) {
                        var str: String? = null
                        try {
                            str = response.body()!!.string()
                        } catch (e: IOException) {
                            e.printStackTrace()
                        }
                        Log.i(TAG, "服务器返回的body=$str")
                        if (Looper.myLooper() == Looper.getMainLooper()) {
                            Toast.makeText(applicationContext, "主线程", Toast.LENGTH_SHORT).show()
                        }
                    }
                    override fun onFailure(call: Call<ResponseBody>, t: Throwable) {
                        Log.i(TAG, t.localizedMessage)
                    }
                })
            }
            if (!FileUtil.isMapExist(applicationContext,"car.json")){
                MyLog.i("车辆模型文件不存在,去平台取")
                getRestService().getMapsAndVehicleModel(HttpRequetBean(sn, "car")).enqueue(object : Callback<ResponseBody> {
                    override fun onResponse(call: Call<ResponseBody>, response: Response<ResponseBody>) {
                        var str: String? = null
                        try {
                            str = response.body()!!.string()
                            Log.i(TAG, "服务器返回的body=$str")
                            val car = gson.fromJson<HttpCarRespBean>(str,HttpCarRespBean::class.java)
                            if (car.isResult){
                                if (car.data !=null){
                                    str = gson.toJson(car.data.map_json)
                                    Log.i(TAG, "解析之后的车模型=$str")
                                    FileUtil.writeTxtFileToSD(applicationContext,"car.json",str,"")
                                }
                            }
                        } catch (e: IOException) {
                            e.printStackTrace()
                        }
                        if (Looper.myLooper() == Looper.getMainLooper()) {
                            Toast.makeText(applicationContext, "主线程", Toast.LENGTH_SHORT).show()
                        }
                    }
                    override fun onFailure(call: Call<ResponseBody>, t: Throwable) {
                        Log.i(TAG, t.localizedMessage)
                    }
                })
            }
            MyLog.i(PlatFormConstant.TAG,"重置TCP连接")
            IMSClientBootstrap.getInstance().resetConnect();
        }
app/src/main/java/safeluck/drive/evaluation/app.java
@@ -126,7 +126,6 @@
            //2. 如果不能再就去下载
        }
    }
@@ -162,8 +161,6 @@
        }
        switch (cmd) {
            case Constant.NDK_START:
//                sendVechileInfo();
//                sendMapInfo();
                OneTimeWorkRequest examStatausOutWorker = OneTimeWorkRequest.from(ExamStatusOutWorker.class);
                OneTimeWorkRequest mcuUpgradeWorker = OneTimeWorkRequest.from(MCUUpgradeWorker.class);
                WorkManager.getInstance(getApplicationContext()).beginWith(examStatausOutWorker).then(mcuUpgradeWorker).enqueue();
@@ -273,15 +270,18 @@
                try {
                    JSONObject jsonObject =new JSONObject((String)json);
                    int errCode = jsonObject.getInt("error");
                    MyLog.i("收到考试应答错误码="+errCode);
                    switch (errCode){
                        case -1:
                            sendMapInfo();
                            break;
//                            sendMapInfo();
//                            break;
                        case -2:
                            sendVechileInfo();
                            break;
//                            sendVechileInfo();
//                            break;
                        case -3:
                            OneTimeWorkRequest examStatausOutWorker1 = OneTimeWorkRequest.from(ExamStatusOutWorker.class);
                            WorkManager.getInstance(getApplicationContext()).enqueue(examStatausOutWorker1);
                            break;
                    }
                } catch (JSONException e) {
app/src/main/java/safeluck/drive/evaluation/fragment/MapFragment.java
@@ -46,11 +46,13 @@
import safeluck.drive.evaluation.R;
import safeluck.drive.evaluation.bean.ExamMap;
import safeluck.drive.evaluation.bean.ExamPlatformData;
import safeluck.drive.evaluation.bean.Point;
import safeluck.drive.evaluation.bean.RealTimeCarPos;
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;
/**
@@ -214,13 +216,10 @@
        if (canvas2 == null || bmp == null) {
            return;
        }
//        _mActivity.runOnUiThread(new Runnable() {
//            @Override
//            public void run() {
                double base_x = 300, base_y = 20;
                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);
                Log.d(TAG, "DrawMap map size " + map.length + " car size " + car.length+"map other length="+map_other.length);
                for (int i = 0; i < map.length; i++) {
                    if (i == 0) {
@@ -264,20 +263,20 @@
                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];
                    }
                }
//                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);
@@ -291,6 +290,7 @@
                }
                Log.d(TAG, "DrawMap scale_x " + scale_x + " scale_y " + scale_y);
                canvas2.drawColor(Color.WHITE);
@@ -752,6 +752,7 @@
                    map_id = timeCarPos.getMap_id();
                    List<Double> mainAnt = timeCarPos.getMain_ant();
                    Point mainPoint = new Point(mainAnt.get(0), mainAnt.get(1));
                    List<Integer> tire1 = timeCarPos.getLeft_front_tire();
                    List<Integer> tire2 = timeCarPos.getRight_front_tire();
                    List<Integer> tire3 = timeCarPos.getLeft_rear_tire();
@@ -857,12 +858,48 @@
                                        if ((k % 2) == 0) {
                                            map[map_line][0] = xys.get(k);
                                        } else {
                                            double value = 0 - xys.get(k);
                                            double value = xys.get(k);
                                            Log.i(TAG, "onCEvent: map新值=" + value + " 位置:" + k);
                                            map[map_line][1] = value;
                                            map_line++;
                                        }
                                    }
                                    Log.i(TAG,String.format("下面开始旋转,map.length=%d",map.length));
                                    Point point2 = new Point(map[0][0],map[0][1]);
                                    double deg = 0.0;
                                    switch (map.length){
                                        case 8:
                                            Point point1 = new Point(map[map.length-1][0],map[map.length-1][1]);
                                            deg = Utils.YawOf(point2,point1);
                                            deg +=270;
                                            for (int k = 0; k < map.length; k++) {
                                                Point point11 = new Point(map[k][0],map[k][1]);
                                                Point point = Utils.rotatePoint(point11,point2,deg);
                                                map[k][0] = point.getX();
                                                map[k][1] = 0-point.getY();
                                                Log.i(TAG,String.format("旋转后的值map[%d][0]=%f,map[%d][1]=%f,deg=%f",k,map[k][0],k,map[k][1],deg));
                                            }
                                            break;
                                        case 9:
                                            break;
                                        case 6:
                                            break;
                                            default:
                                                break;
                                    }
                                    for (int k = 0; k < car.length; k++) {
                                        Point oldPoint = new Point(car[k][0], car[k][1]);
                                        Point newPoint = Utils.rotatePoint(oldPoint, point2, deg );
                                        car[k][0] = newPoint.getX();
                                        car[k][1] = newPoint.getY();
//                                        car[k][0] = car[k][0] - point2.getX();
//                                        car[k][1] = car[k][1] - point2.getY();
//                                        car[k][1] = -car[k][1];
                                        Log.i(TAG,String.format("旋转后的值car[%d][0]=%f,car[%d][1]=%f,deg=%f",k,car[k][0],k,car[k][1],deg));
                                    }
                                }else{
                                    MyLog.i(TAG,"暂时支持曲线");
                                    map_other = new double[xys.size()/2][2];
app/src/main/java/safeluck/drive/evaluation/httpmodule/HttpCarRespBean.java
New file
@@ -0,0 +1,181 @@
package safeluck.drive.evaluation.httpmodule;
import java.util.List;
public class HttpCarRespBean {
    /**
     * result : true
     * data : {"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":"豫E8000测"}
     */
    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 : 豫E8000测
         */
        private String server;
        private String port;
        private MapJsonBean map_json;
        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 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<Double> axial;
            private List<Double> left_front_tire;
            private List<Double> main_ant;
            private List<Double> right_front_tire;
            private List<Double> right_rear_tire;
            private List<Double> left_rear_tire;
            private List<Double> body;
            private List<Double> point;
            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<Double> getAxial() {
                return axial;
            }
            public void setAxial(List<Double> axial) {
                this.axial = axial;
            }
            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_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> 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> 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;
            }
        }
    }
}
app/src/main/java/safeluck/drive/evaluation/util/FileUtil.java
@@ -10,6 +10,7 @@
import com.anyun.exam.lib.MyLog;
import com.anyun.exam.lib.util.ByteUtil;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.File;
@@ -69,6 +70,16 @@
            Log.i(TAG, "createdirs: 目录已经存在");
        }
    }
    public static boolean isMapExist(Context context,String mapName){
        File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+File.separator+context.getPackageName(),mapName);
        if (file.exists()){
            return true;
        }else{
            return false;
        }
    }
    public static StringBuffer readTxtFileFromSD(Context context,String fileName,boolean isRootDir){
@@ -317,4 +328,46 @@
        }
        return data;
    }
    public static void main(String[] args){
    }
    /**
     * 根目录下+"包名"的路径下的子路径
     * @param context
     * @param subDir
     */
    public static void createdirs(Context context,String subDir){
        String dir = Environment.getExternalStorageDirectory().getAbsolutePath()+"/"+context.getPackageName()+"/";
        if (!TextUtils.isEmpty(subDir)){
            dir += subDir+"/";
        }
        File file = new File(dir);
        if (!file.exists()){
            file.mkdirs();
        }else{
            Log.i(TAG, "createdirs: 目录已经存在");
        }
    }
    public static void writeTxtFileToSD(Context context, String fileName, String content,String subDir){
        Log.i(TAG, "writeTxtFileToSD: content:"+content);
        createdirs(context,subDir);
        String dir = Environment.getExternalStorageDirectory().getAbsolutePath()+"/"+context.getPackageName()+"/"+subDir+"/";
        File file = new File(dir,fileName);
        if (file.exists()){
            file.delete();
        }
        try {
            OutputStream outputStream = new FileOutputStream(file);
            BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(outputStream);
            bufferedOutputStream.write(content.getBytes());
            bufferedOutputStream.flush();
            outputStream.close();
            bufferedOutputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
app/src/main/java/safeluck/drive/evaluation/util/Utils.java
@@ -416,13 +416,13 @@
    private static boolean isEqual(double a,double b){
        return (Math.abs(a-b)<1e-3);
    }
    private static Point rotatePoint(Point oldPoint,Point centre,double degree){
    public static Point rotatePoint(Point oldPoint,Point centre,double degree){
        Point newPoint = new Point(0.0,0.0);
        newPoint.setX(getdouble((oldPoint.getX()-centre.getX())*cos(toRadians(degree)) -
                (oldPoint.getY()-centre.getY())*sin(toRadians(degree)) + centre.getX(),6)) ;
                (oldPoint.getY()-centre.getY())*sin(toRadians(degree)) + centre.getX(),4)) ;
        newPoint.setY(getdouble( (oldPoint.getX()-centre.getX())*sin(toRadians(degree))
                + (oldPoint.getY()-centre.getY())*cos(toRadians(degree)) + centre.getY(),6));
                + (oldPoint.getY()-centre.getY())*cos(toRadians(degree)) + centre.getY(),4));
        return newPoint;
    }
@@ -436,6 +436,47 @@
        return b.setScale(reserve, BigDecimal.ROUND_HALF_UP).doubleValue();
    }
   public static double YawOf(Point p1, Point p2)
    {
        double deg = 0.0;
        if (Math.abs(p1.getY() - p2.getY()) <= 1e-3) {
            if (p1.getX() > p2.getX()) {
                deg = 90;
            } else {
                deg = 270;
            }
        } else if (Math.abs(p1.getX() - p2.getX()) <= 1e-3) {
            if (p1.getY() > p2.getY()) {
                deg = 0;
            } else {
                deg = 180;
            }
        } else {
            deg = Math.atan(Math.abs(p1.getX() - p2.getX()) /
                    Math.abs(p1.getY() - p2.getY()));
            deg = Math.toDegrees(deg);
            if (p1.getX() > p2.getX() &&
                    p1.getY() > p2.getY()) {
            } else if (p1.getX() < p2.getX() &&
                    p1.getY() > p2.getY()) {
                deg = 360 - deg;
            } else if (p1.getX() < p2.getX() &&
                    p1.getY() < p2.getY()) {
                deg = 180 + deg;
            } else if (p1.getX() > p2.getX() &&
                    p1.getY() < p2.getY()) {
                deg = 180 - deg;
            }
        }
        return deg;
    }
    public static String formatTimeYYMMDDHHmmSS(long begin_time) {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");