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

marble

  • sources
  • kde-4.12
  • kdeedu
  • marble
  • src
  • plugins
  • positionprovider
  • qtmobility
QtMobilityPositionProviderPlugin.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 Daniel Marth <danielmarth@gmx.at>
9 // Copyright 2012 Bernhard Beschow <bbeschow@cs.tu-berlin.de>
10 //
11 
12 #include "QtMobilityPositionProviderPlugin.h"
13 
14 #include <QGeoPositionInfoSource>
15 #include <QGeoPositionInfo>
16 #include <QGeoCoordinate>
17 
18 QTM_USE_NAMESPACE
19 
20 namespace Marble {
21 
22 class QtMobilityPositionProviderPluginPrivate
23 {
24 public:
25  QtMobilityPositionProviderPluginPrivate();
26 
27  QGeoPositionInfoSource *const m_source;
28  PositionProviderStatus m_status;
29 };
30 
31 QtMobilityPositionProviderPluginPrivate::QtMobilityPositionProviderPluginPrivate() :
32  m_source( QGeoPositionInfoSource::createDefaultSource( 0 ) ),
33  m_status( PositionProviderStatusAcquiring )
34 {
35 }
36 
37 QString QtMobilityPositionProviderPlugin::name() const
38 {
39  return tr( "Qt Mobility Position Provider Plugin" );
40 }
41 
42 QString QtMobilityPositionProviderPlugin::nameId() const
43 {
44  return "QtMobilityPositionProviderPlugin";
45 }
46 
47 QString QtMobilityPositionProviderPlugin::guiString() const
48 {
49  return tr( "Qt Mobility Location" );
50 }
51 
52 QString QtMobilityPositionProviderPlugin::version() const
53 {
54  return "1.0";
55 }
56 
57 QString QtMobilityPositionProviderPlugin::description() const
58 {
59  return tr( "Reports the GPS position of a QtMobility compatible device." );
60 }
61 
62 QString QtMobilityPositionProviderPlugin::copyrightYears() const
63 {
64  return "2011";
65 }
66 
67 QList<PluginAuthor> QtMobilityPositionProviderPlugin::pluginAuthors() const
68 {
69  return QList<PluginAuthor>()
70  << PluginAuthor( "Daniel Marth", "danielmarth@gmx.at" );
71 }
72 
73 QIcon QtMobilityPositionProviderPlugin::icon() const
74 {
75  return QIcon();
76 }
77 
78 PositionProviderPlugin* QtMobilityPositionProviderPlugin::newInstance() const
79 {
80  return new QtMobilityPositionProviderPlugin;
81 }
82 
83 PositionProviderStatus QtMobilityPositionProviderPlugin::status() const
84 {
85  return d->m_status;
86 }
87 
88 GeoDataCoordinates QtMobilityPositionProviderPlugin::position() const
89 {
90  if ( d->m_source == 0 ) {
91  return GeoDataCoordinates();
92  }
93 
94  const QGeoCoordinate p = d->m_source->lastKnownPosition().coordinate();
95  if( !p.isValid() ) {
96  return GeoDataCoordinates();
97  }
98 
99  return GeoDataCoordinates( p.longitude(), p.latitude(),
100  p.altitude(), GeoDataCoordinates::Degree );
101 }
102 
103 GeoDataAccuracy QtMobilityPositionProviderPlugin::accuracy() const
104 {
105  if ( d->m_source == 0 ) {
106  return GeoDataAccuracy();
107  }
108 
109  const QGeoPositionInfo info = d->m_source->lastKnownPosition();
110 
111  if( !info.hasAttribute( QGeoPositionInfo::HorizontalAccuracy ) ||
112  !info.hasAttribute( QGeoPositionInfo::VerticalAccuracy ) ) {
113  return GeoDataAccuracy();
114  }
115 
116  const qreal horizontal = info.attribute( QGeoPositionInfo::HorizontalAccuracy );
117  const qreal vertical = info.attribute( QGeoPositionInfo::VerticalAccuracy );
118 
119  return GeoDataAccuracy( GeoDataAccuracy::Detailed, horizontal, vertical );
120 }
121 
122 QtMobilityPositionProviderPlugin::QtMobilityPositionProviderPlugin() :
123  d( new QtMobilityPositionProviderPluginPrivate )
124 {
125 }
126 
127 QtMobilityPositionProviderPlugin::~QtMobilityPositionProviderPlugin()
128 {
129  delete d;
130 }
131 
132 void QtMobilityPositionProviderPlugin::initialize()
133 {
134  if( d->m_source ) {
135  connect( d->m_source, SIGNAL(positionUpdated(QGeoPositionInfo)), this, SLOT(update()) );
136  d->m_source->setUpdateInterval( 1000 );
137  d->m_source->startUpdates();
138  }
139 }
140 
141 bool QtMobilityPositionProviderPlugin::isInitialized() const
142 {
143  return d->m_source != 0;
144 }
145 
146 qreal QtMobilityPositionProviderPlugin::speed() const
147 {
148  if ( d->m_source == 0 ) {
149  return 0.0;
150  }
151 
152  if( !d->m_source->lastKnownPosition().hasAttribute( QGeoPositionInfo::GroundSpeed ) ) {
153  return 0.0;
154  }
155 
156  return d->m_source->lastKnownPosition().attribute( QGeoPositionInfo::GroundSpeed );
157 }
158 
159 qreal QtMobilityPositionProviderPlugin::direction() const
160 {
161  if ( d->m_source == 0 ) {
162  return 0.0;
163  }
164 
165  if( !d->m_source->lastKnownPosition().hasAttribute( QGeoPositionInfo::Direction ) ) {
166  return 0.0;
167  }
168 
169  return d->m_source->lastKnownPosition().attribute( QGeoPositionInfo::Direction );
170 }
171 
172 QDateTime QtMobilityPositionProviderPlugin::timestamp() const
173 {
174  if ( d->m_source == 0 ) {
175  return QDateTime();
176  }
177 
178  return d->m_source->lastKnownPosition().timestamp();
179 }
180 
181 void QtMobilityPositionProviderPlugin::update()
182 {
183  PositionProviderStatus newStatus = PositionProviderStatusAcquiring;
184  if ( d->m_source ) {
185  if ( d->m_source->lastKnownPosition().isValid() ) {
186  newStatus = PositionProviderStatusAvailable;
187  }
188  else {
189  newStatus = PositionProviderStatusUnavailable;
190  }
191  }
192 
193  if ( newStatus != d->m_status ) {
194  d->m_status = newStatus;
195  emit statusChanged( newStatus );
196  }
197 
198  if ( newStatus == PositionProviderStatusAvailable ) {
199  emit positionChanged( position(), accuracy() );
200  }
201 }
202 
203 } // namespace Marble
204 
205 Q_EXPORT_PLUGIN2( Marble::QtMobilityPositionProviderPlugin, Marble::QtMobilityPositionProviderPlugin )
206 
207 #include "QtMobilityPositionProviderPlugin.moc"
Marble::QtMobilityPositionProviderPlugin::icon
virtual QIcon icon() const
Returns an icon for the plugin.
Definition: QtMobilityPositionProviderPlugin.cpp:73
Marble::GeoDataCoordinates
A 3d point representation.
Definition: GeoDataCoordinates.h:52
Marble::PositionProviderPlugin::statusChanged
void statusChanged(PositionProviderStatus status) const
Marble::QtMobilityPositionProviderPlugin::speed
virtual qreal speed() const
Returns the speed of the gps device in meters per second.
Definition: QtMobilityPositionProviderPlugin.cpp:146
Marble::PluginAuthor
Definition: PluginInterface.h:28
Marble::QtMobilityPositionProviderPlugin::direction
virtual qreal direction() const
Returns the direction in which the gps device is moving.
Definition: QtMobilityPositionProviderPlugin.cpp:159
Marble::QtMobilityPositionProviderPlugin::~QtMobilityPositionProviderPlugin
virtual ~QtMobilityPositionProviderPlugin()
Definition: QtMobilityPositionProviderPlugin.cpp:127
Marble::QtMobilityPositionProviderPlugin::initialize
virtual void initialize()
Definition: QtMobilityPositionProviderPlugin.cpp:132
Marble::QtMobilityPositionProviderPlugin::description
virtual QString description() const
Returns a user description of the plugin.
Definition: QtMobilityPositionProviderPlugin.cpp:57
Marble::QtMobilityPositionProviderPlugin::guiString
virtual QString guiString() const
Returns the string that should appear in the user interface.
Definition: QtMobilityPositionProviderPlugin.cpp:47
Marble::PositionProviderStatusUnavailable
Definition: PositionProviderPluginInterface.h:27
Marble::GeoDataCoordinates::Degree
Definition: GeoDataCoordinates.h:66
Marble::PositionProviderPlugin
The abstract class that provides position information.
Definition: PositionProviderPlugin.h:26
QtMobilityPositionProviderPlugin.h
Marble::QtMobilityPositionProviderPlugin::isInitialized
virtual bool isInitialized() const
Definition: QtMobilityPositionProviderPlugin.cpp:141
Marble::QtMobilityPositionProviderPlugin::version
virtual QString version() const
Definition: QtMobilityPositionProviderPlugin.cpp:52
Marble::QtMobilityPositionProviderPlugin::position
virtual GeoDataCoordinates position() const
Definition: QtMobilityPositionProviderPlugin.cpp:88
Marble::QtMobilityPositionProviderPlugin::QtMobilityPositionProviderPlugin
QtMobilityPositionProviderPlugin()
Definition: QtMobilityPositionProviderPlugin.cpp:122
Marble::PositionProviderPlugin::positionChanged
void positionChanged(GeoDataCoordinates position, GeoDataAccuracy accuracy) const
Marble::QtMobilityPositionProviderPlugin::timestamp
virtual QDateTime timestamp() const
Definition: QtMobilityPositionProviderPlugin.cpp:172
Marble::QtMobilityPositionProviderPlugin::copyrightYears
virtual QString copyrightYears() const
Definition: QtMobilityPositionProviderPlugin.cpp:62
Marble::PositionProviderStatus
PositionProviderStatus
Definition: PositionProviderPluginInterface.h:25
Q_EXPORT_PLUGIN2
#define Q_EXPORT_PLUGIN2(a, b)
Definition: marble_export.h:34
Marble::QtMobilityPositionProviderPlugin::status
virtual PositionProviderStatus status() const
Definition: QtMobilityPositionProviderPlugin.cpp:83
Marble::QtMobilityPositionProviderPlugin::nameId
virtual QString nameId() const
Returns the unique name of the plugin.
Definition: QtMobilityPositionProviderPlugin.cpp:42
Marble::GeoDataAccuracy::Detailed
Definition: GeoDataAccuracy.h:32
Marble::QtMobilityPositionProviderPlugin::name
virtual QString name() const
Returns the user-visible name of the plugin.
Definition: QtMobilityPositionProviderPlugin.cpp:37
Marble::QtMobilityPositionProviderPlugin
Definition: QtMobilityPositionProviderPlugin.h:22
Marble::QtMobilityPositionProviderPlugin::pluginAuthors
virtual QList< PluginAuthor > pluginAuthors() const
Definition: QtMobilityPositionProviderPlugin.cpp:67
Marble::PositionProviderStatusAvailable
Definition: PositionProviderPluginInterface.h:29
Marble::GeoDataAccuracy
Definition: GeoDataAccuracy.h:22
Marble::QtMobilityPositionProviderPlugin::newInstance
virtual PositionProviderPlugin * newInstance() const
Create a new PositionProvider Plugin and return it.
Definition: QtMobilityPositionProviderPlugin.cpp:78
Marble::QtMobilityPositionProviderPlugin::accuracy
virtual GeoDataAccuracy accuracy() const
Definition: QtMobilityPositionProviderPlugin.cpp:103
Marble::PositionProviderStatusAcquiring
Definition: PositionProviderPluginInterface.h:28
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:38:52 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
  • kstars
  • libkdeedu
  •   keduvocdocument
  • 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