-
Notifications
You must be signed in to change notification settings - Fork 0
/
track.cpp
77 lines (67 loc) · 1.75 KB
/
track.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include "track.h"
#include <QtConcurrentMap>
Track::Track()
{
}
QString Track::toJSON() const
{
QStringList points_json = QtConcurrent::blockingMapped<QStringList>(points, &TrackPoint_toJSON);
QString data("{name:'%1',date:'%2',points:%3}");
return data.arg(
name,
date.toString(),
QString("[%1]").arg(points_json.join(","))
);
}
void Track::simplify(int count)
{
if (this->points.length() <= count) {
return;
}
// take every n-th point + the last one
QList<TrackPoint> some_points;
int step = points.length() / count;
if (step < 1) {
step = 1;
}
for(int i = 0; i < points.length() - 1; i+= step) {
some_points.append(points[i]);
}
some_points.append(points.last());
points = some_points;
}
BBox Track::getBBox() const
{
if (!points.length()) {
return BBox();
}
float left, top, bottom, right;
left = right = points[0]._lon;
top = bottom = points[0]._lat;
QList<TrackPoint>::const_iterator i = points.begin();
++i;
for (; i != points.end(); ++i) {
float lat = (*i)._lat;
float lon = (*i)._lon;
if ( lon < left) {
left = lon;
} else if (lon > right) {
right = lon;
}
if ( lat > top) {
top = lat;
} else if (lat < bottom) {
bottom = lat;
}
}
return BBox(left, top, right, bottom);
}
QList<Track> Track::autoSplit()
{
// ðàçäåëÿòü ïî òî÷êàì îòîðâàííûì áîëåå ÷åì íà ïîë-÷àñà (êîíôèã!)
// ðàçäåëÿòü ïî òî÷êàì îòîðâàííûì áîëåå ÷åì íà 0.02 ãðàäóñà (~2.2êì, êîíôèã!)
// îòäåëüíûå òî÷êè òðýêîì íå ñ÷èòàòü
// ñåðèþ àáñ. îäèíàêîâûõ êðîìå âðåìåíè òî÷åê == îäíîé òî÷êå
QList<Track> out;
return out;
}