实现将一组GPS模块获取的经纬度数据在百度地图上绘制轨迹
1.将经纬度转换成百度地图坐标
/**
* 标准的GPS经纬度坐标直接在地图上绘制会有偏移,这是测绘局和地图商设置的加密,要转换成百度地图坐标
*
* @return 百度地图坐标
*/
public GeoPoint gpsToBaidu(String data) {//data格式 nmea标准数据 ddmm.mmmmm,ddmm.mmmm 如3030.90909,11449.1234
String[] p = data.split(",");
int lat = (int) (((int) (Float.valueOf(p[0]) / 100) + (100 * (Float//将ddmm.mmmm格式转成dd.ddddd
.valueOf(p[0]) / 100.0 - (int) (Float.valueOf(p[0]) / 100)) / 60.0)) * 1E6);
int lon = (int) (((int) (Float.valueOf(p[1]) / 100) + (100 * (Float
.valueOf(p[1]) / 100.0 - (int) (Float.valueOf(p[1]) / 100)) / 60.0)) * 1E6);
GeoPoint pt = new GeoPoint(lat, lon);
return CoordinateConvert.fromWgs84ToBaidu(pt);//转成百度坐标
}
2.在地图上绘制轨迹(已设置好地图)
/**
* 绘制点线
*
*/
public void addCustomElementsDemo(String[] data) {
GraphicsOverlay graphicsOverlay = new GraphicsOverlay(mMapView);
mMapView.getOverlays().add(graphicsOverlay);
// 添加折线
graphicsOverlay.setData(drawLine(data));//轨迹
// 添加点
graphicsOverlay.setData(drawPoint(data[0]));//起点
graphicsOverlay.setData(drawPoint(data[count - 1]));//终点
// 执行地图刷新使生效
mMapView.refresh();
}
/**
* 绘制单点,该点状态不随地图状态变化而变化
*
* @return 点对象
*/
public Graphic drawPoint(String data) {
GeoPoint pt1 = gpsToBaidu(data);
// 构建点
Geometry pointGeometry = new Geometry();
// 设置坐标
pointGeometry.setPoint(pt1, 10);
// 设定样式
Symbol pointSymbol = new Symbol();
Symbol.Color pointColor = pointSymbol.new Color();
pointColor.red = 0;
pointColor.green = 126;
pointColor.blue = 255;
pointColor.alpha = 255;
pointSymbol.setPointSymbol(pointColor);
// 生成Graphic对象
Graphic pointGraphic = new Graphic(pointGeometry, pointSymbol);
return pointGraphic;
}
/**
* 绘制折线,该折线状态随地图状态变化
*
* @return 折线对象
*/
public Graphic drawLine(String[] data) {
// 构建线
Geometry lineGeometry = new Geometry();
// 设定折线点坐标
GeoPoint[] linePoints = new GeoPoint[count];
for (int i = 0; i < count; i++) {
linePoints[i] = gpsToBaidu(data[i]);
}
lineGeometry.setPolyLine(linePoints);
// 设定样式
Symbol lineSymbol = new Symbol();
Symbol.Color lineColor = lineSymbol.new Color();
lineColor.red = 33;
lineColor.green = 99;
lineColor.blue = 255;
lineColor.alpha = 255;
lineSymbol.setLineSymbol(lineColor, 10);
// 生成Graphic对象
Graphic lineGraphic = new Graphic(lineGeometry, lineSymbol);
return lineGraphic;
}