5 #include "waypointitem.h"
10 POI::POI(QObject
*parent
) : QObject(parent
)
16 bool POI::loadFile(const QString
&fileName
)
25 index
.start
= _data
.size();
27 if (!data
.loadFile(fileName
)) {
28 _errorString
= data
.errorString();
29 _errorLine
= data
.errorLine();
33 for (int i
= 0; i
< data
.waypoints().size(); i
++)
34 _data
.append(data
.waypoints().at(i
));
35 index
.end
= _data
.size() - 1;
37 for (int i
= index
.start
; i
<= index
.end
; i
++) {
38 const Coordinates
&p
= _data
.at(i
).coordinates();
42 _tree
.Insert(c
, c
, i
);
45 _files
.append(fileName
);
46 _indexes
.append(index
);
53 static bool cb(size_t data
, void* context
)
55 QSet
<int> *set
= (QSet
<int>*) context
;
56 set
->insert((int)data
);
61 QVector
<Waypoint
> POI::points(const Path
&path
) const
63 QVector
<Waypoint
> ret
;
67 for (int i
= 0; i
< path
.count(); i
++) {
68 const Coordinates
&c
= path
.at(i
).coordinates();
69 QPair
<Coordinates
, Coordinates
> br
= c
.boundingRect(_radius
);
70 min
[0] = br
.first
.lon();
71 min
[1] = br
.first
.lat();
72 max
[0] = br
.second
.lon();
73 max
[1] = br
.second
.lat();
75 _tree
.Search(min
, max
, cb
, &set
);
78 QSet
<int>::const_iterator i
= set
.constBegin();
79 while (i
!= set
.constEnd()) {
80 ret
.append(_data
.at(*i
));
87 QVector
<Waypoint
> POI::points(const QList
<WaypointItem
*> &list
)
90 QVector
<Waypoint
> ret
;
94 for (int i
= 0; i
< list
.count(); i
++) {
95 const Coordinates
&p
= list
.at(i
)->waypoint().coordinates();
97 QPair
<Coordinates
, Coordinates
> br
= p
.boundingRect(_radius
);
98 min
[0] = br
.first
.lon();
99 min
[1] = br
.first
.lat();
100 max
[0] = br
.second
.lon();
101 max
[1] = br
.second
.lat();
103 _tree
.Search(min
, max
, cb
, &set
);
106 QSet
<int>::const_iterator i
= set
.constBegin();
107 while (i
!= set
.constEnd()) {
108 ret
.append(_data
.at(*i
));
115 QVector
<Waypoint
> POI::points(const QList
<Waypoint
> &list
) const
117 QVector
<Waypoint
> ret
;
119 qreal min
[2], max
[2];
121 for (int i
= 0; i
< list
.count(); i
++) {
122 const Coordinates
&p
= list
.at(i
).coordinates();
124 QPair
<Coordinates
, Coordinates
> br
= p
.boundingRect(_radius
);
125 min
[0] = br
.first
.lon();
126 min
[1] = br
.first
.lat();
127 max
[0] = br
.second
.lon();
128 max
[1] = br
.second
.lat();
130 _tree
.Search(min
, max
, cb
, &set
);
133 QSet
<int>::const_iterator i
= set
.constBegin();
134 while (i
!= set
.constEnd()) {
135 ret
.append(_data
.at(*i
));
142 void POI::enableFile(const QString
&fileName
, bool enable
)
146 i
= _files
.indexOf(fileName
);
148 _indexes
[i
].enabled
= enable
;
151 for (int i
= 0; i
< _indexes
.count(); i
++) {
152 FileIndex idx
= _indexes
.at(i
);
156 for (int j
= idx
.start
; j
<= idx
.end
; j
++) {
157 const Coordinates
&p
= _data
.at(j
).coordinates();
161 _tree
.Insert(c
, c
, j
);
165 emit
pointsChanged();
175 emit
pointsChanged();
178 void POI::setRadius(unsigned radius
)
182 emit
pointsChanged();