实现将一组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;
}