• 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
  • runner
  • local-osm-search
DatabaseQuery.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 // Copyright 2013 Bernhard Beschow <bbeschow@cs.tu-berlin.de>
10 //
11 
12 #include "DatabaseQuery.h"
13 
14 #include "GeoDataLatLonBox.h"
15 #include "MarbleModel.h"
16 #include "PositionTracking.h"
17 
18 #include <QMap>
19 
20 namespace Marble
21 {
22 
23 DatabaseQuery::DatabaseQuery( const MarbleModel* model, const QString &searchTerm, const GeoDataLatLonBox &preferred ) :
24  m_queryType( BroadSearch ), m_resultFormat( AddressFormat ), m_searchTerm( searchTerm.trimmed() ),
25  m_category( OsmPlacemark::UnknownCategory )
26 {
27  if ( model && model->positionTracking()->status() == PositionProviderStatusAvailable ) {
28  m_position = model->positionTracking()->currentLocation();
29  m_resultFormat = DistanceFormat;
30  } else if ( !preferred.isEmpty() ) {
31  m_position = preferred.center();
32  m_resultFormat = AddressFormat;
33  } else {
34  m_resultFormat = AddressFormat;
35  }
36 
37  QStringList terms = m_searchTerm.split(QLatin1Char(','), QString::SkipEmptyParts );
38 
39  QRegExp streetAndHouse( "^(.*)\\s+(\\d+\\D?)$" );
40  if ( streetAndHouse.indexIn( terms.first() ) != -1 ) {
41  if ( streetAndHouse.capturedTexts().size() == 3 ) {
42  terms.removeFirst();
43  terms.push_front( streetAndHouse.capturedTexts().at( 1 ) );
44  terms.push_front( streetAndHouse.capturedTexts().at( 2 ) );
45  }
46  }
47 
48  Q_ASSERT( terms.size() > 0 );
49  if ( terms.size() == 1 ) {
50  m_queryType = isPointOfInterest( m_searchTerm ) ? CategorySearch : BroadSearch;
51  } else if ( terms.size() == 2 ) {
52  m_street = terms.first().trimmed();
53  m_region = terms.last().trimmed();
54  m_queryType = isPointOfInterest( m_street ) ? CategorySearch : AddressSearch;
55  } else {
56  m_houseNumber = terms.first().trimmed();
57  m_street = terms.at( 1 ).trimmed();
58  m_region = terms.last().trimmed(); // skips 2, 3, ..., if any
59  m_queryType = AddressSearch;
60  }
61 }
62 
63 bool DatabaseQuery::isPointOfInterest( const QString &category )
64 {
65  static QMap<QString, OsmPlacemark::OsmCategory> pois;
66  if ( pois.isEmpty() ) {
67  pois[QObject::tr( "pois").toLower()] = OsmPlacemark::UnknownCategory;
68  pois["pois"] = OsmPlacemark::UnknownCategory;
69  pois[QObject::tr( "camping" ).toLower()] = OsmPlacemark::AccomodationCamping;
70  pois["camping"] = OsmPlacemark::AccomodationCamping;
71  pois[QObject::tr( "hostel" ).toLower()] = OsmPlacemark::AccomodationHostel;
72  pois["hostel"] = OsmPlacemark::AccomodationHostel;
73  pois[QObject::tr( "hotel" ).toLower()] = OsmPlacemark::AccomodationHotel;
74  pois["hotel"] = OsmPlacemark::AccomodationHotel;
75  pois[QObject::tr( "motel" ).toLower()] = OsmPlacemark::AccomodationMotel;
76  pois["motel"] = OsmPlacemark::AccomodationMotel;
77  pois[QObject::tr( "youth hostel" ).toLower()] = OsmPlacemark::AccomodationYouthHostel;
78  pois["youth hostel"] = OsmPlacemark::AccomodationYouthHostel;
79  pois[QObject::tr( "library" ).toLower()] = OsmPlacemark::AmenityLibrary;
80  pois["library"] = OsmPlacemark::AmenityLibrary;
81  pois[QObject::tr( "college" ).toLower()] = OsmPlacemark::EducationCollege;
82  pois["college"] = OsmPlacemark::EducationCollege;
83  pois[QObject::tr( "school" ).toLower()] = OsmPlacemark::EducationSchool;
84  pois["school"] = OsmPlacemark::EducationSchool;
85  pois[QObject::tr( "university" ).toLower()] = OsmPlacemark::EducationUniversity;
86  pois["university"] = OsmPlacemark::EducationUniversity;
87  pois[QObject::tr( "bar" ).toLower()] = OsmPlacemark::FoodBar;
88  pois["bar"] = OsmPlacemark::FoodBar;
89  pois[QObject::tr( "biergarten" ).toLower()] = OsmPlacemark::FoodBiergarten;
90  pois["biergarten"] = OsmPlacemark::FoodBiergarten;
91  pois[QObject::tr( "cafe" ).toLower()] = OsmPlacemark::FoodCafe;
92  pois["cafe"] = OsmPlacemark::FoodCafe;
93  pois[QObject::tr( "fast food" ).toLower()] = OsmPlacemark::FoodFastFood;
94  pois["fast food"] = OsmPlacemark::FoodFastFood;
95  pois[QObject::tr( "pub" ).toLower()] = OsmPlacemark::FoodPub;
96  pois["pub"] = OsmPlacemark::FoodPub;
97  pois[QObject::tr( "restaurant" ).toLower()] = OsmPlacemark::FoodRestaurant;
98  pois["restaurant"] = OsmPlacemark::FoodRestaurant;
99  pois[QObject::tr( "doctor" ).toLower()] = OsmPlacemark::HealthDoctors;
100  pois["doctor"] = OsmPlacemark::HealthDoctors;
101  pois[QObject::tr( "hospital" ).toLower()] = OsmPlacemark::HealthHospital;
102  pois["hospital"] = OsmPlacemark::HealthHospital;
103  pois[QObject::tr( "pharmacy" ).toLower()] = OsmPlacemark::HealthPharmacy;
104  pois["pharmacy"] = OsmPlacemark::HealthPharmacy;
105  pois[QObject::tr( "bank" ).toLower()] = OsmPlacemark::MoneyBank;
106  pois["bank"] = OsmPlacemark::MoneyBank;
107  pois[QObject::tr( "beverages" ).toLower()] = OsmPlacemark::ShoppingBeverages;
108  pois["beverages"] = OsmPlacemark::ShoppingBeverages;
109  pois[QObject::tr( "hifi" ).toLower()] = OsmPlacemark::ShoppingHifi;
110  pois["hifi"] = OsmPlacemark::ShoppingHifi;
111  pois[QObject::tr( "supermarket" ).toLower()] = OsmPlacemark::ShoppingSupermarket;
112  pois["supermarket"] = OsmPlacemark::ShoppingSupermarket;
113  pois[QObject::tr( "attraction" ).toLower()] = OsmPlacemark::TouristAttraction;
114  pois["attraction"] = OsmPlacemark::TouristAttraction;
115  pois[QObject::tr( "castle" ).toLower()] = OsmPlacemark::TouristCastle;
116  pois["castle"] = OsmPlacemark::TouristCastle;
117  pois[QObject::tr( "cinema" ).toLower()] = OsmPlacemark::TouristCinema;
118  pois["cinema"] = OsmPlacemark::TouristCinema;
119  pois[QObject::tr( "monument" ).toLower()] = OsmPlacemark::TouristMonument;
120  pois["monument"] = OsmPlacemark::TouristMonument;
121  pois[QObject::tr( "museum" ).toLower()] = OsmPlacemark::TouristMuseum;
122  pois["museum"] = OsmPlacemark::TouristMuseum;
123  pois[QObject::tr( "ruin" ).toLower()] = OsmPlacemark::TouristRuin;
124  pois["ruin"] = OsmPlacemark::TouristRuin;
125  pois[QObject::tr( "theatre" ).toLower()] = OsmPlacemark::TouristTheatre;
126  pois["theatre"] = OsmPlacemark::TouristTheatre;
127  pois[QObject::tr( "theme park" ).toLower()] = OsmPlacemark::TouristThemePark;
128  pois["theme park"] = OsmPlacemark::TouristThemePark;
129  pois[QObject::tr( "view point" ).toLower()] = OsmPlacemark::TouristViewPoint;
130  pois["view point"] = OsmPlacemark::TouristViewPoint;
131  pois[QObject::tr( "zoo" ).toLower()] = OsmPlacemark::TouristZoo;
132  pois["zoo"] = OsmPlacemark::TouristZoo;
133  pois[QObject::tr( "airport" ).toLower()] = OsmPlacemark::TransportAirportTerminal;
134  pois["airport"] = OsmPlacemark::TransportAirportTerminal;
135  pois[QObject::tr( "bus station" ).toLower()] = OsmPlacemark::TransportBusStation;
136  pois["bus station"] = OsmPlacemark::TransportBusStation;
137  pois[QObject::tr( "bus stop" ).toLower()] = OsmPlacemark::TransportBusStop;
138  pois["bus stop"] = OsmPlacemark::TransportBusStop;
139  pois[QObject::tr( "car share" ).toLower()] = OsmPlacemark::TransportCarShare;
140  pois["car share"] = OsmPlacemark::TransportCarShare;
141  pois[QObject::tr( "fuel" ).toLower()] = OsmPlacemark::TransportFuel;
142  pois["fuel"] = OsmPlacemark::TransportFuel;
143  pois[QObject::tr( "parking" ).toLower()] = OsmPlacemark::TransportParking;
144  pois["parking"] = OsmPlacemark::TransportParking;
145  pois[QObject::tr( "train station" ).toLower()] = OsmPlacemark::TransportTrainStation;
146  pois["train station"] = OsmPlacemark::TransportTrainStation;
147  pois[QObject::tr( "atm" ).toLower()] = OsmPlacemark::MoneyAtm;
148  pois["atm"] = OsmPlacemark::MoneyAtm;
149  pois[QObject::tr( "tram stop" ).toLower()] = OsmPlacemark::TransportTramStop;
150  pois["tram stop"] = OsmPlacemark::TransportTramStop;
151  pois[QObject::tr( "bicycle rental" ).toLower()] = OsmPlacemark::TransportRentalBicycle;
152  pois["bicycle rental"] = OsmPlacemark::TransportRentalBicycle;
153  pois[QObject::tr( "car rental" ).toLower()] = OsmPlacemark::TransportRentalCar;
154  pois["car rental"] = OsmPlacemark::TransportRentalCar;
155  pois[QObject::tr( "speed camera" ).toLower()] = OsmPlacemark::TransportSpeedCamera;
156  pois["speed camera"] = OsmPlacemark::TransportSpeedCamera;
157  pois[QObject::tr( "taxi" ).toLower()] = OsmPlacemark::TransportTaxiRank;
158  pois["taxi"] = OsmPlacemark::TransportTaxiRank;
159  }
160 
161  Q_ASSERT( !pois.isEmpty() );
162  QString const searchTerm = category.toLower();
163  if ( pois.contains( searchTerm ) ) {
164  m_category = pois[searchTerm];
165  return true;
166  }
167 
168  m_category = OsmPlacemark::UnknownCategory;
169  return false;
170 }
171 
172 OsmPlacemark::OsmCategory DatabaseQuery::category() const
173 {
174  return m_category;
175 }
176 
177 DatabaseQuery::QueryType DatabaseQuery::queryType() const
178 {
179  return m_queryType;
180 }
181 
182 DatabaseQuery::ResultFormat DatabaseQuery::resultFormat() const
183 {
184  return m_resultFormat;
185 }
186 
187 QString DatabaseQuery::street() const
188 {
189  return m_street;
190 }
191 
192 QString DatabaseQuery::houseNumber() const
193 {
194  return m_houseNumber;
195 }
196 
197 QString DatabaseQuery::region() const
198 {
199  return m_region;
200 }
201 
202 QString DatabaseQuery::searchTerm() const
203 {
204  return m_searchTerm;
205 }
206 
207 GeoDataCoordinates DatabaseQuery::position() const
208 {
209  return m_position;
210 }
211 
212 }
Marble::GeoDataCoordinates
A 3d point representation.
Definition: GeoDataCoordinates.h:52
Marble::OsmPlacemark::EducationUniversity
Definition: OsmPlacemark.h:38
Marble::GeoDataLatLonBox::isEmpty
virtual bool isEmpty() const
Indicates whether the bounding box is not initialised (and contains nothing).
Definition: GeoDataLatLonBox.cpp:768
QMap::contains
bool contains(const Key &key) const
Marble::DatabaseQuery::region
QString region() const
Definition: DatabaseQuery.cpp:197
Marble::OsmPlacemark::TouristRuin
Definition: OsmPlacemark.h:58
Marble::OsmPlacemark::TouristTheatre
Definition: OsmPlacemark.h:59
QString::split
QStringList split(const QString &sep, SplitBehavior behavior, Qt::CaseSensitivity cs) const
MarbleModel.h
This file contains the headers for MarbleModel.
QList::removeFirst
void removeFirst()
Marble::OsmPlacemark::AccomodationHostel
Definition: OsmPlacemark.h:30
Marble::OsmPlacemark
A lightweight data structure to represent points of interest like addresses with support for serializ...
Definition: OsmPlacemark.h:24
QList::at
const T & at(int i) const
QMap
QList::push_front
void push_front(const T &value)
Marble::OsmPlacemark::TransportTramStop
Definition: OsmPlacemark.h:75
Marble::DatabaseQuery::resultFormat
ResultFormat resultFormat() const
Definition: DatabaseQuery.cpp:182
Marble::OsmPlacemark::MoneyAtm
Definition: OsmPlacemark.h:48
Marble::DatabaseQuery::QueryType
QueryType
Definition: DatabaseQuery.h:32
Marble::DatabaseQuery::AddressFormat
Definition: DatabaseQuery.h:39
Marble::OsmPlacemark::TransportSpeedCamera
Definition: OsmPlacemark.h:72
Marble::OsmPlacemark::FoodBar
Definition: OsmPlacemark.h:39
QObject::tr
QString tr(const char *sourceText, const char *disambiguation, int n)
Marble::DatabaseQuery::queryType
QueryType queryType() const
Definition: DatabaseQuery.cpp:177
QList::size
int size() const
Marble::DatabaseQuery::searchTerm
QString searchTerm() const
Definition: DatabaseQuery.cpp:202
Marble::DatabaseQuery::category
OsmPlacemark::OsmCategory category() const
Definition: DatabaseQuery.cpp:172
Marble::DatabaseQuery::houseNumber
QString houseNumber() const
Definition: DatabaseQuery.cpp:192
Marble::OsmPlacemark::TransportAirportTerminal
Definition: OsmPlacemark.h:64
Marble::OsmPlacemark::TouristCinema
Definition: OsmPlacemark.h:55
QRegExp::indexIn
int indexIn(const QString &str, int offset, CaretMode caretMode) const
QRegExp
Marble::DatabaseQuery::position
GeoDataCoordinates position() const
Definition: DatabaseQuery.cpp:207
Marble::OsmPlacemark::TransportRentalCar
Definition: OsmPlacemark.h:71
Marble::OsmPlacemark::TransportTrainStation
Definition: OsmPlacemark.h:74
Marble::OsmPlacemark::TouristCastle
Definition: OsmPlacemark.h:54
Marble::OsmPlacemark::AccomodationMotel
Definition: OsmPlacemark.h:32
Marble::OsmPlacemark::AmenityLibrary
Definition: OsmPlacemark.h:35
Marble::OsmPlacemark::FoodFastFood
Definition: OsmPlacemark.h:42
Marble::OsmPlacemark::AccomodationHotel
Definition: OsmPlacemark.h:31
Marble::OsmPlacemark::ShoppingBeverages
Definition: OsmPlacemark.h:50
QRegExp::capturedTexts
QStringList capturedTexts() const
Marble::MarbleModel::positionTracking
PositionTracking * positionTracking() const
Definition: MarbleModel.cpp:512
Marble::OsmPlacemark::UnknownCategory
Definition: OsmPlacemark.h:28
Marble::OsmPlacemark::HealthPharmacy
Definition: OsmPlacemark.h:47
Marble::OsmPlacemark::FoodRestaurant
Definition: OsmPlacemark.h:44
Marble::OsmPlacemark::MoneyBank
Definition: OsmPlacemark.h:49
Marble::DatabaseQuery::BroadSearch
search which contains a poi category
Definition: DatabaseQuery.h:35
Marble::OsmPlacemark::TouristViewPoint
Definition: OsmPlacemark.h:61
Marble::OsmPlacemark::TouristMonument
Definition: OsmPlacemark.h:56
QList::first
T & first()
QString
Marble::OsmPlacemark::HealthHospital
Definition: OsmPlacemark.h:46
QStringList
Marble::OsmPlacemark::HealthDoctors
Definition: OsmPlacemark.h:45
Marble::GeoDataLatLonBox::center
virtual GeoDataCoordinates center() const
returns the center of this box
Definition: GeoDataLatLonBox.cpp:276
Marble::DatabaseQuery::CategorySearch
precise search for an address
Definition: DatabaseQuery.h:34
QString::toLower
QString toLower() const
QLatin1Char
Marble::OsmPlacemark::EducationCollege
Definition: OsmPlacemark.h:36
Marble::OsmPlacemark::TransportBusStop
Definition: OsmPlacemark.h:66
Marble::OsmPlacemark::TransportTaxiRank
Definition: OsmPlacemark.h:73
Marble::OsmPlacemark::FoodCafe
Definition: OsmPlacemark.h:41
Marble::OsmPlacemark::FoodPub
Definition: OsmPlacemark.h:43
Marble::OsmPlacemark::TouristMuseum
Definition: OsmPlacemark.h:57
GeoDataLatLonBox.h
Marble::DatabaseQuery::AddressSearch
Definition: DatabaseQuery.h:33
Marble::OsmPlacemark::TouristZoo
Definition: OsmPlacemark.h:62
Marble::DatabaseQuery::DatabaseQuery
DatabaseQuery(const MarbleModel *model, const QString &searchTerm, const GeoDataLatLonBox &preferred)
Definition: DatabaseQuery.cpp:23
Marble::MarbleModel
The data model (not based on QAbstractModel) for a MarbleWidget.
Definition: MarbleModel.h:97
Marble::OsmPlacemark::TransportRentalBicycle
Definition: OsmPlacemark.h:70
Marble::DatabaseQuery::ResultFormat
ResultFormat
Definition: DatabaseQuery.h:38
Marble::DatabaseQuery::street
QString street() const
Definition: DatabaseQuery.cpp:187
Marble::OsmPlacemark::TransportFuel
Definition: OsmPlacemark.h:68
Marble::OsmPlacemark::TransportCarShare
Definition: OsmPlacemark.h:67
Marble::OsmPlacemark::ShoppingHifi
Definition: OsmPlacemark.h:51
Marble::OsmPlacemark::AccomodationCamping
Definition: OsmPlacemark.h:29
Marble::OsmPlacemark::ShoppingSupermarket
Definition: OsmPlacemark.h:52
QList::last
T & last()
Marble::OsmPlacemark::OsmCategory
OsmCategory
Definition: OsmPlacemark.h:27
Marble::OsmPlacemark::AccomodationYouthHostel
Definition: OsmPlacemark.h:33
Marble::PositionTracking::status
PositionProviderStatus status() const
Returns the status of the current position provider plugin, if any.
Definition: PositionTracking.cpp:394
Marble::PositionProviderStatusAvailable
Definition: PositionProviderPluginInterface.h:29
QMap::isEmpty
bool isEmpty() const
Marble::OsmPlacemark::TransportBusStation
Definition: OsmPlacemark.h:65
Marble::PositionTracking::currentLocation
GeoDataCoordinates currentLocation() const
Returns the current position, if any.
Definition: PositionTracking.cpp:389
PositionTracking.h
Marble::DatabaseQuery::DistanceFormat
display results with location information
Definition: DatabaseQuery.h:40
Marble::OsmPlacemark::TransportParking
Definition: OsmPlacemark.h:69
Marble::OsmPlacemark::TouristThemePark
Definition: OsmPlacemark.h:60
DatabaseQuery.h
Marble::OsmPlacemark::TouristAttraction
Definition: OsmPlacemark.h:53
Marble::OsmPlacemark::FoodBiergarten
Definition: OsmPlacemark.h:40
Marble::GeoDataLatLonBox
A class that defines a 2D bounding box for geographic data.
Definition: GeoDataLatLonBox.h:51
Marble::OsmPlacemark::EducationSchool
Definition: OsmPlacemark.h:37
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:13:38 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