| | |
| | | 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.math.BigDecimal; |
| | |
| | | import safeluck.drive.evaluation.cEventCenter.ICEventListener; |
| | | import safeluck.drive.evaluation.util.CThreadPoolExecutor; |
| | | import safeluck.drive.evaluation.util.FileUtil; |
| | | import safeluck.drive.evaluation.util.Utils; |
| | | |
| | | |
| | | /** |
| | |
| | | * 邮箱:632393724@qq.com |
| | | * All Rights Saved! Chongqing AnYun Tech co. LTD |
| | | */ |
| | | public class MapFragment extends SupportFragment { |
| | | public class MapFragment extends SupportFragment implements View.OnClickListener { |
| | | private boolean isDrawing = false; |
| | | private int pixels = 80; |
| | | private ICEventListener rtcmicEventListener = new ICEventListener() { |
| | | @Override |
| | | public void onCEvent(String topic, int msgCode, int resultCode, final Object obj) { |
| | |
| | | private Toolbar toolbar; |
| | | |
| | | private Bitmap bmp = null; |
| | | private Bitmap bmp2 = null; |
| | | |
| | | private Canvas canvas2 = null; |
| | | private Canvas canvas3 = null; |
| | | private Paint paint = null; |
| | | private int screen_width = 0, screen_height = 0; |
| | | private String osdHeading = null; |
| | |
| | | } |
| | | private int avaliableHeight,avalibleWidth; |
| | | 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(); |
| | | } |
| | | }); |
| | | |
| | | avaliableHeight= getResources().getDisplayMetrics().heightPixels; |
| | | avalibleWidth = getResources().getDisplayMetrics().widthPixels; |
| | | Log.i(TAG, "initView: aliwidht="+avalibleWidth+" height="+avaliableHeight); |
| | | mSurfaceView = view.findViewById(R.id.surfaceview); |
| | | |
| | | view.findViewById(R.id.btn_reduce).setOnClickListener(this); |
| | | view.findViewById(R.id.btn_amplify).setOnClickListener(this); |
| | | holder = mSurfaceView.getHolder(); |
| | | |
| | | holder.addCallback(new SurfaceHolder.Callback() { |
| | |
| | | screen_height = canvas.getHeight(); |
| | | surfaceHolder.unlockCanvasAndPost(canvas); |
| | | |
| | | bmp = Bitmap.createBitmap(screen_width, screen_height, Bitmap.Config.ARGB_8888); |
| | | bmp = Bitmap.createBitmap(screen_width*2/3, screen_height, Bitmap.Config.ARGB_8888); |
| | | canvas2 = new Canvas(bmp); |
| | | canvas2.drawColor(Color.WHITE); |
| | | |
| | | bmp2 = Bitmap.createBitmap(screen_width/3, screen_height, Bitmap.Config.ARGB_8888); |
| | | canvas3 = new Canvas(bmp2); |
| | | canvas3.drawColor(Color.WHITE); |
| | | |
| | | Log.d(TAG, "BMP W = " + bmp.getWidth() + "BMP H = " + bmp.getHeight()); |
| | | |
| | | paint = new Paint(); |
| | | |
| | |
| | | paint.setStyle(Paint.Style.STROKE); |
| | | |
| | | holder.lockCanvas(); |
| | | canvas.drawBitmap(bmp2, screen_width/3, 0, paint); |
| | | canvas.drawBitmap(bmp, 0, 0, paint); |
| | | holder.unlockCanvasAndPost(canvas); |
| | | } |
| | |
| | | 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+"map other length="+map_other.length); |
| | | Log.d(TAG, "DrawMap map size " + map.length + " car size " + car.length); |
| | | |
| | | for (int i = 0; i < map.length; i++) { |
| | | if (i == 0) { |
| | |
| | | |
| | | 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); |
| | | |
| | | long scale_x = Math.round((screen_width - base_x - 10) / (max_x - min_x)); |
| | | long scale_y = Math.round((screen_height - base_y - 10) / (max_y - min_y)); |
| | | long scale_x = Math.round((bmp.getWidth() - base_x - 10) / (max_x - min_x)); |
| | | long scale_y = Math.round((bmp.getHeight() - base_y - 10) / (max_y - min_y)); |
| | | |
| | | if (scale_x >= scale_y) { |
| | | scale_x = scale_y; |
| | |
| | | } |
| | | |
| | | Log.d(TAG, "DrawMap scale_x " + scale_x + " scale_y " + scale_y); |
| | | |
| | | |
| | | canvas2.drawColor(Color.WHITE); |
| | | |
| | |
| | | holder.unlockCanvasAndPost(canvas); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void onClick(View v) { |
| | | switch (v.getId()){ |
| | | case R.id.btn_reduce: |
| | | |
| | | if (pixels < 5){ |
| | | pixels = 5; |
| | | Toast.makeText(_mActivity, "已经是最小了,不能再小了", Toast.LENGTH_SHORT).show(); |
| | | }else{ |
| | | pixels -= 5; |
| | | } |
| | | break; |
| | | case R.id.btn_amplify: |
| | | if (pixels >80){ |
| | | Toast.makeText(_mActivity, "已经是最大了", Toast.LENGTH_SHORT).show(); |
| | | pixels = 80; |
| | | }else{ |
| | | pixels+=5; |
| | | } |
| | | break; |
| | | } |
| | | } |
| | | |
| | | 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; |
| | | } |
| | | } |
| | | |
| | | 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; |
| | | } |
| | | |
| | | |
| | | public void DrawMapAll(double yaw, List<Double> mainAnt, double[][][] map, double [][]map_other, double[][] car, |
| | | List<Integer>body, List<Integer> tire) { |
| | | if (canvas2 == null || bmp == null || bmp2 == null || canvas3 == null) { |
| | | return; |
| | | } |
| | | long scale_x,scale_y; |
| | | // _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); |
| | | |
| | | PointF mainPoint = new PointF(mainAnt.get(0), mainAnt.get(1)); |
| | | |
| | | // Log.d(TAG, String.format("主天线 X = %f Y = %f 旋转角度 %f", mainPoint.getX(), mainPoint.getY(), yaw)); |
| | | |
| | | for (int x = 0; x < map.length; x++) { |
| | | for (int j = 0; j < map[x].length; j++) { |
| | | PointF oldPoint = new PointF(map[x][j][0], map[x][j][1]); |
| | | |
| | | PointF newPoint = rotatePoint(oldPoint, mainPoint, yaw ); |
| | | |
| | | map[x][j][0] = newPoint.getX(); |
| | | map[x][j][1] = newPoint.getY(); |
| | | |
| | | map[x][j][0] = map[x][j][0] - mainPoint.getX(); |
| | | map[x][j][1] = map[x][j][1] - mainPoint.getY(); |
| | | map[x][j][1] = -map[x][j][1]; |
| | | } |
| | | } |
| | | |
| | | 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]; |
| | | } |
| | | |
| | | for (int i = 0; i < map_other.length; i++) { |
| | | PointF oldPoint = new PointF(map_other[i][0], map_other[i][1]); |
| | | PointF newPoint = rotatePoint(oldPoint, mainPoint, yaw ); |
| | | map_other[i][0] = newPoint.getX(); |
| | | map_other[i][1] = newPoint.getY(); |
| | | |
| | | map_other[i][0] = map_other[i][0] - mainPoint.getX(); |
| | | map_other[i][1] = map_other[i][1] - mainPoint.getY(); |
| | | map_other[i][1] = -map_other[i][1]; |
| | | } |
| | | |
| | | scale_x = Math.round(Math.abs(pixels / Math.sqrt(Math.pow(car[0][0], 2) + Math.pow(car[0][1], 2)) )); |
| | | scale_y = scale_x; |
| | | |
| | | base_x = bmp.getWidth() / 2; |
| | | base_y = bmp.getHeight() * 7 / 10; |
| | | |
| | | Log.d(TAG, String.format("DrawMapAll scale_x = %d 车头据 = %f", scale_x, Math.sqrt(Math.pow(car[0][0], 2) + Math.pow(car[0][1], 2)))); |
| | | |
| | | /* for (int x = 0; x < map.length; x++) { |
| | | for (int j = 0; j < map[x].length; j++) { |
| | | if (x == 0&&j==0) { |
| | | max_x = map[0][0][0]; |
| | | min_x = map[0][0][0]; |
| | | max_y = map[0][0][1]; |
| | | min_y = map[0][0][1]; |
| | | } else { |
| | | // Log.i(TAG,String.format("map[%d][%d][0]=%f",x,j,map[x][j][0])); |
| | | // Log.i(TAG,String.format("map[%d][%d][1]=%f",x,j,map[x][j][1])); |
| | | // Log.i(TAG,String.format("max_x=%f,max_y=%f,min_x=%f,min_y=%f",max_x,max_y,min_x,min_y)); |
| | | if (max_x < map[x][j][0]) { |
| | | |
| | | max_x = map[x][j][0]; |
| | | } |
| | | if (min_x > map[x][j][0]) { |
| | | min_x = map[x][j][0]; |
| | | } |
| | | if (max_y < map[x][j][1]) { |
| | | max_y = map[x][j][1]; |
| | | } |
| | | if (min_y > map[x][j][1]) { |
| | | min_y = map[x][j][1]; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | // Log.d(TAG, "all 地图DrawMap max_x " + max_x + " max_y " + max_y + " min_x " + min_x + " min_y " + min_y); |
| | | if (map_other.length>9){ |
| | | for (int i = 0; i < map_other.length; i++) { |
| | | |
| | | if (max_x < map_other[i][0]) { |
| | | max_x = map_other[i][0]; |
| | | } |
| | | if (min_x > map_other[i][0]) { |
| | | min_x = map_other[i][0]; |
| | | } |
| | | if (max_y < map_other[i][1]) { |
| | | max_y = map_other[i][1]; |
| | | } |
| | | if (min_y > map_other[i][1]) { |
| | | min_y = map_other[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, "DrawMapAll 和车比max_x " + max_x + " max_y " + max_y + " min_x " + min_x + " min_y " + min_y); |
| | | |
| | | scale_x = Math.round((screen_width - base_x - 10) / (max_x - min_x)); |
| | | scale_y = Math.round((screen_height - base_y - 10) / (max_y - min_y)); |
| | | |
| | | if (scale_x >= scale_y) { |
| | | scale_x = scale_y; |
| | | } else { |
| | | scale_y = scale_x; |
| | | }*/ |
| | | |
| | | // Log.d(TAG, "DrawMapAll scale_x " + scale_x + " scale_y " + scale_y); |
| | | |
| | | |
| | | canvas2.drawColor(Color.WHITE); |
| | | |
| | | if (paint == null || canvas2==null){ |
| | | return; |
| | | } |
| | | 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); |
| | | canvas2.drawCircle((float) base_x, (float) base_y, 2, paint); |
| | | |
| | | paint.setColor(Color.RED); |
| | | // canvas2.drawCircle((float) (base_x + (car[tire.get(0)][0] - min_x) * scale_x), (float) (base_y + (car[tire.get(0)][1] - min_y) * scale_y), 2.5f, paint); |
| | | // canvas2.drawCircle((float) (base_x + (car[tire.get(1)][0] - min_x) * scale_x), (float) (base_y + (car[tire.get(1)][1] - min_y) * scale_y), 2.5f, paint); |
| | | // canvas2.drawCircle((float) (base_x + (car[tire.get(2)][0] - min_x) * scale_x), (float) (base_y + (car[tire.get(2)][1] - min_y) * scale_y), 2.5f, paint); |
| | | // canvas2.drawCircle((float) (base_x + (car[tire.get(3)][0] - min_x) * scale_x), (float) (base_y + (car[tire.get(3)][1] - min_y) * scale_y), 2.5f, paint); |
| | | |
| | | canvas2.drawCircle((float) (base_x + (car[tire.get(0)][0]) * scale_x), (float) (base_y + (car[tire.get(0)][1]) * scale_y), 2.5f, paint); |
| | | canvas2.drawCircle((float) (base_x + (car[tire.get(1)][0]) * scale_x), (float) (base_y + (car[tire.get(1)][1]) * scale_y), 2.5f, paint); |
| | | canvas2.drawCircle((float) (base_x + (car[tire.get(2)][0]) * scale_x), (float) (base_y + (car[tire.get(2)][1]) * scale_y), 2.5f, paint); |
| | | canvas2.drawCircle((float) (base_x + (car[tire.get(3)][0]) * scale_x), (float) (base_y + (car[tire.get(3)][1]) * scale_y), 2.5f, paint); |
| | | |
| | | paint.setStyle(Paint.Style.STROKE); |
| | | paint.setColor(Color.BLACK); |
| | | |
| | | Path path = new Path(); |
| | | |
| | | for (int k = 0; k < map.length; k++) { |
| | | Log.i(TAG, String.format("all DrawMap: map[%d].length=[%d]",k,map[k].length)); |
| | | if (map[k].length < 9) { |
| | | // Log.d(TAG, String.format("map[%d][0][0]=%f,X=%f",k,map[k][0][0], (float) (base_x + (map[k][0][0] - min_x) * scale_x)) + String.format("map[%d][0][1]=%f,Y=%f",k,map[k][0][1], (float) (base_y + (map[k][0][1] - min_y) * scale_y))); |
| | | path.moveTo((float) (base_x + (map[k][0][0]) * scale_x), (float) (base_y + (map[k][0][1]) * scale_y)); |
| | | for (int i = 1; i < map[k].length; i++) { |
| | | // Log.i(TAG,String.format("map[%d][%d][0]=%f,to X=%f",k,i,map[k][i][0],(float) (base_x + (map[k][i][0] - min_x) * scale_x))); |
| | | // Log.i(TAG,String.format("map[%d][%d][1]=%f,to Y=%f",k,i,map[k][i][1],(float) (base_y + (map[k][i][1] - min_y) * scale_y))); |
| | | path.lineTo((float) (base_x + (map[k][i][0]) * scale_x), (float) (base_y + (map[k][i][1]) * scale_y)); |
| | | } |
| | | path.close(); |
| | | } else if (map[k].length == 9) { |
| | | path.moveTo((float) (base_x + (map[k][0][0] - min_x) * scale_x), (float) (base_y + (map[k][0][1] - min_y) * scale_y)); |
| | | path.lineTo((float) (base_x + (map[k][8][0] - min_x) * scale_x), (float) (base_y + (map[k][8][1] - min_y) * scale_y)); |
| | | |
| | | path.moveTo((float) (base_x + (map[k][2][0] - min_x) * scale_x), (float) (base_y + (map[k][2][1] - min_y) * scale_y)); |
| | | path.lineTo((float) (base_x + (map[k][1][0] - min_x) * scale_x), (float) (base_y + (map[k][1][1] - min_y) * scale_y)); |
| | | |
| | | path.moveTo((float) (base_x + (map[k][3][0] - min_x) * scale_x), (float) (base_y + (map[k][3][1] - min_y) * scale_y)); |
| | | path.lineTo((float) (base_x + (map[k][4][0] - min_x) * scale_x), (float) (base_y + (map[k][4][1] - min_y) * scale_y)); |
| | | |
| | | path.moveTo((float) (base_x + (map[k][6][0] - min_x) * scale_x), (float) (base_y + (map[k][6][1] - min_y) * scale_y)); |
| | | path.lineTo((float) (base_x + (map[k][5][0] - min_x) * scale_x), (float) (base_y + (map[k][5][1] - min_y) * scale_y)); |
| | | |
| | | path.moveTo((float) (base_x + (map[k][7][0] - min_x) * scale_x), (float) (base_y + (map[k][7][1] - min_y) * scale_y)); |
| | | path.lineTo((float) (base_x + (map[k][8][0] - min_x) * scale_x), (float) (base_y + (map[k][8][1] - min_y) * scale_y)); |
| | | } else { |
| | | path.moveTo((float) (base_x + (map[k][0][0] - min_x) * scale_x), (float) (base_y + (map[k][0][1] - min_y) * scale_y)); |
| | | for (int i = 1; i < map[k].length; i++) { |
| | | path.lineTo((float) (base_x + (map[k][i][0] - min_x) * scale_x), (float) (base_y + (map[k][i][1] - min_y) * scale_y)); |
| | | } |
| | | |
| | | if (map_other.length>9){ |
| | | path.moveTo((float) (base_x + (map_other[0][0] - min_x) * scale_x), (float) (base_y + (map_other[0][1] - min_y) * scale_y)); |
| | | for (int i = 1; i < map[k].length; i++) { |
| | | path.lineTo((float) (base_x + (map_other[i][0] - min_x) * scale_x), (float) (base_y + (map_other[i][1] - min_y) * scale_y)); |
| | | } |
| | | } |
| | | |
| | | for (int i = 0, j = 0; i < map[k].length && j < map_other.length; i++, j++) { |
| | | path.moveTo((float) (base_x + (map[k][i][0] - min_x) * scale_x), (float) (base_y + (map[k][i][1] - min_y) * scale_y)); |
| | | path.lineTo((float) (base_x + (map_other[j][0] - min_x) * scale_x), (float) (base_y + (map_other[j][1] - min_y) * scale_y)); |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | | canvas2.drawPath(path, paint); |
| | | |
| | | path.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))); |
| | | path.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)); |
| | | } |
| | | |
| | | path.close(); |
| | | |
| | | canvas2.drawPath(path, paint); |
| | | |
| | | |
| | | paint.setStyle(Paint.Style.FILL_AND_STROKE); |
| | | |
| | | canvas3.drawColor(Color.RED); |
| | | |
| | | if (osdHeading != null) { |
| | | Path pathText = new Path(); |
| | | pathText.moveTo(10, 170); |
| | | pathText.lineTo(700, 170); |
| | | canvas3.drawTextOnPath(osdHeading, pathText, 0, 0, paint);//逆时针生成 |
| | | } |
| | | |
| | | if (osdMoveDirect != null) { |
| | | Path pathText = new Path(); |
| | | pathText.moveTo(10, 30); |
| | | pathText.lineTo(700, 30); |
| | | canvas3.drawTextOnPath(osdMoveDirect, pathText, 0, 0, paint);//逆时针生成 |
| | | } |
| | | |
| | | if (osdRtkSpeed != null) { |
| | | Path pathText = new Path(); |
| | | pathText.moveTo(10, 240); |
| | | pathText.lineTo(700, 240); |
| | | canvas3.drawTextOnPath(osdRtkSpeed, pathText, 0, 0, paint);//逆时针生成 |
| | | } |
| | | |
| | | if (osdQf != null) { |
| | | Path pathText = new Path(); |
| | | pathText.moveTo(10, 120); |
| | | pathText.lineTo(700, 120); |
| | | canvas3.drawTextOnPath(osdQf, pathText, 0, 0, paint);//逆时针生成 |
| | | } |
| | | |
| | | { |
| | | BigDecimal bd = new BigDecimal(gpsSpeed); |
| | | bd = bd.setScale(3, BigDecimal.ROUND_HALF_UP); |
| | | |
| | | Path pathText = new Path(); |
| | | pathText.moveTo(10, 70); |
| | | pathText.lineTo(700, 70); |
| | | |
| | | canvas3.drawTextOnPath("GPS速度:" + bd, pathText, 0, 0, paint);//逆时针生成 |
| | | } |
| | | |
| | | |
| | | // 提交画布 |
| | | Canvas canvas = holder.lockCanvas(); |
| | | if (canvas != null){ |
| | | |
| | | canvas.drawBitmap(bmp, 0, 0, paint); |
| | | canvas.drawBitmap(bmp2, screen_width*2/3, 0, paint); |
| | | holder.unlockCanvasAndPost(canvas); |
| | | } |
| | | // } |
| | | // }); |
| | | } |
| | | /* |
| | | public void DrawMapAll(List<Double> mainAnt, final double[][][] map, final double[][] car, |
| | | List<Integer>body, List<Integer> tire) { |
| | | if (canvas2 == null || bmp == null) { |
| | |
| | | canvas2.drawCircle((float) (base_x + (car[tire.get(2)][0] - min_x) * scale_x), (float) (base_y + (car[tire.get(2)][1] - min_y) * scale_y), 2.5f, paint); |
| | | canvas2.drawCircle((float) (base_x + (car[tire.get(3)][0] - min_x) * scale_x), (float) (base_y + (car[tire.get(3)][1] - min_y) * scale_y), 2.5f, paint); |
| | | |
| | | |
| | | |
| | | paint.setStyle(Paint.Style.STROKE); |
| | | paint.setColor(Color.BLACK); |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | Path path = new Path(); |
| | | |
| | | for (int k = 0; k < map.length; k++) { |
| | | |
| | | |
| | | |
| | | |
| | | Log.i(TAG, String.format("all DrawMap: map[%d].length=[%d]",k,map[k].length)); |
| | | if (map[k].length < 9) { |
| | | // Log.d(TAG, String.format("map[%d][0][0]=%f,X=%f",k,map[k][0][0], (float) (base_x + (map[k][0][0] - min_x) * scale_x)) + String.format("map[%d][0][1]=%f,Y=%f",k,map[k][0][1], (float) (base_y + (map[k][0][1] - min_y) * scale_y))); |
| | |
| | | // } |
| | | // }); |
| | | } |
| | | |
| | | */ |
| | | int line = 0; |
| | | int map_line = 0; |
| | | int map_line_other = 0; |
| | |
| | | if ((i % 2) == 0) { |
| | | car[line][0] = points.get(i); |
| | | } else { |
| | | double value = 0 - points.get(i); |
| | | double value = points.get(i); |
| | | car[line][1] = value; |
| | | line++; |
| | | } |
| | |
| | | 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(); |
| | |
| | | List<Integer> body = timeCarPos.getBody(); |
| | | |
| | | List<Integer> tire = new ArrayList<>(); |
| | | |
| | | double yaw = timeCarPos.getHeading(); |
| | | |
| | | tire.add(tire1.get(0)); |
| | | tire.add(tire2.get(0)); |
| | |
| | | }else{ |
| | | examMaps = gson.fromJson(newmap.trim(),type); |
| | | } |
| | | |
| | | map_id = -1; |
| | | if (map_id == -1){ |
| | | allMap =new double[examMaps.size()][][]; |
| | | for (int i = 0; i < examMaps.size(); i++) { |
| | |
| | | if ((k % 2) == 0) { |
| | | map[map_line][0] = xys.get(k); |
| | | } else { |
| | | double value = 0 - xys.get(k); |
| | | double value = xys.get(k); |
| | | map[map_line][1] = value; |
| | | map_line++; |
| | | } |
| | |
| | | if ((k % 2) == 0) { |
| | | map_other[map_line_other][0] = xys.get(k); |
| | | } else { |
| | | double value = 0 - xys.get(k); |
| | | double value = xys.get(k); |
| | | map_other[map_line_other][1] = value; |
| | | map_line_other++; |
| | | } |
| | |
| | | |
| | | |
| | | } |
| | | DrawMapAll(mainAnt,allMap,car,body,tire); |
| | | |
| | | double [][]mapOther; |
| | | |
| | | mapOther = map_other.clone(); |
| | | |
| | | DrawMapAll(yaw, mainAnt,allMap, mapOther, car,body,tire); |
| | | }else{ |
| | | for (int i = 0; i < examMaps.size(); i++) { |
| | | ExamMap examMap = examMaps.get(i); |
| | |
| | | if ((k % 2) == 0) { |
| | | map[map_line][0] = xys.get(k); |
| | | } else { |
| | | double value = xys.get(k); |
| | | double value = 0 - 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]; |