mirror of
https://github.com/tumic0/GPXSee.git
synced 2024-11-30 22:51:16 +01:00
POI loading optimization
This commit is contained in:
parent
434df521fb
commit
f02ff1fa01
26
src/gui.cpp
26
src/gui.cpp
@ -250,7 +250,8 @@ void GUI::createActions()
|
|||||||
tr("Show POIs"), this);
|
tr("Show POIs"), this);
|
||||||
_showPOIAction->setCheckable(true);
|
_showPOIAction->setCheckable(true);
|
||||||
_showPOIAction->setShortcut(SHOW_POI_SHORTCUT);
|
_showPOIAction->setShortcut(SHOW_POI_SHORTCUT);
|
||||||
connect(_showPOIAction, SIGNAL(triggered(bool)), this, SLOT(showPOI(bool)));
|
connect(_showPOIAction, SIGNAL(triggered(bool)), _pathView,
|
||||||
|
SLOT(showPOI(bool)));
|
||||||
addAction(_showPOIAction);
|
addAction(_showPOIAction);
|
||||||
createPOIFilesActions();
|
createPOIFilesActions();
|
||||||
|
|
||||||
@ -463,6 +464,8 @@ void GUI::createPathView()
|
|||||||
#ifdef Q_OS_WIN32
|
#ifdef Q_OS_WIN32
|
||||||
_pathView->setFrameShape(QFrame::NoFrame);
|
_pathView->setFrameShape(QFrame::NoFrame);
|
||||||
#endif // Q_OS_WIN32
|
#endif // Q_OS_WIN32
|
||||||
|
|
||||||
|
_pathView->setPOI(&_poi);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GUI::createGraphTabs()
|
void GUI::createGraphTabs()
|
||||||
@ -622,8 +625,6 @@ bool GUI::loadFile(const QString &fileName)
|
|||||||
_tabs.at(i)->loadGPX(gpx, paths);
|
_tabs.at(i)->loadGPX(gpx, paths);
|
||||||
updateGraphTabs();
|
updateGraphTabs();
|
||||||
_pathView->setHidden(false);
|
_pathView->setHidden(false);
|
||||||
if (_showPOIAction->isChecked())
|
|
||||||
_pathView->loadPOI(_poi);
|
|
||||||
|
|
||||||
for (int i = 0; i < gpx.tracks().count(); i++) {
|
for (int i = 0; i < gpx.tracks().count(); i++) {
|
||||||
_trackDistance += gpx.tracks().at(i)->distance();
|
_trackDistance += gpx.tracks().at(i)->distance();
|
||||||
@ -679,8 +680,9 @@ bool GUI::openPOIFile(const QString &fileName)
|
|||||||
|
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
|
_pathView->setPOI(&_poi);
|
||||||
|
_pathView->showPOI(true);
|
||||||
_showPOIAction->setChecked(true);
|
_showPOIAction->setChecked(true);
|
||||||
_pathView->loadPOI(_poi);
|
|
||||||
QAction *action = createPOIFileAction(_poi.files().indexOf(fileName));
|
QAction *action = createPOIFileAction(_poi.files().indexOf(fileName));
|
||||||
action->setChecked(true);
|
action->setChecked(true);
|
||||||
_poiFilesMenu->addAction(action);
|
_poiFilesMenu->addAction(action);
|
||||||
@ -697,7 +699,7 @@ void GUI::closePOIFiles()
|
|||||||
delete _poiFilesActions[i];
|
delete _poiFilesActions[i];
|
||||||
_poiFilesActions.clear();
|
_poiFilesActions.clear();
|
||||||
|
|
||||||
_pathView->clearPOI();
|
_pathView->setPOI(0);
|
||||||
|
|
||||||
_poi.clear();
|
_poi.clear();
|
||||||
}
|
}
|
||||||
@ -853,14 +855,6 @@ void GUI::closeAll()
|
|||||||
updateTrackView();
|
updateTrackView();
|
||||||
}
|
}
|
||||||
|
|
||||||
void GUI::showPOI(bool checked)
|
|
||||||
{
|
|
||||||
if (checked)
|
|
||||||
_pathView->loadPOI(_poi);
|
|
||||||
else
|
|
||||||
_pathView->clearPOI();
|
|
||||||
}
|
|
||||||
|
|
||||||
void GUI::showMap(bool checked)
|
void GUI::showMap(bool checked)
|
||||||
{
|
{
|
||||||
if (checked)
|
if (checked)
|
||||||
@ -1007,9 +1001,7 @@ void GUI::poiFileChecked(int index)
|
|||||||
_poi.enableFile(_poi.files().at(index),
|
_poi.enableFile(_poi.files().at(index),
|
||||||
_poiFilesActions.at(index)->isChecked());
|
_poiFilesActions.at(index)->isChecked());
|
||||||
|
|
||||||
_pathView->clearPOI();
|
_pathView->setPOI(&_poi);
|
||||||
if (_showPOIAction->isChecked())
|
|
||||||
_pathView->loadPOI(_poi);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void GUI::sliderPositionChanged(qreal pos)
|
void GUI::sliderPositionChanged(qreal pos)
|
||||||
@ -1311,6 +1303,8 @@ void GUI::readSettings()
|
|||||||
_showPOILabelsAction->setChecked(true);
|
_showPOILabelsAction->setChecked(true);
|
||||||
if (settings.value(SHOW_POI_SETTING, false).toBool() == true)
|
if (settings.value(SHOW_POI_SETTING, false).toBool() == true)
|
||||||
_showPOIAction->setChecked(true);
|
_showPOIAction->setChecked(true);
|
||||||
|
else
|
||||||
|
_pathView->showPOI(false);
|
||||||
for (int i = 0; i < _poiFilesActions.count(); i++)
|
for (int i = 0; i < _poiFilesActions.count(); i++)
|
||||||
_poiFilesActions.at(i)->setChecked(true);
|
_poiFilesActions.at(i)->setChecked(true);
|
||||||
int size = settings.beginReadArray(DISABLED_POI_FILE_SETTINGS_PREFIX);
|
int size = settings.beginReadArray(DISABLED_POI_FILE_SETTINGS_PREFIX);
|
||||||
|
@ -45,7 +45,6 @@ private slots:
|
|||||||
void reloadFile();
|
void reloadFile();
|
||||||
void openPOIFile();
|
void openPOIFile();
|
||||||
void closePOIFiles();
|
void closePOIFiles();
|
||||||
void showPOI(bool checked);
|
|
||||||
void showMap(bool checked);
|
void showMap(bool checked);
|
||||||
void showGraphs(bool checked);
|
void showGraphs(bool checked);
|
||||||
void showToolbars(bool checked);
|
void showToolbars(bool checked);
|
||||||
|
116
src/pathview.cpp
116
src/pathview.cpp
@ -34,6 +34,7 @@ PathView::PathView(QWidget *parent)
|
|||||||
_zoom = ZOOM_MAX;
|
_zoom = ZOOM_MAX;
|
||||||
_scale = mapScale(_zoom);
|
_scale = mapScale(_zoom);
|
||||||
_map = 0;
|
_map = 0;
|
||||||
|
_poi = 0;
|
||||||
|
|
||||||
_units = Metric;
|
_units = Metric;
|
||||||
|
|
||||||
@ -41,6 +42,7 @@ PathView::PathView(QWidget *parent)
|
|||||||
_showRoutes = true;
|
_showRoutes = true;
|
||||||
_showWaypoints = true;
|
_showWaypoints = true;
|
||||||
_showWaypointLabels = true;
|
_showWaypointLabels = true;
|
||||||
|
_showPOI = true;
|
||||||
_showPOILabels = true;
|
_showPOILabels = true;
|
||||||
_overlapPOIs = true;
|
_overlapPOIs = true;
|
||||||
_showRouteWaypoints = true;
|
_showRouteWaypoints = true;
|
||||||
@ -70,6 +72,9 @@ PathItem *PathView::addTrack(const Track &track)
|
|||||||
ti->setVisible(_showTracks);
|
ti->setVisible(_showTracks);
|
||||||
_scene->addItem(ti);
|
_scene->addItem(ti);
|
||||||
|
|
||||||
|
if (_poi)
|
||||||
|
addPOI(_poi->points(ti));
|
||||||
|
|
||||||
return ti;
|
return ti;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -91,6 +96,9 @@ PathItem *PathView::addRoute(const Route &route)
|
|||||||
ri->showWaypointLabels(_showWaypointLabels);
|
ri->showWaypointLabels(_showWaypointLabels);
|
||||||
_scene->addItem(ri);
|
_scene->addItem(ri);
|
||||||
|
|
||||||
|
if (_poi)
|
||||||
|
addPOI(_poi->points(ri));
|
||||||
|
|
||||||
return ri;
|
return ri;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -109,6 +117,9 @@ void PathView::addWaypoints(const QList<Waypoint> &waypoints)
|
|||||||
_waypoints.append(wi);
|
_waypoints.append(wi);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (_poi)
|
||||||
|
addPOI(_poi->points(waypoints));
|
||||||
|
|
||||||
_zoom = qMin(_zoom, scale2zoom(waypointScale()));
|
_zoom = qMin(_zoom, scale2zoom(waypointScale()));
|
||||||
_scale = mapScale(_zoom);
|
_scale = mapScale(_zoom);
|
||||||
}
|
}
|
||||||
@ -131,6 +142,8 @@ QList<PathItem *> PathView::loadGPX(const GPX &gpx)
|
|||||||
if ((_tracks.size() + _routes.size() > 1 && _zoom < zoom)
|
if ((_tracks.size() + _routes.size() > 1 && _zoom < zoom)
|
||||||
|| (_waypoints.size() && _zoom < zoom))
|
|| (_waypoints.size() && _zoom < zoom))
|
||||||
rescale(_scale);
|
rescale(_scale);
|
||||||
|
else
|
||||||
|
updatePOIVisibility();
|
||||||
|
|
||||||
QRectF br = trackBoundingRect() | routeBoundingRect()
|
QRectF br = trackBoundingRect() | routeBoundingRect()
|
||||||
| waypointBoundingRect();
|
| waypointBoundingRect();
|
||||||
@ -258,21 +271,31 @@ qreal PathView::mapScale(int zoom) const
|
|||||||
return ((360.0/(qreal)(1<<zoom))/(qreal)TILE_SIZE);
|
return ((360.0/(qreal)(1<<zoom))/(qreal)TILE_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PathView::checkPOIOverlap()
|
void PathView::updatePOIVisibility()
|
||||||
{
|
{
|
||||||
QHash<Waypoint, WaypointItem*>::const_iterator it, jt;
|
QHash<Waypoint, WaypointItem*>::const_iterator it, jt;
|
||||||
|
|
||||||
|
if (!_showPOI)
|
||||||
|
return;
|
||||||
|
|
||||||
|
for (it = _pois.constBegin(); it != _pois.constEnd(); it++)
|
||||||
|
it.value()->show();
|
||||||
|
|
||||||
|
if (!_overlapPOIs) {
|
||||||
for (it = _pois.constBegin(); it != _pois.constEnd(); it++) {
|
for (it = _pois.constBegin(); it != _pois.constEnd(); it++) {
|
||||||
for (jt = _pois.constBegin(); jt != _pois.constEnd(); jt++) {
|
for (jt = _pois.constBegin(); jt != _pois.constEnd(); jt++) {
|
||||||
if (it != jt && it.value()->isVisible() && jt.value()->isVisible()
|
if (it.value()->isVisible() && jt.value()->isVisible()
|
||||||
&& it.value()->collidesWithItem(jt.value()))
|
&& it != jt && it.value()->collidesWithItem(jt.value()))
|
||||||
jt.value()->hide();
|
jt.value()->hide();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void PathView::rescale(qreal scale)
|
void PathView::rescale(qreal scale)
|
||||||
{
|
{
|
||||||
|
_scale = scale;
|
||||||
|
|
||||||
for (int i = 0; i < _tracks.size(); i++)
|
for (int i = 0; i < _tracks.size(); i++)
|
||||||
_tracks.at(i)->setScale(1.0/scale);
|
_tracks.at(i)->setScale(1.0/scale);
|
||||||
|
|
||||||
@ -283,15 +306,44 @@ void PathView::rescale(qreal scale)
|
|||||||
_waypoints.at(i)->setScale(1.0/scale);
|
_waypoints.at(i)->setScale(1.0/scale);
|
||||||
|
|
||||||
QHash<Waypoint, WaypointItem*>::const_iterator it;
|
QHash<Waypoint, WaypointItem*>::const_iterator it;
|
||||||
for (it = _pois.constBegin(); it != _pois.constEnd(); it++) {
|
for (it = _pois.constBegin(); it != _pois.constEnd(); it++)
|
||||||
it.value()->setScale(1.0/scale);
|
it.value()->setScale(1.0/scale);
|
||||||
it.value()->show();
|
|
||||||
|
updatePOIVisibility();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!_overlapPOIs)
|
void PathView::setPOI(POI *poi)
|
||||||
checkPOIOverlap();
|
{
|
||||||
|
_poi = poi;
|
||||||
|
|
||||||
_scale = scale;
|
clearPOI();
|
||||||
|
loadPOI();
|
||||||
|
}
|
||||||
|
|
||||||
|
void PathView::loadPOI()
|
||||||
|
{
|
||||||
|
if (!_poi)
|
||||||
|
return;
|
||||||
|
|
||||||
|
for (int i = 0; i < _tracks.size(); i++)
|
||||||
|
addPOI(_poi->points(_tracks.at(i)));
|
||||||
|
for (int i = 0; i < _routes.size(); i++)
|
||||||
|
addPOI(_poi->points(_routes.at(i)));
|
||||||
|
addPOI(_poi->points(_waypoints));
|
||||||
|
|
||||||
|
updatePOIVisibility();
|
||||||
|
}
|
||||||
|
|
||||||
|
void PathView::clearPOI()
|
||||||
|
{
|
||||||
|
QHash<Waypoint, WaypointItem*>::const_iterator it;
|
||||||
|
|
||||||
|
for (it = _pois.constBegin(); it != _pois.constEnd(); it++) {
|
||||||
|
_scene->removeItem(it.value());
|
||||||
|
delete it.value();
|
||||||
|
}
|
||||||
|
|
||||||
|
_pois.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
void PathView::addPOI(const QVector<Waypoint> &waypoints)
|
void PathView::addPOI(const QVector<Waypoint> &waypoints)
|
||||||
@ -306,27 +358,13 @@ void PathView::addPOI(const QVector<Waypoint> &waypoints)
|
|||||||
pi->setScale(1.0/_scale);
|
pi->setScale(1.0/_scale);
|
||||||
pi->setZValue(1);
|
pi->setZValue(1);
|
||||||
pi->showLabel(_showPOILabels);
|
pi->showLabel(_showPOILabels);
|
||||||
|
pi->setVisible(_showPOI);
|
||||||
_scene->addItem(pi);
|
_scene->addItem(pi);
|
||||||
|
|
||||||
_pois.insert(w, pi);
|
_pois.insert(w, pi);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void PathView::loadPOI(const POI &poi)
|
|
||||||
{
|
|
||||||
if (!_tracks.size() && !_routes.size() && !_waypoints.size())
|
|
||||||
return;
|
|
||||||
|
|
||||||
for (int i = 0; i < _tracks.size(); i++)
|
|
||||||
addPOI(poi.points(_tracks.at(i)->path()));
|
|
||||||
for (int i = 0; i < _routes.size(); i++)
|
|
||||||
addPOI(poi.points(_routes.at(i)->path()));
|
|
||||||
addPOI(poi.points(_waypoints));
|
|
||||||
|
|
||||||
if (!_overlapPOIs)
|
|
||||||
checkPOIOverlap();
|
|
||||||
}
|
|
||||||
|
|
||||||
void PathView::setMap(Map *map)
|
void PathView::setMap(Map *map)
|
||||||
{
|
{
|
||||||
_map = map;
|
_map = map;
|
||||||
@ -454,18 +492,6 @@ void PathView::plot(QPainter *painter, const QRectF &target)
|
|||||||
setUpdatesEnabled(true);
|
setUpdatesEnabled(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PathView::clearPOI()
|
|
||||||
{
|
|
||||||
QHash<Waypoint, WaypointItem*>::const_iterator it;
|
|
||||||
|
|
||||||
for (it = _pois.constBegin(); it != _pois.constEnd(); it++) {
|
|
||||||
_scene->removeItem(it.value());
|
|
||||||
delete it.value();
|
|
||||||
}
|
|
||||||
|
|
||||||
_pois.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
void PathView::clear()
|
void PathView::clear()
|
||||||
{
|
{
|
||||||
if (_mapScale->scene() == _scene)
|
if (_mapScale->scene() == _scene)
|
||||||
@ -527,6 +553,17 @@ void PathView::showRouteWaypoints(bool show)
|
|||||||
_routes.at(i)->showWaypoints(show);
|
_routes.at(i)->showWaypoints(show);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PathView::showPOI(bool show)
|
||||||
|
{
|
||||||
|
_showPOI = show;
|
||||||
|
|
||||||
|
QHash<Waypoint, WaypointItem*>::const_iterator it;
|
||||||
|
for (it = _pois.constBegin(); it != _pois.constEnd(); it++)
|
||||||
|
it.value()->setVisible(show);
|
||||||
|
|
||||||
|
updatePOIVisibility();
|
||||||
|
}
|
||||||
|
|
||||||
void PathView::showPOILabels(bool show)
|
void PathView::showPOILabels(bool show)
|
||||||
{
|
{
|
||||||
_showPOILabels = show;
|
_showPOILabels = show;
|
||||||
@ -535,19 +572,14 @@ void PathView::showPOILabels(bool show)
|
|||||||
for (it = _pois.constBegin(); it != _pois.constEnd(); it++)
|
for (it = _pois.constBegin(); it != _pois.constEnd(); it++)
|
||||||
it.value()->showLabel(show);
|
it.value()->showLabel(show);
|
||||||
|
|
||||||
setPOIOverlap(_overlapPOIs);
|
updatePOIVisibility();
|
||||||
}
|
}
|
||||||
|
|
||||||
void PathView::setPOIOverlap(bool overlap)
|
void PathView::setPOIOverlap(bool overlap)
|
||||||
{
|
{
|
||||||
_overlapPOIs = overlap;
|
_overlapPOIs = overlap;
|
||||||
|
|
||||||
if (_overlapPOIs) {
|
updatePOIVisibility();
|
||||||
QHash<Waypoint, WaypointItem*>::const_iterator it;
|
|
||||||
for (it = _pois.constBegin(); it != _pois.constEnd(); it++)
|
|
||||||
it.value()->show();
|
|
||||||
} else
|
|
||||||
checkPOIOverlap();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void PathView::drawBackground(QPainter *painter, const QRectF &rect)
|
void PathView::drawBackground(QPainter *painter, const QRectF &rect)
|
||||||
|
@ -30,10 +30,7 @@ public:
|
|||||||
|
|
||||||
QList<PathItem*> loadGPX(const GPX &gpx);
|
QList<PathItem*> loadGPX(const GPX &gpx);
|
||||||
|
|
||||||
void loadPOI(const POI &poi);
|
void setPOI(POI *poi);
|
||||||
void clearPOI();
|
|
||||||
void clear();
|
|
||||||
|
|
||||||
void setMap(Map *map);
|
void setMap(Map *map);
|
||||||
void setUnits(enum Units units);
|
void setUnits(enum Units units);
|
||||||
|
|
||||||
@ -43,9 +40,12 @@ public:
|
|||||||
int routeCount() const {return _routes.count();}
|
int routeCount() const {return _routes.count();}
|
||||||
int waypointCount() const {return _waypoints.count();}
|
int waypointCount() const {return _waypoints.count();}
|
||||||
|
|
||||||
|
void clear();
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void redraw();
|
void redraw();
|
||||||
|
|
||||||
|
void showPOI(bool show);
|
||||||
void setPOIOverlap(bool overlap);
|
void setPOIOverlap(bool overlap);
|
||||||
void showWaypointLabels(bool show);
|
void showWaypointLabels(bool show);
|
||||||
void showPOILabels(bool show);
|
void showPOILabels(bool show);
|
||||||
@ -59,6 +59,8 @@ private:
|
|||||||
PathItem *addRoute(const Route &route);
|
PathItem *addRoute(const Route &route);
|
||||||
void addWaypoints(const QList<Waypoint> &waypoints);
|
void addWaypoints(const QList<Waypoint> &waypoints);
|
||||||
void addPOI(const QVector<Waypoint> &waypoints);
|
void addPOI(const QVector<Waypoint> &waypoints);
|
||||||
|
void loadPOI();
|
||||||
|
void clearPOI();
|
||||||
|
|
||||||
QRectF trackBoundingRect() const;
|
QRectF trackBoundingRect() const;
|
||||||
QRectF routeBoundingRect() const;
|
QRectF routeBoundingRect() const;
|
||||||
@ -70,7 +72,7 @@ private:
|
|||||||
void rescale(qreal scale);
|
void rescale(qreal scale);
|
||||||
void rescale();
|
void rescale();
|
||||||
void zoom(int z, const QPointF &pos);
|
void zoom(int z, const QPointF &pos);
|
||||||
void checkPOIOverlap();
|
void updatePOIVisibility();
|
||||||
|
|
||||||
void wheelEvent(QWheelEvent *event);
|
void wheelEvent(QWheelEvent *event);
|
||||||
void keyPressEvent(QKeyEvent *event);
|
void keyPressEvent(QKeyEvent *event);
|
||||||
@ -79,13 +81,14 @@ private:
|
|||||||
void paintEvent(QPaintEvent *e);
|
void paintEvent(QPaintEvent *e);
|
||||||
|
|
||||||
QGraphicsScene *_scene;
|
QGraphicsScene *_scene;
|
||||||
|
ScaleItem *_mapScale;
|
||||||
QList<TrackItem*> _tracks;
|
QList<TrackItem*> _tracks;
|
||||||
QList<RouteItem*> _routes;
|
QList<RouteItem*> _routes;
|
||||||
QList<WaypointItem*> _waypoints;
|
QList<WaypointItem*> _waypoints;
|
||||||
QHash<Waypoint, WaypointItem*> _pois;
|
QHash<Waypoint, WaypointItem*> _pois;
|
||||||
|
|
||||||
Map *_map;
|
Map *_map;
|
||||||
ScaleItem *_mapScale;
|
POI *_poi;
|
||||||
|
|
||||||
Palette _palette;
|
Palette _palette;
|
||||||
|
|
||||||
@ -98,6 +101,7 @@ private:
|
|||||||
bool _showRoutes;
|
bool _showRoutes;
|
||||||
bool _showWaypoints;
|
bool _showWaypoints;
|
||||||
bool _showWaypointLabels;
|
bool _showWaypointLabels;
|
||||||
|
bool _showPOI;
|
||||||
bool _showPOILabels;
|
bool _showPOILabels;
|
||||||
bool _overlapPOIs;
|
bool _overlapPOIs;
|
||||||
bool _showRouteWaypoints;
|
bool _showRouteWaypoints;
|
||||||
|
33
src/poi.cpp
33
src/poi.cpp
@ -1,7 +1,7 @@
|
|||||||
#include <QFile>
|
#include <QFile>
|
||||||
#include <QSet>
|
#include <QSet>
|
||||||
#include <QList>
|
#include <QList>
|
||||||
#include <QPainterPath>
|
#include "pathitem.h"
|
||||||
#include "waypointitem.h"
|
#include "waypointitem.h"
|
||||||
#include "ll.h"
|
#include "ll.h"
|
||||||
#include "gpx.h"
|
#include "gpx.h"
|
||||||
@ -145,14 +145,15 @@ static bool cb(size_t data, void* context)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
QVector<Waypoint> POI::points(const QPainterPath &path, qreal radius) const
|
QVector<Waypoint> POI::points(const PathItem *path, qreal radius) const
|
||||||
{
|
{
|
||||||
QVector<Waypoint> ret;
|
QVector<Waypoint> ret;
|
||||||
QSet<int> set;
|
QSet<int> set;
|
||||||
qreal min[2], max[2];
|
qreal min[2], max[2];
|
||||||
|
const QPainterPath &pp = path->path();
|
||||||
|
|
||||||
for (int i = 0; i < path.elementCount(); i++) {
|
for (int i = 0; i < pp.elementCount(); i++) {
|
||||||
QPointF p = mercator2ll(path.elementAt(i));
|
QPointF p = mercator2ll(pp.elementAt(i));
|
||||||
min[0] = p.x() - radius;
|
min[0] = p.x() - radius;
|
||||||
min[1] = -p.y() - radius;
|
min[1] = -p.y() - radius;
|
||||||
max[0] = p.x() + radius;
|
max[0] = p.x() + radius;
|
||||||
@ -194,6 +195,30 @@ QVector<Waypoint> POI::points(const QList<WaypointItem*> &list, qreal radius)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QVector<Waypoint> POI::points(const QList<Waypoint> &list, qreal radius) const
|
||||||
|
{
|
||||||
|
QVector<Waypoint> ret;
|
||||||
|
QSet<int> set;
|
||||||
|
qreal min[2], max[2];
|
||||||
|
|
||||||
|
for (int i = 0; i < list.count(); i++) {
|
||||||
|
const QPointF &p = list.at(i).coordinates();
|
||||||
|
min[0] = p.x() - radius;
|
||||||
|
min[1] = p.y() - radius;
|
||||||
|
max[0] = p.x() + radius;
|
||||||
|
max[1] = p.y() + radius;
|
||||||
|
_tree.Search(min, max, cb, &set);
|
||||||
|
}
|
||||||
|
|
||||||
|
QSet<int>::const_iterator i = set.constBegin();
|
||||||
|
while (i != set.constEnd()) {
|
||||||
|
ret.append(_data.at(*i));
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
void POI::enableFile(const QString &fileName, bool enable)
|
void POI::enableFile(const QString &fileName, bool enable)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
#include "waypoint.h"
|
#include "waypoint.h"
|
||||||
#include "rtree.h"
|
#include "rtree.h"
|
||||||
|
|
||||||
class QPainterPath;
|
class PathItem;
|
||||||
class WaypointItem;
|
class WaypointItem;
|
||||||
|
|
||||||
#define POI_RADIUS 0.01
|
#define POI_RADIUS 0.01
|
||||||
@ -21,10 +21,12 @@ public:
|
|||||||
const QString &errorString() const {return _error;}
|
const QString &errorString() const {return _error;}
|
||||||
int errorLine() const {return _errorLine;}
|
int errorLine() const {return _errorLine;}
|
||||||
|
|
||||||
QVector<Waypoint> points(const QPainterPath &path,
|
QVector<Waypoint> points(const PathItem *path,
|
||||||
qreal radius = POI_RADIUS) const;
|
qreal radius = POI_RADIUS) const;
|
||||||
QVector<Waypoint> points(const QList<WaypointItem*> &list,
|
QVector<Waypoint> points(const QList<WaypointItem*> &list,
|
||||||
qreal radius = POI_RADIUS) const;
|
qreal radius = POI_RADIUS) const;
|
||||||
|
QVector<Waypoint> points(const QList<Waypoint> &list,
|
||||||
|
qreal radius = POI_RADIUS) const;
|
||||||
|
|
||||||
const QStringList &files() const {return _files;}
|
const QStringList &files() const {return _files;}
|
||||||
void enableFile(const QString &fileName, bool enable);
|
void enableFile(const QString &fileName, bool enable);
|
||||||
|
Loading…
Reference in New Issue
Block a user