• 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
  • placemark
PlacemarkPositionProviderPlugin.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 Guillaume Martres <smarter@ubuntu.com>
9 // Copyright 2011,2012 Bernhard Beschow <bbeschow@cs.tu-berlin.de>
10 //
11 
12 #include "PlacemarkPositionProviderPlugin.h"
13 
14 #include "GeoDataPlacemark.h"
15 #include "MarbleClock.h"
16 #include "MarbleMath.h"
17 #include "MarbleModel.h"
18 #include "MarbleDebug.h"
19 
20 using namespace Marble;
21 
22 PlacemarkPositionProviderPlugin::PlacemarkPositionProviderPlugin()
23  : PositionProviderPlugin(),
24  m_placemark( 0 ),
25  m_speed( 0 ),
26  m_direction( 0.0 ),
27  m_status( PositionProviderStatusUnavailable ),
28  m_isInitialized( false )
29 {
30  m_accuracy.level = GeoDataAccuracy::Detailed;
31 }
32 
33 QString PlacemarkPositionProviderPlugin::name() const
34 {
35  return tr( "Placemark position provider Plugin" );
36 }
37 
38 QString PlacemarkPositionProviderPlugin::nameId() const
39 {
40  return QString::fromLatin1( "Placemark" );
41 }
42 
43 QString PlacemarkPositionProviderPlugin::guiString() const
44 {
45  return tr( "Placemark" );
46 }
47 
48 QString PlacemarkPositionProviderPlugin::version() const
49 {
50  return "1.0";
51 }
52 
53 QString PlacemarkPositionProviderPlugin::description() const
54 {
55  return tr( "Reports the position of a placemark" );
56 }
57 
58 QString PlacemarkPositionProviderPlugin::copyrightYears() const
59 {
60  return "2011, 2012";
61 }
62 
63 QList<PluginAuthor> PlacemarkPositionProviderPlugin::pluginAuthors() const
64 {
65  return QList<PluginAuthor>()
66  << PluginAuthor( "Guillaume Martres", "smarter@ubuntu.com" )
67  << PluginAuthor( "Bernhard Beschow", "bbeschow@cs.tu-berlin.de" );
68 }
69 
70 QIcon PlacemarkPositionProviderPlugin::icon() const
71 {
72  return QIcon();
73 }
74 
75 void PlacemarkPositionProviderPlugin::initialize()
76 {
77  if ( marbleModel() ) {
78  setPlacemark( marbleModel()->trackedPlacemark() );
79  connect( marbleModel(), SIGNAL(trackedPlacemarkChanged(const GeoDataPlacemark*)),
80  this, SLOT(setPlacemark(const GeoDataPlacemark*)) );
81  } else {
82  mDebug() << "PlacemarkPositionProviderPlugin: MarbleModel not set, cannot track placemarks.";
83  }
84  m_isInitialized = true;
85 }
86 
87 bool PlacemarkPositionProviderPlugin::isInitialized() const
88 {
89  return m_isInitialized;
90 }
91 
92 PositionProviderPlugin* PlacemarkPositionProviderPlugin::newInstance() const
93 {
94  return new PlacemarkPositionProviderPlugin();
95 }
96 
97 PositionProviderStatus PlacemarkPositionProviderPlugin::status() const
98 {
99  return m_status;
100 }
101 
102 GeoDataCoordinates PlacemarkPositionProviderPlugin::position() const
103 {
104  return m_coordinates;
105 }
106 
107 GeoDataAccuracy PlacemarkPositionProviderPlugin::accuracy() const
108 {
109  return m_accuracy;
110 }
111 
112 qreal PlacemarkPositionProviderPlugin::speed() const
113 {
114  return m_speed;
115 }
116 
117 qreal PlacemarkPositionProviderPlugin::direction() const
118 {
119  return m_direction;
120 }
121 
122 QDateTime PlacemarkPositionProviderPlugin::timestamp() const
123 {
124  return marbleModel()->clockDateTime();
125 }
126 
127 void PlacemarkPositionProviderPlugin::setPlacemark( const GeoDataPlacemark *placemark )
128 {
129  const GeoDataPlacemark *const oldPlacemark = m_placemark;
130 
131  if ( oldPlacemark != 0 ) {
132  emit statusChanged( PositionProviderStatusUnavailable );
133  }
134 
135  m_placemark = placemark;
136  m_timestamp = placemark ? marbleModel()->clockDateTime() : QDateTime();
137  GeoDataCoordinates const newCoordinates = placemark ? placemark->coordinate( m_timestamp ) : GeoDataCoordinates();
138  if ( m_coordinates.isValid() && newCoordinates.isValid() ) {
139  m_direction = m_coordinates.bearing( newCoordinates, GeoDataCoordinates::Degree, GeoDataCoordinates::FinalBearing );
140  }
141  m_coordinates = newCoordinates;
142  m_status = placemark ? PositionProviderStatusAvailable : PositionProviderStatusUnavailable;
143  m_speed = 0.0;
144 
145  disconnect( marbleModel()->clock(), SIGNAL(timeChanged()), this, SLOT(updatePosition()) );
146  if ( placemark ) {
147  connect( marbleModel()->clock(), SIGNAL(timeChanged()), this, SLOT(updatePosition()) );
148  }
149 
150  if ( oldPlacemark != m_placemark && m_placemark != 0 ) {
151  emit statusChanged( m_status );
152  }
153 
154  if ( m_status == PositionProviderStatusAvailable ) {
155  emit positionChanged( m_coordinates, m_accuracy );
156  }
157 }
158 
159 void PlacemarkPositionProviderPlugin::updatePosition()
160 {
161  if ( m_placemark == 0 ) {
162  return;
163  }
164 
165  Q_ASSERT( marbleModel() && "MarbleModel missing in PlacemarkPositionProviderPlugin" );
166 
167  const GeoDataCoordinates previousCoordinates = m_coordinates;
168  m_coordinates = m_placemark->coordinate( marbleModel()->clock()->dateTime() );
169  m_direction = previousCoordinates.bearing( m_coordinates, GeoDataCoordinates::Degree, GeoDataCoordinates::FinalBearing );
170 
171  if ( m_timestamp.isValid() ) {
172  const qreal averageAltitude = ( m_coordinates.altitude() + m_coordinates.altitude() ) / 2.0 + marbleModel()->planetRadius();
173  const qreal distance = distanceSphere( previousCoordinates, m_coordinates ) * averageAltitude;
174  const qreal seconds = m_timestamp.msecsTo( marbleModel()->clockDateTime() ) / 1000.0;
175  m_speed = ( seconds > 0 ) ? ( distance / seconds ) : 0;
176  }
177  else {
178  m_speed = 0;
179  }
180 
181  m_timestamp = marbleModel()->clockDateTime();
182 
183  emit positionChanged( m_coordinates, m_accuracy );
184 }
185 
186 Q_EXPORT_PLUGIN2( PlacemarkPositionProviderPlugin, Marble::PlacemarkPositionProviderPlugin )
187 
188 #include "PlacemarkPositionProviderPlugin.moc"
Marble::GeoDataCoordinates
A 3d point representation.
Definition: GeoDataCoordinates.h:52
Marble::PlacemarkPositionProviderPlugin::newInstance
virtual PositionProviderPlugin * newInstance() const
Create a new PositionProvider Plugin and return it.
Definition: PlacemarkPositionProviderPlugin.cpp:92
Marble::PlacemarkPositionProviderPlugin::status
virtual PositionProviderStatus status() const
Definition: PlacemarkPositionProviderPlugin.cpp:97
MarbleMath.h
Marble::PlacemarkPositionProviderPlugin::timestamp
virtual QDateTime timestamp() const
Definition: PlacemarkPositionProviderPlugin.cpp:122
Marble::PositionProviderPlugin::statusChanged
void statusChanged(PositionProviderStatus status) const
Marble::PlacemarkPositionProviderPlugin::name
virtual QString name() const
Returns the user-visible name of the plugin.
Definition: PlacemarkPositionProviderPlugin.cpp:33
Marble::PlacemarkPositionProviderPlugin::icon
virtual QIcon icon() const
Returns an icon for the plugin.
Definition: PlacemarkPositionProviderPlugin.cpp:70
MarbleModel.h
This file contains the headers for MarbleModel.
Marble::PlacemarkPositionProviderPlugin::copyrightYears
virtual QString copyrightYears() const
Definition: PlacemarkPositionProviderPlugin.cpp:58
Marble::PluginAuthor
Definition: PluginInterface.h:28
Marble::PlacemarkPositionProviderPlugin::initialize
virtual void initialize()
Definition: PlacemarkPositionProviderPlugin.cpp:75
Marble::GeoDataPlacemark::coordinate
GeoDataCoordinates coordinate(const QDateTime &dateTime=QDateTime(), bool *iconAtCoordinates=0) const
Return the coordinates of the placemark at time dateTime as a GeoDataCoordinates. ...
Definition: GeoDataPlacemark.cpp:172
Marble::distanceSphere
qreal distanceSphere(qreal lon1, qreal lat1, qreal lon2, qreal lat2)
This method calculates the shortest distance between two points on a sphere.
Definition: MarbleMath.h:52
PlacemarkPositionProviderPlugin.h
Marble::PlacemarkPositionProviderPlugin::direction
virtual qreal direction() const
Returns the direction in which the gps device is moving.
Definition: PlacemarkPositionProviderPlugin.cpp:117
QObject::disconnect
bool disconnect(const QObject *sender, const char *signal, const QObject *receiver, const char *method)
MarbleDebug.h
QObject::tr
QString tr(const char *sourceText, const char *disambiguation, int n)
Marble::PositionProviderStatusUnavailable
Definition: PositionProviderPluginInterface.h:27
Marble::PlacemarkPositionProviderPlugin
Definition: PlacemarkPositionProviderPlugin.h:27
Marble::GeoDataCoordinates::Degree
Definition: GeoDataCoordinates.h:66
Marble::PositionProviderPlugin
The abstract class that provides position information.
Definition: PositionProviderPlugin.h:26
Marble::GeoDataCoordinates::altitude
qreal altitude() const
return the altitude of the Point in meters
Definition: GeoDataCoordinates.cpp:1197
Marble::PlacemarkPositionProviderPlugin::isInitialized
virtual bool isInitialized() const
Definition: PlacemarkPositionProviderPlugin.cpp:87
Marble::PlacemarkPositionProviderPlugin::PlacemarkPositionProviderPlugin
PlacemarkPositionProviderPlugin()
Definition: PlacemarkPositionProviderPlugin.cpp:22
Marble::GeoDataCoordinates::FinalBearing
Definition: GeoDataCoordinates.h:98
Marble::PositionProviderPlugin::positionChanged
void positionChanged(GeoDataCoordinates position, GeoDataAccuracy accuracy) const
Marble::PlacemarkPositionProviderPlugin::pluginAuthors
virtual QList< PluginAuthor > pluginAuthors() const
Definition: PlacemarkPositionProviderPlugin.cpp:63
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::PlacemarkPositionProviderPlugin::position
virtual GeoDataCoordinates position() const
Definition: PlacemarkPositionProviderPlugin.cpp:102
Marble::PlacemarkPositionProviderPlugin::version
virtual QString version() const
Definition: PlacemarkPositionProviderPlugin.cpp:48
QString
QList
Marble::PlacemarkPositionProviderPlugin::nameId
virtual QString nameId() const
Returns the unique name of the plugin.
Definition: PlacemarkPositionProviderPlugin.cpp:38
GeoDataPlacemark.h
Marble::PositionProviderStatus
PositionProviderStatus
Definition: PositionProviderPluginInterface.h:25
Q_EXPORT_PLUGIN2
#define Q_EXPORT_PLUGIN2(a, b)
Definition: marble_export.h:34
MarbleClock.h
Marble::MarbleModel::clockDateTime
QDateTime clockDateTime() const
Definition: MarbleModel.cpp:690
QDateTime::isValid
bool isValid() const
Marble::PlacemarkPositionProviderPlugin::accuracy
virtual GeoDataAccuracy accuracy() const
Definition: PlacemarkPositionProviderPlugin.cpp:107
Marble::GeoDataAccuracy::Detailed
Definition: GeoDataAccuracy.h:32
Marble::PlacemarkPositionProviderPlugin::speed
virtual qreal speed() const
Returns the speed of the gps device in meters per second.
Definition: PlacemarkPositionProviderPlugin.cpp:112
Marble::MarbleModel::planetRadius
qreal planetRadius() const
Definition: MarbleModel.cpp:522
Marble::GeoDataAccuracy::level
Level level
Approximate descriptive accuracy.
Definition: GeoDataAccuracy.h:44
QString::fromLatin1
QString fromLatin1(const char *str, int size)
Marble::PositionProviderStatusAvailable
Definition: PositionProviderPluginInterface.h:29
Marble::PositionProviderPlugin::marbleModel
const MarbleModel * marbleModel() const
Definition: PositionProviderPlugin.cpp:37
Marble::GeoDataCoordinates::isValid
bool isValid() const
Returns.
Definition: GeoDataCoordinates.cpp:624
Marble::GeoDataAccuracy
Definition: GeoDataAccuracy.h:22
QObject::connect
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
Marble::PlacemarkPositionProviderPlugin::guiString
virtual QString guiString() const
Returns the string that should appear in the user interface.
Definition: PlacemarkPositionProviderPlugin.cpp:43
Marble::GeoDataPlacemark
a class representing a point of interest on the map
Definition: GeoDataPlacemark.h:54
Marble::mDebug
QDebug mDebug()
a function to replace qDebug() in Marble library code
Definition: MarbleDebug.cpp:36
Marble::PlacemarkPositionProviderPlugin::description
virtual QString description() const
Returns a user description of the plugin.
Definition: PlacemarkPositionProviderPlugin.cpp:53
QIcon
QDateTime
QDateTime::msecsTo
qint64 msecsTo(const QDateTime &other) const
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