blob: 89e22471d0084ff30199c1bfb1b832feca346b16 (
plain)
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
78
79
80
81
82
83
84
85
86
87
88
89
90
|
#include "map/track.hpp"
#include "map/bookmark_helpers.hpp"
#include "map/user_mark_id_storage.hpp"
#include "geometry/distance_on_sphere.hpp"
#include "geometry/mercator.hpp"
Track::Track(kml::TrackData && data)
: Base(data.m_id == kml::kInvalidTrackId ? UserMarkIdStorage::Instance().GetNextTrackId() : data.m_id)
, m_data(std::move(data))
, m_groupID(0)
{
m_data.m_id = GetId();
ASSERT_GREATER(m_data.m_points.size(), 1, ());
}
string Track::GetName() const
{
return GetPreferredBookmarkStr(m_data.m_name);
}
m2::RectD Track::GetLimitRect() const
{
m2::RectD rect;
for (auto const & point : m_data.m_points)
rect.Add(point);
return rect;
}
double Track::GetLengthMeters() const
{
double res = 0.0;
auto it = m_data.m_points.begin();
double lat1 = MercatorBounds::YToLat(it->y);
double lon1 = MercatorBounds::XToLon(it->x);
for (++it; it != m_data.m_points.end(); ++it)
{
double const lat2 = MercatorBounds::YToLat(it->y);
double const lon2 = MercatorBounds::XToLon(it->x);
res += ms::DistanceOnEarth(lat1, lon1, lat2, lon2);
lat1 = lat2;
lon1 = lon2;
}
return res;
}
df::DepthLayer Track::GetDepthLayer() const
{
return df::DepthLayer::UserLineLayer;
}
size_t Track::GetLayerCount() const
{
return m_data.m_layers.size();
}
dp::Color Track::GetColor(size_t layerIndex) const
{
CHECK_LESS(layerIndex, m_data.m_layers.size(), ());
return dp::Color(m_data.m_layers[layerIndex].m_color.m_rgba);
}
float Track::GetWidth(size_t layerIndex) const
{
CHECK_LESS(layerIndex, m_data.m_layers.size(), ());
return static_cast<float>(m_data.m_layers[layerIndex].m_lineWidth);
}
float Track::GetDepth(size_t layerIndex) const
{
return layerIndex * 10;
}
std::vector<m2::PointD> const & Track::GetPoints() const
{
return m_data.m_points;
}
void Track::Attach(kml::MarkGroupId groupId)
{
ASSERT(!m_groupID, ());
m_groupID = groupId;
}
void Track::Detach()
{
m_groupID = 0;
}
|