目录
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