• 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
  • declarative
Routing.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 Dennis Nienhüser <earthwings@gentoo.org>
9 //
10 
11 #include "Routing.h"
12 
13 #include "MarbleDeclarativeWidget.h"
14 #include "MarbleModel.h"
15 #include "MarbleDirs.h"
16 #include "routing/AlternativeRoutesModel.h"
17 #include "routing/RoutingManager.h"
18 #include "routing/RoutingModel.h"
19 #include "routing/RouteRequest.h"
20 #include "routing/RoutingProfilesModel.h"
21 
22 #include <QDebug>
23 
24 class RoutingPrivate
25 {
26 public:
27  RoutingPrivate();
28 
29  MarbleWidget* m_marbleWidget;
30 
31  QMap<QString, Marble::RoutingProfile> m_profiles;
32 
33  QString m_routingProfile;
34 };
35 
36 RoutingPrivate::RoutingPrivate() :
37  m_marbleWidget( 0 )
38 {
39  // nothing to do
40 }
41 
42 Routing::Routing( QObject* parent) :
43  QObject( parent ), d( new RoutingPrivate )
44 {
45  // nothing to do
46 }
47 
48 Routing::~Routing()
49 {
50  delete d;
51 }
52 
53 QObject* Routing::waypointModel()
54 {
55  return d->m_marbleWidget ? d->m_marbleWidget->model()->routingManager()->routingModel() : 0;
56 }
57 
58 void Routing::setMap( MarbleWidget* widget )
59 {
60  d->m_marbleWidget = widget;
61 
62  if ( d->m_marbleWidget ) {
63  connect( d->m_marbleWidget->model()->routingManager(), SIGNAL(stateChanged(RoutingManager::State)),
64  this, SIGNAL(hasRouteChanged()) );
65  QList<Marble::RoutingProfile> profiles = d->m_marbleWidget->model()->routingManager()->profilesModel()->profiles();
66  if ( profiles.size() == 4 ) {
68  d->m_profiles["Motorcar"] = profiles.at( 0 );
69  d->m_profiles["Bicycle"] = profiles.at( 2 );
70  d->m_profiles["Pedestrian"] = profiles.at( 3 );
71  } else {
72  qDebug() << "Unexpected size of default routing profiles: " << profiles.size();
73  }
74  }
75 
76  emit mapChanged();
77  emit routingProfileChanged();
78  emit hasRouteChanged();
79 }
80 
81 MarbleWidget *Routing::map()
82 {
83  return d->m_marbleWidget;
84 }
85 
86 QString Routing::routingProfile() const
87 {
88  return d->m_routingProfile;
89 }
90 
91 void Routing::setRoutingProfile( const QString & profile )
92 {
93  if ( d->m_routingProfile != profile ) {
94  d->m_routingProfile = profile;
95  if ( d->m_marbleWidget ) {
96  d->m_marbleWidget->model()->routingManager()->routeRequest()->setRoutingProfile( d->m_profiles[profile] );
97  }
98  emit routingProfileChanged();
99  }
100 }
101 
102 bool Routing::hasRoute() const
103 {
104  return d->m_marbleWidget && d->m_marbleWidget->model()->routingManager()->routingModel()->rowCount() > 0;
105 }
106 
107 void Routing::addVia( qreal lon, qreal lat )
108 {
109  if ( d->m_marbleWidget ) {
110  Marble::RouteRequest* request = d->m_marbleWidget->model()->routingManager()->routeRequest();
111  request->append( Marble::GeoDataCoordinates( lon, lat, 0.0, Marble::GeoDataCoordinates::Degree ) );
112  updateRoute();
113  }
114 }
115 
116 void Routing::setVia( int index, qreal lon, qreal lat )
117 {
118  if ( index < 0 || index > 200 || !d->m_marbleWidget ) {
119  return;
120  }
121 
122  Marble::RouteRequest* request = d->m_marbleWidget->model()->routingManager()->routeRequest();
123  Q_ASSERT( request );
124  if ( index < request->size() ) {
125  request->setPosition( index, Marble::GeoDataCoordinates( lon, lat, 0.0, Marble::GeoDataCoordinates::Degree ) );
126  } else {
127  for ( int i=request->size(); i<index; ++i ) {
128  request->append( Marble::GeoDataCoordinates( 0.0, 0.0 ) );
129  }
130  request->append( Marble::GeoDataCoordinates( lon, lat, 0.0, Marble::GeoDataCoordinates::Degree ) );
131  }
132 
133  updateRoute();
134 }
135 
136 void Routing::removeVia( int index )
137 {
138  if ( index < 0 || !d->m_marbleWidget ) {
139  return;
140  }
141 
142  Marble::RouteRequest* request = d->m_marbleWidget->model()->routingManager()->routeRequest();
143  if ( index < request->size() ) {
144  d->m_marbleWidget->model()->routingManager()->routeRequest()->remove( index );
145  }
146 }
147 
148 void Routing::reverseRoute()
149 {
150  if ( d->m_marbleWidget ) {
151  d->m_marbleWidget->model()->routingManager()->reverseRoute();
152  }
153 }
154 
155 void Routing::clearRoute()
156 {
157  if ( d->m_marbleWidget ) {
158  d->m_marbleWidget->model()->routingManager()->clearRoute();
159  }
160 }
161 
162 void Routing::updateRoute()
163 {
164  if ( d->m_marbleWidget ) {
165  d->m_marbleWidget->model()->routingManager()->retrieveRoute();
166  }
167 }
168 
169 void Routing::openRoute( const QString &fileName )
170 {
171  if ( d->m_marbleWidget ) {
172  Marble::RoutingManager * const routingManager = d->m_marbleWidget->model()->routingManager();
174  routingManager->clearRoute();
175  QString target = fileName.startsWith( QLatin1String( "file://" ) ) ? fileName.mid( 7 ) : fileName;
176  routingManager->loadRoute( target );
177  Marble::GeoDataDocument* route = routingManager->alternativeRoutesModel()->currentRoute();
178  if ( route ) {
179  Marble::GeoDataLineString* waypoints = routingManager->alternativeRoutesModel()->waypoints( route );
180  if ( waypoints ) {
181  d->m_marbleWidget->centerOn( waypoints->latLonAltBox() );
182  }
183  }
184  }
185 }
186 
187 void Routing::saveRoute( const QString &fileName )
188 {
189  if ( d->m_marbleWidget ) {
191  QString target = fileName.startsWith( QLatin1String( "file://" ) ) ? fileName.mid( 7 ) : fileName;
192  d->m_marbleWidget->model()->routingManager()->saveRoute( target );
193  }
194 }
195 
196 #include "Routing.moc"
Marble::RouteRequest::size
int size() const
Number of points in the route.
Definition: RouteRequest.cpp:126
Marble::GeoDataCoordinates
A 3d point representation.
Definition: GeoDataCoordinates.h:52
RoutingModel.h
Marble::RoutingManager::clearRoute
void clearRoute()
Clear all via points.
Definition: RoutingManager.cpp:450
Marble::GeoDataDocument
A container for Features, Styles and in the future Schemas.
Definition: GeoDataDocument.h:64
Routing::updateRoute
void updateRoute()
Definition: Routing.cpp:162
Routing::setRoutingProfile
void setRoutingProfile(const QString &profile)
Definition: Routing.cpp:91
Routing::mapChanged
void mapChanged()
Routing::removeVia
void removeVia(int index)
Definition: Routing.cpp:136
Routing::routingProfileChanged
void routingProfileChanged()
MarbleDeclarativeWidget.h
Routing::Routing
Routing(QObject *parent=0)
Definition: Routing.cpp:42
MarbleModel.h
This file contains the headers for MarbleModel.
Routing::map
MarbleWidget * map()
Routing::routingProfile
QString routingProfile() const
Routing::saveRoute
void saveRoute(const QString &filename)
Definition: Routing.cpp:187
Routing::waypointModel
QObject * waypointModel()
Definition: Routing.cpp:53
Routing::addVia
void addVia(qreal lon, qreal lat)
Definition: Routing.cpp:107
Marble::RouteRequest::append
void append(const GeoDataCoordinates &coordinates, const QString &name=QString())
Add the given element to the end.
Definition: RouteRequest.cpp:218
Marble::AlternativeRoutesModel::currentRoute
GeoDataDocument * currentRoute()
Definition: AlternativeRoutesModel.cpp:447
QObject
Marble::GeoDataCoordinates::Degree
Definition: GeoDataCoordinates.h:66
Marble::RouteRequest
Points to be included in a route.
Definition: RouteRequest.h:31
RoutingManager.h
Routing.h
Routing::setVia
void setVia(int index, qreal lon, qreal lat)
Definition: Routing.cpp:116
Routing::hasRouteChanged
void hasRouteChanged()
Marble::AlternativeRoutesModel::waypoints
static GeoDataLineString * waypoints(const GeoDataDocument *document)
Returns the waypoints contained in the route as a linestring.
Definition: AlternativeRoutesModel.cpp:433
Marble::RoutingManager::loadRoute
void loadRoute(const QString &filename)
Opens the given filename (kml format) and loads the route contained in it.
Definition: RoutingManager.cpp:336
MarbleDirs.h
Routing::clearRoute
void clearRoute()
Definition: Routing.cpp:155
Marble::GeoDataLineString
A LineString that allows to store a contiguous set of line segments.
Definition: GeoDataLineString.h:75
Marble::RoutingManager
Delegates data retrieval and model updates to the appropriate routing provider.
Definition: RoutingManager.h:37
Routing::setMap
void setMap(MarbleWidget *widget)
Definition: Routing.cpp:58
AlternativeRoutesModel.h
Routing::openRoute
void openRoute(const QString &filename)
Definition: Routing.cpp:169
Routing::hasRoute
bool hasRoute() const
RouteRequest.h
Marble::RouteRequest::setPosition
void setPosition(int index, const GeoDataCoordinates &position, const QString &name=QString())
Change the value of the element at the given position.
Definition: RouteRequest.cpp:249
MarbleWidget
Wraps a Marble::MarbleWidget, providing access to important properties and methods.
Definition: MarbleDeclarativeWidget.h:50
Routing::reverseRoute
void reverseRoute()
Definition: Routing.cpp:148
Routing::~Routing
~Routing()
Definition: Routing.cpp:48
Marble::GeoDataLineString::latLonAltBox
virtual const GeoDataLatLonAltBox & latLonAltBox() const
Returns the smallest latLonAltBox that contains the LineString.
Definition: GeoDataLineString.cpp:545
RoutingProfilesModel.h
Marble::RoutingManager::alternativeRoutesModel
AlternativeRoutesModel * alternativeRoutesModel()
Provides access to the model which contains a list of alternative routes.
Definition: RoutingManager.cpp:311
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