summaryrefslogtreecommitdiff
path: root/src/location/maps/qgeocodingmanager.cpp
diff options
context:
space:
mode:
authorabcd <qt-info@nokia.com>2011-07-31 21:33:56 +1000
committerabcd <qt_abcd1@ovi.com>2011-08-09 03:48:02 +0200
commit2904df66e87534ff348f7af13b0d513c8ecc746c (patch)
tree70fb416d39158f80d9445e1e9f0d1a2c6de20b48 /src/location/maps/qgeocodingmanager.cpp
parent38e2574bf27f66100bf9ec16592f938a4b7a02b1 (diff)
downloadqtlocation-2904df66e87534ff348f7af13b0d513c8ecc746c.tar.gz
Rename QGeoSearchManager to QGeocodingManager
Also do related renames like QGeoSearchReply to QGeocodeReply Change-Id: I31cc6da4fda03299e905b4938cdfcff3c20aa8c7 Reviewed-on: http://codereview.qt.nokia.com/2710 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: abcd <qt_abcd1@ovi.com>
Diffstat (limited to 'src/location/maps/qgeocodingmanager.cpp')
-rw-r--r--src/location/maps/qgeocodingmanager.cpp364
1 files changed, 364 insertions, 0 deletions
diff --git a/src/location/maps/qgeocodingmanager.cpp b/src/location/maps/qgeocodingmanager.cpp
new file mode 100644
index 00000000..26382dee
--- /dev/null
+++ b/src/location/maps/qgeocodingmanager.cpp
@@ -0,0 +1,364 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qgeocodingmanager.h"
+#include "qgeocodingmanager_p.h"
+#include "qgeocodingmanagerengine.h"
+
+#include "qgeoboundingbox.h"
+#include "qgeoboundingcircle.h"
+
+#include <QLocale>
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ \class QGeocodingManager
+
+ \brief The QGeocodingManager class provides support for geocoding
+ operations.
+
+
+ \inmodule QtLocation
+ \since 1.1
+
+ \ingroup maps-places
+
+ The geocode(), reverseGeocode() and search() functions return
+ QGeocodeReply objects, which manage these operations and report on the
+ result of the operations and any errors which may have occurred.
+
+ The geocode() and reverseGeocode() functions can be used to convert
+ QGeoAddress instances to QGeoCoordinate instances and vice-versa.
+
+ The geocode() function is also overloaded to allow a user to perform a free text
+ geocoding operation, if the string provided can be interpreted as
+ an address it can be geocoded to coordinate information.
+
+ Instances of QGeocodingManager can be accessed with
+ QGeoServiceProvider::geocodingManager().
+*/
+
+/*!
+ Constructs a new manager with the specified \a parent and with the
+ implementation provided by \a engine.
+
+ This constructor is used interally by QGeoServiceProviderFactory. Regular
+ users should acquire instances of QGeocodingManager with
+ QGeoServiceProvider::geocodingManager();
+*/
+QGeocodingManager::QGeocodingManager(QGeocodingManagerEngine *engine, QObject *parent)
+ : QObject(parent),
+ d_ptr(new QGeocodingManagerPrivate())
+{
+ d_ptr->engine = engine;
+ if (d_ptr->engine) {
+ d_ptr->engine->setParent(this);
+
+ connect(d_ptr->engine,
+ SIGNAL(finished(QGeocodeReply*)),
+ this,
+ SIGNAL(finished(QGeocodeReply*)));
+
+ connect(d_ptr->engine,
+ SIGNAL(error(QGeocodeReply*, QGeocodeReply::Error, QString)),
+ this,
+ SIGNAL(error(QGeocodeReply*, QGeocodeReply::Error, QString)));
+ } else {
+ qFatal("The geocoding manager engine that was set for this geocoding manager was NULL.");
+ }
+}
+
+/*!
+ Destroys this manager.
+*/
+QGeocodingManager::~QGeocodingManager()
+{
+ delete d_ptr;
+}
+
+/*!
+ Returns the name of the engine which implements the behaviour of this
+ geocoding manager.
+
+ The combination of managerName() and managerVersion() should be unique
+ amongst the plugin implementations.
+*/
+QString QGeocodingManager::managerName() const
+{
+// if (!d_ptr->engine)
+// return QString();
+
+ return d_ptr->engine->managerName();
+}
+
+/*!
+ Returns the version of the engine which implements the behaviour of this
+ geocoding manager.
+
+ The combination of managerName() and managerVersion() should be unique
+ amongst the plugin implementations.
+*/
+int QGeocodingManager::managerVersion() const
+{
+// if (!d_ptr->engine)
+// return -1;
+
+ return d_ptr->engine->managerVersion();
+}
+
+/*!
+ Begins the geocoding of \a address. Geocoding is the process of finding a
+ coordinate that corresponds to a given address.
+
+ A QGeocodeReply object will be returned, which can be used to manage the
+ geocoding operation and to return the results of the operation.
+
+ This manager and the returned QGeocodeReply object will emit signals
+ indicating if the operation completes or if errors occur.
+
+ If supportsGeocoding() returns false an
+ QGeocodeReply::UnsupportedOptionError will occur.
+
+ Once the operation has completed, QGeocodeReply::locations() can be used to
+ retrieve the results, which will consist of a list of QGeoLocation objects.
+ These object represent a combination of coordinate and address data.
+
+ The address data returned in the results may be different from \a address.
+ This will usually occur if the geocoding service backend uses a different
+ canonical form of addresses or if \a address was only partially filled out.
+
+ If \a bounds is non-null and valid QGeoBoundingArea it will be used to
+ limit the results to thos that are contained within \a bounds. This is
+ particularly useful if \a address is only partially filled out, as the
+ service will attempt to geocode all matches for the specified data.
+
+ The user is responsible for deleting the returned reply object, although
+ this can be done in the slot connected to QGeocodingManager::finished(),
+ QGeocodingManager::error(), QGeocodeReply::finished() or
+ QGeocodeReply::error() with deleteLater().
+*/
+QGeocodeReply* QGeocodingManager::geocode(const QGeoAddress &address, QGeoBoundingArea *bounds)
+{
+// if (!d_ptr->engine)
+// return new QGeocodeReply(QGeocodeReply::EngineNotSetError, "The geocoding manager was not created with a valid engine.", this);
+
+ return d_ptr->engine->geocode(address, bounds);
+}
+
+
+/*!
+ Begins the reverse geocoding of \a coordinate. Reverse geocoding is the
+ process of finding an address that corresponds to a given coordinate.
+
+ A QGeocodeReply object will be returned, which can be used to manage the
+ reverse geocoding operation and to return the results of the operation.
+
+ This manager and the returned QGeocodeReply object will emit signals
+ indicating if the operation completes or if errors occur.
+
+ If supportsReverseGeocoding() returns false an
+ QGeocodeReply::UnsupportedOptionError will occur.
+
+ At that point QGeocodeReply::locations() can be used to retrieve the
+ results, which will consist of a list of QGeoLocation objects. These object
+ represent a combination of coordinate and address data.
+
+ The coordinate data returned in the results may be different from \a
+ coordinate. This will usually occur if the reverse geocoding service
+ backend shifts the coordinates to be closer to the matching addresses, or
+ if the backend returns results at multiple levels of detail.
+
+ If multiple results are returned by the reverse geocoding service backend
+ they will be provided in order of specificity. This normally occurs if the
+ backend is configured to reverse geocode across multiple levels of detail.
+ As an example, some services will return address and coordinate pairs for
+ the street address, the city, the state and the country.
+
+ If \a bounds is non-null and a valid QGeoBoundingBox it will be used to
+ limit the results to thos that are contained within \a bounds.
+
+ The user is responsible for deleting the returned reply object, although
+ this can be done in the slot connected to QGeocodingManager::finished(),
+ QGeocodingManager::error(), QGeocodeReply::finished() or
+ QGeocodeReply::error() with deleteLater().
+*/
+QGeocodeReply* QGeocodingManager::reverseGeocode(const QGeoCoordinate &coordinate, QGeoBoundingArea *bounds)
+{
+// if (!d_ptr->engine)
+// return new QGeocodeReply(QGeocodeReply::EngineNotSetError, "The geocoding manager was not created with a valid engine.", this);
+
+ return d_ptr->engine->reverseGeocode(coordinate, bounds);
+}
+
+/*!
+ Begins geocoding for a location matching \a address.
+
+ A QGeocodeReply object will be returned, which can be used to manage the
+ geocoding operation and to return the results of the operation.
+
+ This manager and the returned QGeocodeReply object will emit signals
+ indicating if the operation completes or if errors occur.
+
+ Once the operation has completed, QGeocodeReply::locations() can be used to
+ retrieve the results, which will consist of a list of QGeoLocation objects.
+ These object represent a combination of coordinate and address data.
+
+ If \a limit is -1 the entire result set will be returned, otherwise at most
+ \a limit results will be returned.
+
+ The \a offset parameter is used to ask the geocoding service to not return the
+ first \a offset results.
+
+ The \a limit and \a offset results are used together to implement paging.
+
+ If \a bounds is non-null and a valid QGeoBoundingArea it will be used to
+ limit the results to thos that are contained within \a bounds.
+
+ The user is responsible for deleting the returned reply object, although
+ this can be done in the slot connected to QGeocodingManager::finished(),
+ QGeocodingManager::error(), QGeocodeReply::finished() or
+ QGeocodeReply::error() with deleteLater().
+*/
+QGeocodeReply* QGeocodingManager::geocode(const QString &address,
+ int limit,
+ int offset,
+ QGeoBoundingArea *bounds)
+{
+// if (!d_ptr->engine)
+// return new QGeocodeReply(QGeocodeReply::EngineNotSetError, "The geocoding manager was not created with a valid engine.", this);
+
+ QGeocodeReply *reply = d_ptr->engine->geocode(address,
+ limit,
+ offset,
+ bounds);
+ return reply;
+}
+
+/*!
+ Returns whether this manager supports geocoding.
+*/
+bool QGeocodingManager::supportsGeocoding() const
+{
+// if (!d_ptr->engine)
+// return false;
+
+ return d_ptr->engine->supportsGeocoding();
+}
+
+/*!
+ Returns whether this manager supports reverse geocoding.
+*/
+bool QGeocodingManager::supportsReverseGeocoding() const
+{
+ return d_ptr->engine->supportsReverseGeocoding();
+}
+
+/*!
+ Sets the locale to be used by the this manager to \a locale.
+
+ If this geocoding manager supports returning the results
+ in different languages, they will be returned in the language of \a locale.
+
+ The locale used defaults to the system locale if this is not set.
+*/
+void QGeocodingManager::setLocale(const QLocale &locale)
+{
+ d_ptr->engine->setLocale(locale);
+}
+
+/*!
+ Returns the locale used to hint to this geocoding manager about what
+ language to use for the results.
+*/
+QLocale QGeocodingManager::locale() const
+{
+ return d_ptr->engine->locale();
+}
+
+/*!
+\fn void QGeocodingManager::finished(QGeocodeReply* reply)
+
+ This signal is emitted when \a reply has finished processing.
+
+ If reply::error() equals QGeocodeReply::NoError then the processing
+ finished successfully.
+
+ This signal and QGeocodeReply::finished() will be emitted at the same
+ time.
+
+ \note Do no delete the \a reply object in the slot connected to this
+ signal. Use deleteLater() instead.
+*/
+
+/*!
+\fn void QGeocodingManager::error(QGeocodeReply* reply, QGeocodeReply::Error error, QString errorString)
+
+ This signal is emitted when an error has been detected in the processing of
+ \a reply. The QGeocodingManager::finished() signal will probably follow.
+
+ The error will be described by the error code \a error. If \a errorString is
+ not empty it will contain a textual description of the error.
+
+ This signal and QGeocodeReply::error() will be emitted at the same time.
+
+ \note Do no delete the \a reply object in the slot connected to this
+ signal. Use deleteLater() instead.
+*/
+
+/*******************************************************************************
+*******************************************************************************/
+
+QGeocodingManagerPrivate::QGeocodingManagerPrivate()
+ : engine(0) {}
+
+QGeocodingManagerPrivate::~QGeocodingManagerPrivate()
+{
+ if (engine)
+ delete engine;
+}
+
+/*******************************************************************************
+*******************************************************************************/
+
+#include "moc_qgeocodingmanager.cpp"
+
+QT_END_NAMESPACE