TracePointVector Trace::find_within_range(const GeoPoint &loc, const fixed range, const unsigned mintime, const fixed resolution) const { if (empty()) return TracePointVector(); TracePoint bb_target(loc); bb_target.project(task_projection); const unsigned mrange = task_projection.project_range(loc, range); // TracePointVector vectors; TracePointSet tset; TracePointSetFilterInserter filter(tset, mintime); trace_tree.find_within_range(bb_target, mrange, filter); /* // std::inserter(tset, tset.begin())); if (mintime>0) { TracePointSet::iterator tit = tset.lower_bound(bb_target); tset.erase(tset.begin(), tit); } */ if (positive(resolution)) { const unsigned rrange = task_projection.project_range(loc, resolution); TracePointList tlist(tset.begin(), tset.end()); thin_trace(tlist, rrange * rrange); return TracePointVector(tlist.begin(), tlist.end()); } else { return TracePointVector(tset.begin(), tset.end()); } }
TracePointVector Trace::get_trace_points(const unsigned max_points) const { TracePointSet tset(begin(), end()); if (tset.empty()) return TracePointVector(); TracePointList tlist(tset.begin(), tset.end()); unsigned mrange = 3; while (tlist.size() > max_points) { thin_trace(tlist, mrange); mrange = (mrange * 4) / 3; } return TracePointVector(tlist.begin(), tlist.end()); }
TracePointVector Trace::get_trace_points(const unsigned max_points) const { if (max_points == 2) { if (trace_tree.size()<2) { return TracePointVector(); } // special case - just look for points within time range TracePoint p; unsigned tmin = (unsigned)-1; for (TraceTree::const_iterator tr = trace_tree.begin(); tr != trace_tree.end(); ++tr) { if (inside_time_window(tr->time) && (tr->time< tmin)) { p = *tr; tmin = tr->time; } } TracePointVector v; v.push_back(p); v.push_back(m_last_point); return v; } TracePointSet tset(begin(), end()); if (tset.empty()) return TracePointVector(); TracePointList tlist(tset.begin(), tset.end()); unsigned mrange = 3; while (tlist.size() > max_points) { thin_trace(tlist, mrange); mrange = (mrange * 4) / 3; } return TracePointVector(tlist.begin(), tlist.end()); }