| | |
| | | import android.graphics.Color; |
| | | import android.graphics.Paint; |
| | | import android.graphics.Path; |
| | | import android.opengl.GLSurfaceView; |
| | | import android.os.Bundle; |
| | | import android.os.Handler; |
| | | import android.util.Log; |
| | | import android.view.LayoutInflater; |
| | | import android.view.SurfaceHolder; |
| | |
| | | import android.view.View; |
| | | import android.view.ViewGroup; |
| | | import android.widget.LinearLayout; |
| | | import android.widget.Toast; |
| | | |
| | | import androidx.annotation.NonNull; |
| | | import androidx.annotation.Nullable; |
| | |
| | | import com.google.gson.reflect.TypeToken; |
| | | |
| | | |
| | | import org.json.JSONException; |
| | | import org.json.JSONObject; |
| | | |
| | | import java.lang.reflect.Type; |
| | | 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.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; |
| | | |
| | | |
| | |
| | | , {9.278, -1.5330000000000004}, {9.277999999999999, 1.467000000000001}}; |
| | | Gson gson; |
| | | private LinearLayout linearLayout;//surfaceview的父容器,为了移动surfaceview而使用,因为scrollto不能移动view, |
| | | private LinkedBlockingQueue queue = new LinkedBlockingQueue(100); |
| | | private ExecutorService producer = Executors.newSingleThreadExecutor(); |
| | | private ExecutorService consumer = Executors.newSingleThreadExecutor(); |
| | | |
| | | |
| | | @Nullable |
| | |
| | | View view = inflater.inflate(R.layout.layout_mapfragment, container, false); |
| | | gson = new Gson(); |
| | | initView(view); |
| | | consumer.execute(new CalRunnable()); |
| | | return view; |
| | | } |
| | | |
| | |
| | | pathText.lineTo(700, 30); |
| | | canvas2.drawTextOnPath(osd2, pathText, 0, 0, paint);//逆时针生成 |
| | | } |
| | | if (osd3 != null) { |
| | | Path pathText = new Path(); |
| | | pathText.moveTo(10, 240); |
| | | pathText.lineTo(700, 130); |
| | | canvas2.drawTextOnPath(osd2, pathText, 0, 0, paint);//逆时针生成 |
| | | } |
| | | // if (osd3 != null) { |
| | | // Path pathText = new Path(); |
| | | // pathText.moveTo(10, 240); |
| | | // pathText.lineTo(700, 130); |
| | | // canvas2.drawTextOnPath(osd2, pathText, 0, 0, paint);//逆时针生成 |
| | | // } |
| | | |
| | | // 提交画布 |
| | | Canvas canvas = holder.lockCanvas(); |
| | |
| | | int line = 0; |
| | | int map_line = 0; |
| | | private StringBuffer stringBuffer = new StringBuffer(); |
| | | class MessageRemoteService{ |
| | | public int msgCode; |
| | | public String json; |
| | | |
| | | public MessageRemoteService(int msgCode, Object obj) { |
| | | this.json = (String) obj; |
| | | this.msgCode = msgCode; |
| | | } |
| | | } |
| | | private ICEventListener icEventListener = new ICEventListener() { |
| | | @Override |
| | | public void onCEvent(String topic, int msgCode, int resultCode, Object obj) { |
| | | public void onCEvent(String topic, final int msgCode, int resultCode, final Object obj) { |
| | | |
| | | CThreadPoolExecutor.runInBackground(new CalRunnable(msgCode,(String)obj)); |
| | | // CThreadPoolExecutor.runInBackground(new CalRunnable(msgCode,(String)obj)); |
| | | |
| | | producer.execute(new Runnable() { |
| | | @Override |
| | | public void run() { |
| | | queue.offer(new MessageRemoteService(msgCode,obj)); |
| | | } |
| | | }); |
| | | |
| | | |
| | | } |
| | | }; |
| | | boolean flag = true; |
| | | class CalRunnable implements Runnable{ |
| | | |
| | | private String json; |
| | | private int cmd; |
| | | public CalRunnable(int cmd,String obj) { |
| | | this.json = obj; |
| | | this.cmd = cmd; |
| | | } |
| | | // public CalRunnable(int cmd,String obj) { |
| | | // this.json = obj; |
| | | // this.cmd = cmd; |
| | | // } |
| | | |
| | | @Override |
| | | public void run() { |
| | | MyLog.i(TAG, json); |
| | | if (!(cmd == Constant.REAL_TIME_CAR_POS)){ |
| | | if (cmd == Constant.DEBUG_RTCM){ |
| | | stringBuffer.append("\tRTCM:"); |
| | | while (flag){ |
| | | MessageRemoteService messageRemoteService = (MessageRemoteService) queue.peek(); |
| | | if (messageRemoteService == null){ |
| | | try { |
| | | JSONObject jsonObject = new JSONObject(json); |
| | | int length = jsonObject.getInt("length"); |
| | | stringBuffer.append(length); |
| | | } catch (JSONException e) { |
| | | Thread.sleep(100); |
| | | } catch (InterruptedException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | if (cmd == Constant.DEBUG_TXT){ |
| | | try { |
| | | JSONObject jsonObject = new JSONObject(json); |
| | | String info = jsonObject.getString("info"); |
| | | stringBuffer.append("\tinfo:"); |
| | | stringBuffer.append(info); |
| | | } catch (JSONException e) { |
| | | e.printStackTrace(); |
| | | messageRemoteService = (MessageRemoteService) queue.poll(); |
| | | if (messageRemoteService != null){ |
| | | this.cmd = messageRemoteService.msgCode; |
| | | this.json = messageRemoteService.json; |
| | | MyLog.i(TAG, json); |
| | | // if (!(cmd == Constant.REAL_TIME_CAR_POS)){ |
| | | // if (cmd == Constant.DEBUG_RTCM){ |
| | | // stringBuffer.append("\tRTCM:"); |
| | | // try { |
| | | // JSONObject jsonObject = new JSONObject(json); |
| | | // int length = jsonObject.getInt("length"); |
| | | // stringBuffer.append(length); |
| | | // } catch (JSONException e) { |
| | | // e.printStackTrace(); |
| | | // } |
| | | // } |
| | | // if (cmd == Constant.DEBUG_TXT){ |
| | | // try { |
| | | // JSONObject jsonObject = new JSONObject(json); |
| | | // String info = jsonObject.getString("info"); |
| | | // stringBuffer.append("\tinfo:"); |
| | | // stringBuffer.append(info); |
| | | // } catch (JSONException e) { |
| | | // e.printStackTrace(); |
| | | // } |
| | | // |
| | | // } |
| | | // } |
| | | // osd3 = stringBuffer.toString(); |
| | | // if (osd3!=null && osd3.contains("info:")&&osd3.contains("RTCM:")){ |
| | | // |
| | | // stringBuffer.delete(0,stringBuffer.length()); |
| | | // } |
| | | |
| | | |
| | | RealTimeCarPos timeCarPos = gson.fromJson((String) json, RealTimeCarPos.class); |
| | | List<Double> points = timeCarPos.getPoint(); |
| | | switch (timeCarPos.getMove()){ |
| | | case 0: |
| | | osd2 = "停车"; |
| | | break; |
| | | case 1: |
| | | osd2 = "前进"; |
| | | break; |
| | | case -1: |
| | | osd2 = "后退"; |
| | | break; |
| | | } |
| | | osd="方向角"+String.valueOf(timeCarPos.getHeading()); |
| | | line = 0; |
| | | map_line = 0; |
| | | |
| | | } |
| | | } |
| | | osd3 = stringBuffer.toString(); |
| | | if (osd3!=null && osd3.contains("info:")&&osd3.contains("RTCM:")){ |
| | | for (int i = 0; i < points.size(); i++) { |
| | | if ((i % 2) == 0) { |
| | | car[line][0] = points.get(i); |
| | | } else { |
| | | double value = 0 - points.get(i); |
| | | Log.i(TAG, "onCEvent: 新值=" + value + " 位置:" + i); |
| | | car[line][1] = value; |
| | | line++; |
| | | } |
| | | |
| | | stringBuffer.delete(0,stringBuffer.length()); |
| | | } |
| | | RealTimeCarPos timeCarPos = gson.fromJson((String) json, RealTimeCarPos.class); |
| | | List<Double> points = timeCarPos.getPoint(); |
| | | switch (timeCarPos.getMove()){ |
| | | case 0: |
| | | osd2 = "停车"; |
| | | break; |
| | | case 1: |
| | | osd2 = "前进"; |
| | | break; |
| | | case -1: |
| | | osd2 = "后退"; |
| | | break; |
| | | } |
| | | osd="方向角"+String.valueOf(timeCarPos.getHeading()); |
| | | line = 0; |
| | | map_line = 0; |
| | | |
| | | for (int i = 0; i < points.size(); i++) { |
| | | if ((i % 2) == 0) { |
| | | car[line][0] = points.get(i); |
| | | } else { |
| | | double value = 0 - points.get(i); |
| | | Log.i(TAG, "onCEvent: 新值=" + value + " 位置:" + i); |
| | | car[line][1] = value; |
| | | line++; |
| | | } |
| | | |
| | | } |
| | | map_id = timeCarPos.getMap_id(); |
| | | } |
| | | map_id = timeCarPos.getMap_id(); |
| | | // 1 - 倒库 |
| | | // 2 - 坡起 |
| | | // 3 - 侧方停车 |
| | |
| | | // 5 - 直角转弯 |
| | | |
| | | |
| | | StringBuffer buffer = FileUtil.readTxtFileFromSD(_mActivity,Constant.MAP); |
| | | Type type = new TypeToken<List<ExamMap>>(){}.getType(); |
| | | if (buffer != null){ |
| | | List<ExamMap> examMaps = gson.fromJson(buffer.toString().trim(), type); |
| | | StringBuffer buffer = FileUtil.readTxtFileFromSD(_mActivity,Constant.MAP); |
| | | Type type = new TypeToken<List<ExamMap>>(){}.getType(); |
| | | if (buffer != null){ |
| | | List<ExamMap> examMaps = gson.fromJson(buffer.toString().trim(), type); |
| | | |
| | | |
| | | |
| | | for (int i = 0; i < examMaps.size(); i++) { |
| | | ExamMap examMap = examMaps.get(i); |
| | | if (map_id == examMap.getId()){ |
| | | List<ExamMap.PointBean> pointBeanList = examMap.getPoint(); |
| | | for (int i = 0; i < examMaps.size(); i++) { |
| | | ExamMap examMap = examMaps.get(i); |
| | | if (map_id == examMap.getId()){ |
| | | List<ExamMap.PointBean> pointBeanList = examMap.getPoint(); |
| | | |
| | | |
| | | for(int j=0; j<pointBeanList.size();j++){ |
| | | List<Double> xys = pointBeanList.get(i).getXy(); |
| | | if(j==0){ |
| | | map = new double[xys.size()/2][2]; |
| | | }else{ |
| | | MyLog.i(TAG,"暂时还不支持曲线"); |
| | | for(int j=0; j<pointBeanList.size();j++){ |
| | | List<Double> xys = pointBeanList.get(i).getXy(); |
| | | if(j==0){ |
| | | map = new double[xys.size()/2][2]; |
| | | }else{ |
| | | MyLog.i(TAG,"暂时还不支持曲线"); |
| | | break; |
| | | } |
| | | |
| | | for (int k=0; k<xys.size();k++){ |
| | | if ((k % 2) == 0) { |
| | | map[map_line][0] = xys.get(k); |
| | | } else { |
| | | double value = 0 - xys.get(k); |
| | | Log.i(TAG, "onCEvent: map新值=" + value + " 位置:" + i); |
| | | map[map_line][1] = value; |
| | | map_line++; |
| | | } |
| | | } |
| | | |
| | | } |
| | | break; |
| | | } |
| | | |
| | | for (int k=0; k<xys.size();k++){ |
| | | if ((k % 2) == 0) { |
| | | map[map_line][0] = xys.get(k); |
| | | } else { |
| | | double value = 0 - xys.get(k); |
| | | Log.i(TAG, "onCEvent: map新值=" + value + " 位置:" + i); |
| | | map[map_line][1] = value; |
| | | map_line++; |
| | | } |
| | | } |
| | | |
| | | } |
| | | break; |
| | | } |
| | | DrawMap(map,car); |
| | | } |
| | | |
| | | } |
| | | DrawMap(map,car); |
| | | |
| | | } |
| | | } |
| | | @Override |
| | |
| | | @Override |
| | | public void onDetach() { |
| | | super.onDetach(); |
| | | flag = false; |
| | | producer.shutdown(); |
| | | consumer.shutdown(); |
| | | CEventCenter.onBindEvent(false, icEventListener, Constant.REAL_TIME_POS_CAR_TOPIC); |
| | | } |
| | | } |