• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdeedu API Reference
  • KDE Home
  • Contact Us
 

marble

  • sources
  • kde-4.14
  • kdeedu
  • marble
  • src
  • plugins
  • positionprovider
  • routesimulation
RouteSimulationPositionProviderPlugin.cpp
Go to the documentation of this file.
1 //
2 // This file is part of the Marble Virtual Globe.
3 //
4 // This program is free software licensed under the GNU LGPL. You can
5 // find a copy of this license in LICENSE.txt in the top directory of
6 // the source code.
7 //
8 // Copyright 2011 Konrad Enzensberger <e.konrad@mpegcode.com>
9 // Copyright 2011 Dennis Nienhüser <earthwings@gentoo.org>
10 // Copyright 2012 Bernhard Beschow <bbeschow@cs.tu-berlin.de>
11 //
12 
13 #include "RouteSimulationPositionProviderPlugin.h"
14 
15 #include <QTimer>
16 
17 #include "GeoDataCoordinates.h"
18 #include "GeoDataDocument.h"
19 #include "GeoDataFolder.h"
20 #include "GeoDataPlacemark.h"
21 #include "MarbleDebug.h"
22 #include "MarbleModel.h"
23 #include "routing/AlternativeRoutesModel.h"
24 #include "routing/RoutingManager.h"
25 
26 namespace Marble
27 {
28 
29 namespace {
30  qreal const c_frequency = 4.0; // Hz
31 }
32 
33 QString RouteSimulationPositionProviderPlugin::name() const
34 {
35  return tr( "Current Route Position Provider Plugin" );
36 }
37 
38 QString RouteSimulationPositionProviderPlugin::nameId() const
39 {
40  return "RouteSimulationPositionProviderPlugin";
41 }
42 
43 QString RouteSimulationPositionProviderPlugin::guiString() const
44 {
45  return tr( "Current Route" );
46 }
47 
48 QString RouteSimulationPositionProviderPlugin::version() const
49 {
50  return "1.1";
51 }
52 
53 QString RouteSimulationPositionProviderPlugin::description() const
54 {
55  return tr( "Simulates traveling along the current route." );
56 }
57 
58 QString RouteSimulationPositionProviderPlugin::copyrightYears() const
59 {
60  return "2011, 2012";
61 }
62 
63 QList<PluginAuthor> RouteSimulationPositionProviderPlugin::pluginAuthors() const
64 {
65  return QList<PluginAuthor>()
66  << PluginAuthor( "Konrad Enzensberger", "e.konrad@mpegcode.com" )
67  << PluginAuthor( QString::fromUtf8( "Dennis Nienhüser" ), "earthwings@gentoo.org" )
68  << PluginAuthor( "Bernhard Beschow", "bbeschow@cs.tu-berlin.de" );
69 }
70 
71 QIcon RouteSimulationPositionProviderPlugin::icon() const
72 {
73  return QIcon();
74 }
75 
76 PositionProviderPlugin* RouteSimulationPositionProviderPlugin::newInstance() const
77 {
78  return new RouteSimulationPositionProviderPlugin;
79 }
80 
81 PositionProviderStatus RouteSimulationPositionProviderPlugin::status() const
82 {
83  return m_status;
84 }
85 
86 GeoDataCoordinates RouteSimulationPositionProviderPlugin::position() const
87 {
88  return m_currentPosition;
89 }
90 
91 GeoDataAccuracy RouteSimulationPositionProviderPlugin::accuracy() const
92 {
93  GeoDataAccuracy result;
94 
95  // faked values
96  result.level = GeoDataAccuracy::Detailed;
97  result.horizontal = 10.0;
98  result.vertical = 10.0;
99 
100  return result;
101 }
102 
103 RouteSimulationPositionProviderPlugin::RouteSimulationPositionProviderPlugin() :
104  m_currentIndex( -2 ),
105  m_status( PositionProviderStatusUnavailable ),
106  m_direction( 0.0 )
107 {
108  // nothing to do
109 }
110 
111 RouteSimulationPositionProviderPlugin::~RouteSimulationPositionProviderPlugin()
112 {
113 }
114 
115 void RouteSimulationPositionProviderPlugin::initialize()
116 {
117  m_currentIndex = -1;
118 
119  m_lineString.clear();
120 
121  GeoDataDocument* document = const_cast<MarbleModel *>( marbleModel() )->routingManager()->alternativeRoutesModel()->currentRoute();
122  if ( document && document->size() > 0 ) {
123  foreach( const GeoDataPlacemark *placemark, document->placemarkList() ) {
124  const GeoDataGeometry* geometry = placemark->geometry();
125  const GeoDataLineString* lineString = dynamic_cast<const GeoDataLineString*>( geometry );
126  if ( lineString ) {
127  m_lineString << *lineString;
128  }
129  }
130  }
131 
132  m_status = m_lineString.isEmpty() ? PositionProviderStatusUnavailable : PositionProviderStatusAcquiring;
133 
134  if ( !m_lineString.isEmpty() ) {
135  QTimer::singleShot( 1000.0 / c_frequency, this, SLOT(update()) );
136  }
137 }
138 
139 bool RouteSimulationPositionProviderPlugin::isInitialized() const
140 {
141  return ( m_currentIndex > -2 );
142 }
143 
144 qreal RouteSimulationPositionProviderPlugin::speed() const
145 {
147  return 0.0;
148 }
149 
150 qreal RouteSimulationPositionProviderPlugin::direction() const
151 {
152  return m_direction;
153 }
154 
155 QDateTime RouteSimulationPositionProviderPlugin::timestamp() const
156 {
157  return QDateTime::currentDateTime();
158 }
159 
160 void RouteSimulationPositionProviderPlugin::update()
161 {
162  ++m_currentIndex;
163 
164  if ( m_currentIndex >= 0 && m_currentIndex < m_lineString.size() ) {
165  if ( m_status != PositionProviderStatusAvailable ) {
166  m_status = PositionProviderStatusAvailable;
167  emit statusChanged( PositionProviderStatusAvailable );
168  }
169 
170  GeoDataCoordinates newPosition = m_lineString.at( m_currentIndex );
171  if ( m_currentPosition.isValid() ) {
172  m_direction = m_currentPosition.bearing( newPosition, GeoDataCoordinates::Degree, GeoDataCoordinates::FinalBearing );
173  }
174  m_currentPosition = newPosition;
175  emit positionChanged( position(), accuracy() );
176  }
177  else {
178  // Repeat from start
179  m_currentIndex = -1;
180  if ( m_status != PositionProviderStatusUnavailable ) {
181  m_status = PositionProviderStatusUnavailable;
182  emit statusChanged( PositionProviderStatusUnavailable );
183  }
184  }
185 
186  QTimer::singleShot( 1000.0 / c_frequency, this, SLOT(update()) );
187 }
188 
189 } // namespace Marble
190 
191 Q_EXPORT_PLUGIN2( RouteSimulationPositionProviderPlugin, Marble::RouteSimulationPositionProviderPlugin )
192 
193 #include "RouteSimulationPositionProviderPlugin.moc"
GeoDataDocument.h
GeoDataCoordinates.h
Marble::GeoDataCoordinates
A 3d point representation.
Definition: GeoDataCoordinates.h:52
Marble::GeoDataDocument
A container for Features, Styles and in the future Schemas.
Definition: GeoDataDocument.h:65
Marble::RouteSimulationPositionProviderPlugin::timestamp
virtual QDateTime timestamp() const
Definition: RouteSimulationPositionProviderPlugin.cpp:155
Marble::PositionProviderPlugin::statusChanged
void statusChanged(PositionProviderStatus status) const
MarbleModel.h
This file contains the headers for MarbleModel.
Marble::GeoDataLineString::size
int size() const
Returns the number of nodes in a LineString.
Definition: GeoDataLineString.cpp:138
Marble::GeoDataGeometry
A base class for all geodata features.
Definition: GeoDataGeometry.h:47
Marble::PluginAuthor
Definition: PluginInterface.h:28
RouteSimulationPositionProviderPlugin.h
Marble::RouteSimulationPositionProviderPlugin::description
virtual QString description() const
Returns a user description of the plugin.
Definition: RouteSimulationPositionProviderPlugin.cpp:53
Marble::RouteSimulationPositionProviderPlugin::name
virtual QString name() const
Returns the user-visible name of the plugin.
Definition: RouteSimulationPositionProviderPlugin.cpp:33
Marble::RouteSimulationPositionProviderPlugin::version
virtual QString version() const
Definition: RouteSimulationPositionProviderPlugin.cpp:48
MarbleDebug.h
QObject::tr
QString tr(const char *sourceText, const char *disambiguation, int n)
Marble::PositionProviderStatusUnavailable
Definition: PositionProviderPluginInterface.h:27
Marble::GeoDataCoordinates::Degree
Definition: GeoDataCoordinates.h:66
Marble::GeoDataPlacemark::geometry
GeoDataGeometry * geometry()
The geometry of the GeoDataPlacemark is to be rendered to the marble map along with the icon at the c...
Definition: GeoDataPlacemark.cpp:152
Marble::PositionProviderPlugin
The abstract class that provides position information.
Definition: PositionProviderPlugin.h:26
Marble::GeoDataAccuracy::vertical
qreal vertical
Vertical accuracy in meters.
Definition: GeoDataAccuracy.h:54
Marble::RouteSimulationPositionProviderPlugin::position
virtual GeoDataCoordinates position() const
Definition: RouteSimulationPositionProviderPlugin.cpp:86
Marble::RouteSimulationPositionProviderPlugin::initialize
virtual void initialize()
Definition: RouteSimulationPositionProviderPlugin.cpp:115
RoutingManager.h
QString::fromUtf8
QString fromUtf8(const char *str, int size)
Marble::RouteSimulationPositionProviderPlugin::icon
virtual QIcon icon() const
Returns an icon for the plugin.
Definition: RouteSimulationPositionProviderPlugin.cpp:71
Marble::GeoDataCoordinates::FinalBearing
Definition: GeoDataCoordinates.h:98
Marble::PositionProviderPlugin::positionChanged
void positionChanged(GeoDataCoordinates position, GeoDataAccuracy accuracy) const
Marble::RouteSimulationPositionProviderPlugin::~RouteSimulationPositionProviderPlugin
virtual ~RouteSimulationPositionProviderPlugin()
Definition: RouteSimulationPositionProviderPlugin.cpp:111
Marble::RouteSimulationPositionProviderPlugin::accuracy
virtual GeoDataAccuracy accuracy() const
Definition: RouteSimulationPositionProviderPlugin.cpp:91
Marble::GeoDataAccuracy::horizontal
qreal horizontal
Horizontal accuracy in meters.
Definition: GeoDataAccuracy.h:49
Marble::GeoDataCoordinates::bearing
qreal bearing(const GeoDataCoordinates &other, Unit unit=Radian, BearingType type=InitialBearing) const
Returns the bearing (true bearing, the angle between the line defined by this point and the other and...
Definition: GeoDataCoordinates.cpp:1213
Marble::RouteSimulationPositionProviderPlugin::direction
virtual qreal direction() const
Returns the direction in which the gps device is moving.
Definition: RouteSimulationPositionProviderPlugin.cpp:150
Marble::RouteSimulationPositionProviderPlugin::copyrightYears
virtual QString copyrightYears() const
Definition: RouteSimulationPositionProviderPlugin.cpp:58
Marble::GeoDataContainer::size
int size() const
size of the container
Definition: GeoDataContainer.cpp:286
QString
QList
GeoDataPlacemark.h
Marble::GeoDataLineString
A LineString that allows to store a contiguous set of line segments.
Definition: GeoDataLineString.h:75
Marble::GeoDataLineString::at
GeoDataCoordinates & at(int pos)
Returns a reference to the coordinates of a node at a given position. This method detaches the return...
Definition: GeoDataLineString.cpp:143
Marble::PositionProviderStatus
PositionProviderStatus
Definition: PositionProviderPluginInterface.h:25
Q_EXPORT_PLUGIN2
#define Q_EXPORT_PLUGIN2(a, b)
Definition: marble_export.h:34
Marble::RouteSimulationPositionProviderPlugin::nameId
virtual QString nameId() const
Returns the unique name of the plugin.
Definition: RouteSimulationPositionProviderPlugin.cpp:38
Marble::RouteSimulationPositionProviderPlugin
Definition: RouteSimulationPositionProviderPlugin.h:22
Marble::RouteSimulationPositionProviderPlugin::speed
virtual qreal speed() const
Returns the speed of the gps device in meters per second.
Definition: RouteSimulationPositionProviderPlugin.cpp:144
Marble::RouteSimulationPositionProviderPlugin::isInitialized
virtual bool isInitialized() const
Definition: RouteSimulationPositionProviderPlugin.cpp:139
GeoDataFolder.h
Marble::MarbleModel
The data model (not based on QAbstractModel) for a MarbleWidget.
Definition: MarbleModel.h:97
Marble::RouteSimulationPositionProviderPlugin::pluginAuthors
virtual QList< PluginAuthor > pluginAuthors() const
Definition: RouteSimulationPositionProviderPlugin.cpp:63
QDateTime::currentDateTime
QDateTime currentDateTime()
Marble::GeoDataAccuracy::Detailed
Definition: GeoDataAccuracy.h:32
Marble::RouteSimulationPositionProviderPlugin::guiString
virtual QString guiString() const
Returns the string that should appear in the user interface.
Definition: RouteSimulationPositionProviderPlugin.cpp:43
Marble::GeoDataLineString::isEmpty
bool isEmpty() const
Returns whether the LineString has no nodes at all.
Definition: GeoDataLineString.cpp:133
Marble::RouteSimulationPositionProviderPlugin::RouteSimulationPositionProviderPlugin
RouteSimulationPositionProviderPlugin()
Definition: RouteSimulationPositionProviderPlugin.cpp:103
Marble::GeoDataLineString::clear
void clear()
Destroys all nodes in a LineString.
Definition: GeoDataLineString.cpp:298
AlternativeRoutesModel.h
Marble::GeoDataAccuracy::level
Level level
Approximate descriptive accuracy.
Definition: GeoDataAccuracy.h:44
Marble::PositionProviderStatusAvailable
Definition: PositionProviderPluginInterface.h:29
Marble::PositionProviderPlugin::marbleModel
const MarbleModel * marbleModel() const
Definition: PositionProviderPlugin.cpp:37
Marble::RouteSimulationPositionProviderPlugin::newInstance
virtual PositionProviderPlugin * newInstance() const
Create a new PositionProvider Plugin and return it.
Definition: RouteSimulationPositionProviderPlugin.cpp:76
Marble::GeoDataCoordinates::isValid
bool isValid() const
Returns.
Definition: GeoDataCoordinates.cpp:624
Marble::RouteSimulationPositionProviderPlugin::status
virtual PositionProviderStatus status() const
Definition: RouteSimulationPositionProviderPlugin.cpp:81
Marble::GeoDataAccuracy
Definition: GeoDataAccuracy.h:22
Marble::GeoDataPlacemark
a class representing a point of interest on the map
Definition: GeoDataPlacemark.h:54
Marble::PositionProviderStatusAcquiring
Definition: PositionProviderPluginInterface.h:28
QIcon
QDateTime
QTimer::singleShot
singleShot
Marble::GeoDataContainer::placemarkList
QVector< GeoDataPlacemark * > placemarkList() const
A convenience function that returns all placemarks in this container.
Definition: GeoDataContainer.cpp:214
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:13:41 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

marble

Skip menu "marble"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdeedu API Reference

Skip menu "kdeedu API Reference"
  • Analitza
  •     lib
  • kalgebra
  • kalzium
  •   libscience
  • kanagram
  • kig
  •   lib
  • klettres
  • marble
  • parley
  • rocs
  •   App
  •   RocsCore
  •   VisualEditor
  •   stepcore

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal