public static List <BreakPointInfo> AnalyzeOneTrajectory(GPSTrajectory traj) { if (traj.GPSCount <= 3) { throw new Exception("GPS轨迹数据点太少"); } List <BreakPointInfo> breakinfo = new List <BreakPointInfo>(); TransportationMode last = InWhichMode(traj[1].Velocity); int duration = 1; for (int i = 2; i < traj.GPSCount; i++) { TransportationMode mode = InWhichMode(traj[i].Velocity); if (mode != last) { //检测到移动模式变化 BreakPointInfo bpinfo = new BreakPointInfo(i - 1, last, duration); breakinfo.Add(bpinfo); duration = 1; } else { duration++; } last = mode; } //处理最后一个点 if (duration != 1) { breakinfo.Add(new BreakPointInfo(traj.GPSCount - 1, last, duration)); } return(breakinfo); }
public static UsersTrajectories ReadAll(string filename) { UsersTrajectories myUserTrajectories = new UsersTrajectories(); using (StreamReader sr = new StreamReader(filename)) { while (!sr.EndOfStream) { GPSTrajectory gt = ReadLine(sr.ReadLine()); myUserTrajectories.InsertTrajectories(gt); } return(myUserTrajectories); } }
public static string SingleTrajectoryToBaiduMapJson(GPSTrajectory path) { StringBuilder data = new StringBuilder(); for (int i = 0; i < path.GPSCount; i++) { data.AppendFormat("{0},{1}", path[i].X, path[i].Y); if (i != path.GPSCount - 1) { data.Append(","); } } return(data.ToString()); }
public static GPSTrajectory ReadLine(string line) { int split = line.IndexOf('\t'); int num = int.Parse(line.Substring(0, split)); GPSTrajectory gt = new GPSTrajectory(num); string[] data = line.Substring(split + 1).Split(new char[] { ',', '|' }); for (int i = 0; i < data.Length; i++) { int time = int.Parse(data[i++]); float lo = float.Parse(data[i++]); float la = float.Parse(data[i]); gt.AddPoint(lo, la, time); } return(gt); }
private GPSTrajectory Simplify() { _usePt = new bool[GPSPts.GPSCount]; for (int i = 0; i < GPSPts.GPSCount; i++) { _usePt[i] = true; } SimplifySection(0, GPSPts.GPSCount - 1); GPSTrajectory simplifiedLine = new GPSTrajectory(GPSPts.UserID); for (int i = 0; i < GPSPts.GPSCount; i++) { if (_usePt[i]) { simplifiedLine.AddPoint(GPSPts[i]); } } return(simplifiedLine); }
public string GetOneTrajectory(int userID, int index) { GPSTrajectory gt = myUserTrajectories.GetTrajectoriesByUserID(userID)[index]; string result = gt.ToJSON(); //添加速度 StringBuilder sb = new StringBuilder(); sb.Append("\"Velocity\":[0,"); for (int i = 1; i < gt.GPSCount; i++) { sb.Append(gt[i].Velocity * 3.6); if (i != gt.GPSCount - 1) { sb.Append(','); } } sb.Append(']'); return(JSONConverter.AddElementsToJSON(result, sb.ToString())); }
public static string SingleTrajectoryToJson(GPSTrajectory item) { StringBuilder sb = new StringBuilder(); sb.Append("["); sb.Append("{'geo':["); for (int i = 0; i < item.GPSCount; i++) { sb.AppendFormat("[{0},{1},{2}]", item[i].X, item[i].Y, item[i].TimeStamp); if (i != item.GPSCount - 1) { sb.Append(","); } } sb.Append("],'count':1},"); sb.Remove(sb.Length - 1, 1);//移除最后一个逗号 sb.Append("]"); return(sb.ToString()); }
public GPSTrajectory Excute(GPSTrajectory source, double maxdistance) { _distanceTolerance = maxdistance; GPSPts = source; return(Simplify()); }
/// <summary> /// 构造函数 /// </summary> /// <param name="traj">GPS轨迹</param> /// <param name="maxdistance">最大阈值</param> public GPSDouglasSimplification(GPSTrajectory traj, double maxdistance) { GPSPts = traj; _distanceTolerance = maxdistance; }