• 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
  • examples
  • cpp
  • vehicletracking
vehicletracking.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 2012 Illya Kovalevskyy <illya.kovalevskyy@gmail.com>
9 //
10 
11 #include "vehicletracking.h"
12 
13 #include <QApplication>
14 #include <QThread>
15 #include <QTimer>
16 #include <QHash>
17 #include <qmath.h>
18 #include <QDebug>
19 #include <QVBoxLayout>
20 
21 #include <marble/MarbleWidget.h>
22 #include <marble/MarbleGlobal.h>
23 #include <GeoDataDocument.h>
24 #include <GeoDataPlacemark.h>
25 #include <GeoDataLineString.h>
26 #include <GeoDataTreeModel.h>
27 #include <marble/MarbleModel.h>
28 
29 
30 using namespace Marble;
31 
32 CarWorker::CarWorker(const GeoDataCoordinates &city, qreal radius, qreal speed) :
33  QObject(),
34  m_timer(new QTimer(this)),
35  m_city(city),
36  m_radius(radius),
37  m_speed(speed),
38  m_alpha(0.0)
39 {}
40 
41 void CarWorker::startWork()
42 {
43  m_timer->setInterval(0);
44  connect(m_timer, SIGNAL(timeout()), this, SLOT(iterate()));
45  m_timer->start();
46 }
47 
48 void CarWorker::iterate()
49 {
50  qreal lon = m_city.longitude(GeoDataCoordinates::Degree) + m_radius * qCos(m_alpha * DEG2RAD);
51  qreal lat = m_city.latitude(GeoDataCoordinates::Degree) + m_radius * qSin(m_alpha * DEG2RAD);
52 
53  GeoDataCoordinates coord(lon, lat, 0.0, GeoDataCoordinates::Degree);
54  emit coordinatesChanged(coord);
55 
56  m_alpha += m_speed;
57 }
58 
59 void CarWorker::finishWork()
60 {
61  m_timer->stop();
62 }
63 
64 Window::Window(QWidget *parent) :
65  QWidget(parent),
66  m_marbleWidget(new MarbleWidget)
67 {
68  QVBoxLayout *layout = new QVBoxLayout(this);
69  layout->addWidget(m_marbleWidget);
70  setLayout(layout);
71 
72  // Load the OpenStreetMap map
73  m_marbleWidget->setMapThemeId("earth/openstreetmap/openstreetmap.dgml");
74  m_marbleWidget->setProjection( Mercator );
75  setGeometry(80, 60, 1000, 800);
76  GeoDataCoordinates Kiev(30.523333, 50.45, 0.0, GeoDataCoordinates::Degree);
77  m_marbleWidget->centerOn(Kiev);
78  m_marbleWidget->setZoom(2300);
79 
80  m_carFirst = new GeoDataPlacemark("Bus");
81  m_carSecond = new GeoDataPlacemark("Car");
82 
83  GeoDataDocument *document = new GeoDataDocument;
84 
85  document->append(m_carFirst);
86  document->append(m_carSecond);
87 
88  m_marbleWidget->model()->treeModel()->addDocument(document);
89 
90  show();
91 }
92 
93 void Window::startCars()
94 {
95  GeoDataCoordinates Kiev(30.523333, 50.45, 0.0, GeoDataCoordinates::Degree);
96 
97  m_threadFirst = new QThread;
98  m_firstWorker = new CarWorker(Kiev, (qreal)0.1, (qreal)0.7);
99  m_firstWorker->moveToThread(m_threadFirst);
100 
101  connect(m_firstWorker, SIGNAL(coordinatesChanged(GeoDataCoordinates)),
102  this, SLOT(setCarCoordinates(GeoDataCoordinates)), Qt::BlockingQueuedConnection);
103 
104  m_threadSecond = new QThread;
105  m_secondWorker = new CarWorker(Kiev, (qreal)0.2, (qreal)-0.5);
106  m_secondWorker->moveToThread(m_threadSecond);
107 
108  connect(m_secondWorker, SIGNAL(coordinatesChanged(GeoDataCoordinates)),
109  this, SLOT(setCarCoordinates(GeoDataCoordinates)), Qt::BlockingQueuedConnection);
110 
111  connect(m_threadFirst, SIGNAL(started()), m_firstWorker, SLOT(startWork()));
112  connect(m_threadFirst, SIGNAL(finished()), m_firstWorker, SLOT(finishWork()));
113 
114  connect(m_threadSecond, SIGNAL(started()), m_secondWorker, SLOT(startWork()));
115  connect(m_threadSecond, SIGNAL(finished()), m_secondWorker, SLOT(finishWork()));
116 
117  m_threadFirst->start();
118  m_threadSecond->start();
119 }
120 
121 void Window::setCarCoordinates(const GeoDataCoordinates &coord)
122 {
123  CarWorker *worker = qobject_cast<CarWorker*>(sender());
124  if (worker == m_firstWorker) {
125  m_carFirst->setCoordinate(coord);
126  m_marbleWidget->model()->treeModel()->updateFeature(m_carFirst);
127  } else if (worker == m_secondWorker) {
128  m_carSecond->setCoordinate(coord);
129  m_marbleWidget->model()->treeModel()->updateFeature(m_carSecond);
130  }
131 }
132 
133 // Main (start point)
134 int main(int argc, char** argv)
135 {
136  QApplication app(argc,argv);
137 
138  Window window;
139  window.startCars();
140 
141  return app.exec();
142 }
143 
144 #include "vehicletracking.moc"
GeoDataDocument.h
Marble::CarWorker::coordinatesChanged
void coordinatesChanged(GeoDataCoordinates coord)
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:64
Marble::MarbleModel::treeModel
GeoDataTreeModel * treeModel()
Return the list of Placemarks as a QAbstractItemModel *.
Definition: MarbleModel.cpp:407
Marble::CarWorker::CarWorker
CarWorker(const GeoDataCoordinates &city, qreal radius, qreal speed)
Definition: vehicletracking.cpp:32
MarbleModel.h
This file contains the headers for MarbleModel.
QWidget
Marble::Window::startCars
void startCars()
Definition: vehicletracking.cpp:93
Marble::MarbleWidget::setProjection
void setProjection(int projection)
Set the Projection used for the map.
Definition: MarbleWidget.cpp:702
Marble::MarbleWidget::setZoom
void setZoom(int zoom, FlyToMode mode=Instant)
Zoom the view to a certain zoomlevel.
Definition: MarbleWidget.cpp:533
Marble::GeoDataPlacemark::setCoordinate
void setCoordinate(qreal longitude, qreal latitude, qreal altitude=0, GeoDataCoordinates::Unit _unit=GeoDataCoordinates::Radian)
Set the coordinate of the placemark in longitude and latitude.
Definition: GeoDataPlacemark.cpp:121
Marble::Window::Window
Window(QWidget *parent=0)
Definition: vehicletracking.cpp:64
Marble::GeoDataCoordinates::latitude
qreal latitude(GeoDataCoordinates::Unit unit=GeoDataCoordinates::Radian) const
retrieves the latitude of the GeoDataCoordinates object use the unit parameter to switch between Radi...
Definition: GeoDataCoordinates.cpp:751
QObject
Marble::Window
Definition: vehicletracking.h:52
Marble::GeoDataTreeModel::addDocument
int addDocument(GeoDataDocument *document)
Definition: GeoDataTreeModel.cpp:595
Marble::GeoDataCoordinates::Degree
Definition: GeoDataCoordinates.h:66
Marble::CarWorker
Definition: vehicletracking.h:27
Marble::MarbleWidget
A widget class that displays a view of the earth.
Definition: MarbleWidget.h:102
Marble::MarbleWidget::setMapThemeId
void setMapThemeId(const QString &maptheme)
Set a new map theme.
Definition: MarbleWidget.cpp:865
Marble::Mercator
Mercator projection.
Definition: MarbleGlobal.h:47
main
int main(int argc, char **argv)
Definition: vehicletracking.cpp:134
Marble::CarWorker::finishWork
void finishWork()
Definition: vehicletracking.cpp:59
GeoDataLineString.h
Marble::MarbleWidget::model
MarbleModel * model() const
Return the model that this view shows.
Definition: MarbleWidget.cpp:283
MarbleGlobal.h
Marble::GeoDataTreeModel::updateFeature
void updateFeature(GeoDataFeature *feature)
Definition: GeoDataTreeModel.cpp:638
GeoDataPlacemark.h
Marble::DEG2RAD
const qreal DEG2RAD
Definition: MarbleGlobal.h:200
GeoDataTreeModel.h
Marble::GeoDataContainer::append
void append(GeoDataFeature *other)
add an element
Definition: GeoDataContainer.cpp:165
Marble::GeoDataCoordinates::longitude
qreal longitude(GeoDataCoordinates::Unit unit=GeoDataCoordinates::Radian) const
retrieves the longitude of the GeoDataCoordinates object use the unit parameter to switch between Rad...
Definition: GeoDataCoordinates.cpp:739
Marble::MarbleWidget::centerOn
void centerOn(const qreal lon, const qreal lat, bool animated=false)
Center the view on a geographical point.
Definition: MarbleWidget.cpp:626
Marble::Window::setCarCoordinates
void setCarCoordinates(const GeoDataCoordinates &coord)
Definition: vehicletracking.cpp:121
MarbleWidget.h
This file contains the headers for MarbleWidget.
vehicletracking.h
QThread
Marble::GeoDataPlacemark
a class representing a point of interest on the map
Definition: GeoDataPlacemark.h:54
Marble::CarWorker::startWork
void startWork()
Definition: vehicletracking.cpp:41
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:38:53 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