Android Studio GPX文件解析显示地图轨迹和海拔示意(模拟沿轨迹前进)

目录

1.GPX文件解析

2.地图轨迹绘制

3.海拔示意图绘制

4.行进模拟

开始(暂停):

前进实现:

计时模块:

其他参数


1.GPX文件解析

详见此博客:

Android Studio GPX文件的解析(总和)_.'~'.的博客-优快云博客_gpx文件

2.地图轨迹绘制

轨迹绘制:

利用GPX解析得到的数据在百度地图SDK上利用折现的绘制方法,绘制出相应的地图路线图。

public void drawroad(){
        List<LatLng> points = new ArrayList<LatLng>();
        //构建折线点坐标
        for(int i=0;i<longitudes.size();i++){
            //System.out.println(longitudes.get(i) );
            // longitudes.size();
            LatLng p = new LatLng(latitudes.get(i), longitudes.get(i));
            points.add(p);
        }
        //设置折线的属性
        OverlayOptions mOverlayOptions = new PolylineOptions()
                .width(10)
                .color(0xAAFF0000)
                .points(points);
        //在地图上绘制折线
        //mPloyline 折线对象
        Overlay mPolyline = mBaiduMap.addOverlay(mOverlayOptions);
    }

自身点标记:

在行进过程中始终标记自身所处位置(海拔示意图也会始终标记自身位置)。

public  void drawpoint(int i){
        //定义Maker坐标点
        LatLng point = new LatLng(latitudes.get(i), longitudes.get(i));
//构建Marker图标
        BitmapDescriptor bitmap = BitmapDescriptorFactory
                .fromResource(R.drawable.me3);
//构建MarkerOption,用于在地图上添加Marker
        OverlayOptions option = new MarkerOptions()
                .position(point)
                .icon(bitmap);
//在地图上添加Marker,并显示
        //在地图上批量添加
        mPolyline2 =mBaiduMap.addOverlay(option);
    }

3.海拔示意图绘制

将GPX文件解析得到的海拔数据,按数据的多少不同按比例进行绘制(实质为直线的绘制)

 @RequiresApi(api = Build.VERSION_CODES.N)
    public void drawele(int me){
        imageView=(ImageView) findViewById(R.id.ele);

        //确定最高,最低海拔
        Double max = Collections.max(elevations);
        Double min = Collections.min(elevations);
        int max1= Math.toIntExact(Math.round(max));
        int min1= Math.toIntExact(Math.round(min));
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                top.setText(String.valueOf(max1)+"M");
                low.setText(String.valueOf(min1)+"M");
            }
        });

        if(max1-min1>h){
            double y=  (max-min)/h;
            Log.e("TAG", "drawele: "+y );
            yinterval= Math.toIntExact((long) Math.ceil(y)); //得到最大值和高的关系,依此比例绘制高度
        }else{
            double y=  h/(max-min);
            Log.e("TAG", "drawele: "+y );
            yinterval= Math.toIntExact((long) Math.ceil(y)); //得到最大值和高的关系,依此比例绘制高度
        }
        Log.e("max  min", "drawele: "+max+"__"+min+"___"+yinterval+"    ++"+h );
        //开始绘制海拔示意图
        Bitmap newb = Bitmap.createBitmap(w , h, Bitmap.Config.ARGB_8888);
        Canvas canvasTemp = new Canvas(newb);
        //Canvas canvasTemp2=new Canvas(newb);
        canvasTemp.drawColor(Color.TRANSPARENT);
        Paint p = new Paint();
        //防锯齿
        p.setAntiAlias(true);
        p.setStyle(Paint.Style.STROKE);//STROKE,FILL
        p.setStrokeWidth(5);
        p.setColor(Color.LTGRAY);
        p.setTextAlign(Paint.Align.CENTER);
        p.setColor(Color.BLACK);
        p.setStyle(Paint.Style.FILL);//STROKE,FILL
        //判断是否为初始化,将位置置为0
        if(me==0){
            p.setColor(Color.RED);
            canvasTemp.drawCircle(0,(float) (h-(elevations.get(0)-min1)/(max1-min1)*h),10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值