/** * @description: * @author chenshiqiang E-mail:csqwyyx@163.com * @date 2014年5月1日 下午11:43:00 * @version 1.0 */ package com.csq.thesceneryalong.utils.dbmodel; import java.util.ArrayList; import java.util.List; import org.dom4j.Element; import android.location.Location; import com.amap.api.maps.model.LatLng; import com.csq.thesceneryalong.db.TrackPoint; import com.csq.thesceneryalong.logic.manager.MyLocationManager; import com.csq.thesceneryalong.models.models.PathConfig; import com.csq.thesceneryalong.models.models.TrackPointStatus; import com.csq.thesceneryalong.utils.Dom4jUtil; import com.csq.thesceneryalong.utils.StringUtils; public class TrackPointUtil { public static final String NODE_TRACKPOINT = "TrackPoint"; public static final String NODE_TRACKPOINT_TIME = "time"; public static final String NODE_TRACKPOINT_LONGITUDE = "longitude"; public static final String NODE_TRACKPOINT_LATITUDE = "latitude"; public static final String NODE_TRACKPOINT_ALTITUDE = "altitude"; public static final String NODE_TRACKPOINT_ACCURACY = "accuracy"; public static final String NODE_TRACKPOINT_SPEED = "speed"; public static final String NODE_TRACKPOINT_BEARING = "bearing"; public static final String NODE_TRACKPOINT_PROVIDER = "provider"; public static final String NODE_TRACKPOINT_POINTSTATUS = "pointStatus"; public static TrackPoint newNormalPoint(Location curLoc, long trackId){ TrackPoint p = new TrackPoint(); p.setAccuracy(curLoc.getAccuracy()); p.setAltitude(curLoc.getAltitude()); p.setBearing(curLoc.getBearing()); p.setLatitude(curLoc.getLatitude()); p.setLongitude(curLoc.getLongitude()); p.setPointStatus(TrackPointStatus.normal.getValue()); //轨迹点状态,0正常记录,1暂停,2恢复 p.setProvider(curLoc.getProvider()); p.setSpeed(curLoc.getSpeed()); p.setTime(System.currentTimeMillis()); p.setTrackId(trackId); return p; } public static TrackPoint newPausedPoint(long trackId){ Location curLoc = MyLocationManager.getInstance().getCurrentLocation(); TrackPoint p = new TrackPoint(); if(curLoc != null){ p.setAccuracy(curLoc.getAccuracy()); p.setAltitude(curLoc.getAltitude()); p.setBearing(curLoc.getBearing()); p.setLatitude(curLoc.getLatitude()); p.setLongitude(curLoc.getLongitude()); p.setProvider(curLoc.getProvider()); p.setSpeed(curLoc.getSpeed()); } else { p.setAccuracy(0f); p.setAltitude(0d); p.setBearing(0f); p.setLatitude(0d); p.setLongitude(0d); p.setProvider(""); p.setSpeed(0f); } p.setPointStatus(TrackPointStatus.paused.getValue()); //轨迹点状态,0正常记录,1暂停,2恢复 p.setTime(System.currentTimeMillis()); p.setTrackId(trackId); return p; } public static TrackPoint newResumedPoint(long trackId){ Location curLoc = MyLocationManager.getInstance().getCurrentLocation(); TrackPoint p = new TrackPoint(); if(curLoc != null){ p.setAccuracy(curLoc.getAccuracy()); p.setAltitude(curLoc.getAltitude()); p.setBearing(curLoc.getBearing()); p.setLatitude(curLoc.getLatitude()); p.setLongitude(curLoc.getLongitude()); p.setProvider(curLoc.getProvider()); p.setSpeed(curLoc.getSpeed()); } else { p.setAccuracy(0f); p.setAltitude(0d); p.setBearing(0f); p.setLatitude(0d); p.setLongitude(0d); p.setProvider(""); p.setSpeed(0f); } p.setPointStatus(TrackPointStatus.resumed.getValue()); //轨迹点状态,0正常记录,1暂停,2恢复 p.setTime(System.currentTimeMillis()); p.setTrackId(trackId); return p; } /** * @description: 获得记录中的线路 * @author: chenshiqiang E-mail:csqwyyx@163.com * @param tps * @param color * @param width * @return */ public static List<PathConfig> getTrackPointsLatLng(List<TrackPoint> tps, int color, int width) { List<PathConfig> all = new ArrayList<PathConfig>(); if(tps != null && !tps.isEmpty()){ PathConfig config = null; for(TrackPoint tp : tps){ if(tp.getPointStatus() == TrackPointStatus.normal.getValue()){ //需要记录的点 if(config == null){ config = new PathConfig(new ArrayList<LatLng>(), width, color); } config.points.add(new LatLng(tp.getLatitude(), tp.getLongitude())); }else if(tp.getPointStatus() == TrackPointStatus.paused.getValue()){ //需要暂停的点 if(config != null && config.points.size() > 1){ //点数必须大于1,不然报错 all.add(config); } config = null; } } //没有中断过,也要添加到all if(config != null && config.points.size() > 1){ //点数必须大于1,不然报错 all.add(config); } config = null; } return all; } public static LatLng getTrackPointLatLng(TrackPoint tp) { if(tp != null){ return new LatLng(tp.getLatitude(), tp.getLongitude()); } return null; } /** * @description: 创建xml文件,并添加到轨迹trackPoints节点下面 * @author: chenshiqiang E-mail:csqwyyx@163.com * @param trackPoints */ public static void createXml(Element trackPoints, TrackPoint point){ Element trackPointElement = trackPoints.addElement(NODE_TRACKPOINT); Element time = trackPointElement.addElement(NODE_TRACKPOINT_TIME); time.setText(StringUtils.avoidNull(point.getTime(), "")); Element longitude = trackPointElement.addElement(NODE_TRACKPOINT_LONGITUDE); longitude.setText(StringUtils.avoidNull(point.getLongitude(), "")); Element latitude = trackPointElement.addElement(NODE_TRACKPOINT_LATITUDE); latitude.setText(StringUtils.avoidNull(point.getLatitude(), "")); Element altitude = trackPointElement.addElement(NODE_TRACKPOINT_ALTITUDE); altitude.setText(StringUtils.avoidNull(point.getAltitude(), "")); Element accuracy = trackPointElement.addElement(NODE_TRACKPOINT_ACCURACY); accuracy.setText(StringUtils.avoidNull(point.getAccuracy(), "")); Element speed = trackPointElement.addElement(NODE_TRACKPOINT_SPEED); speed.setText(StringUtils.avoidNull(point.getSpeed(), "")); Element bearing = trackPointElement.addElement(NODE_TRACKPOINT_BEARING); bearing.setText(StringUtils.avoidNull(point.getBearing(), "")); Element provider = trackPointElement.addElement(NODE_TRACKPOINT_PROVIDER); provider.setText(StringUtils.avoidNull(point.getProvider(), "")); Element pointStatus = trackPointElement.addElement(NODE_TRACKPOINT_POINTSTATUS); pointStatus.setText(StringUtils.avoidNull(point.getPointStatus(), "")); } public static List<TrackPoint> parseXml(Element trackPointsElement){ List<TrackPoint> tps = new ArrayList<TrackPoint>(); if(trackPointsElement != null){ List<Element> tpsEs = trackPointsElement.elements(NODE_TRACKPOINT); if(tpsEs != null && !tpsEs.isEmpty()){ TrackPoint tp = null; for(Element item : tpsEs){ tp = new TrackPoint(); tp.setTime(Dom4jUtil.parseLong(item, NODE_TRACKPOINT_TIME, 0)); tp.setLongitude(Dom4jUtil.parseDouble(item, NODE_TRACKPOINT_LONGITUDE, 0)); tp.setLatitude(Dom4jUtil.parseDouble(item, NODE_TRACKPOINT_LATITUDE, 0)); tp.setAltitude(Dom4jUtil.parseDouble(item, NODE_TRACKPOINT_ALTITUDE, 0)); tp.setAccuracy(Dom4jUtil.parseFloat(item, NODE_TRACKPOINT_ACCURACY, 0)); tp.setSpeed(Dom4jUtil.parseFloat(item, NODE_TRACKPOINT_SPEED, 0)); tp.setBearing(Dom4jUtil.parseFloat(item, NODE_TRACKPOINT_BEARING, 0)); tp.setProvider(Dom4jUtil.parseString(item, NODE_TRACKPOINT_PROVIDER, "")); tp.setPointStatus(Dom4jUtil.parseInterger(item, NODE_TRACKPOINT_POINTSTATUS, 0)); tps.add(tp); } } } return tps; } }