summaryrefslogtreecommitdiffstats
path: root/src/positioning/qgeopath_p.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/positioning/qgeopath_p.h')
-rw-r--r--src/positioning/qgeopath_p.h260
1 files changed, 0 insertions, 260 deletions
diff --git a/src/positioning/qgeopath_p.h b/src/positioning/qgeopath_p.h
deleted file mode 100644
index 64abb621..00000000
--- a/src/positioning/qgeopath_p.h
+++ /dev/null
@@ -1,260 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtPositioning module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QGEOPATH_P_H
-#define QGEOPATH_P_H
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include <QtPositioning/private/qpositioningglobal_p.h>
-#include "qgeoshape_p.h"
-#include "qgeocoordinate.h"
-#include "qlocationutils_p.h"
-#include <QtPositioning/qgeopath.h>
-#include <QtCore/QList>
-
-QT_BEGIN_NAMESPACE
-
-inline static void computeBBox(const QList<QGeoCoordinate> &m_path, QList<double> &m_deltaXs,
- double &m_minX, double &m_maxX, double &m_minLati, double &m_maxLati,
- QGeoRectangle &m_bbox)
-{
- if (m_path.isEmpty()) {
- m_deltaXs.clear();
- m_minX = qInf();
- m_maxX = -qInf();
- m_minLati = qInf();
- m_maxLati = -qInf();
- m_bbox = QGeoRectangle();
- return;
- }
-
- m_minLati = m_maxLati = m_path.at(0).latitude();
- qsizetype minId = 0;
- qsizetype maxId = 0;
- m_deltaXs.resize(m_path.size());
- m_deltaXs[0] = m_minX = m_maxX = 0.0;
-
- for (qsizetype i = 1; i < m_path.size(); i++) {
- const QGeoCoordinate &geoFrom = m_path.at(i-1);
- const QGeoCoordinate &geoTo = m_path.at(i);
- double longiFrom = geoFrom.longitude();
- double longiTo = geoTo.longitude();
- double deltaLongi = longiTo - longiFrom;
- if (qAbs(deltaLongi) > 180.0) {
- if (longiTo > 0.0)
- longiTo -= 360.0;
- else
- longiTo += 360.0;
- deltaLongi = longiTo - longiFrom;
- }
- m_deltaXs[i] = m_deltaXs[i-1] + deltaLongi;
- if (m_deltaXs[i] < m_minX) {
- m_minX = m_deltaXs[i];
- minId = i;
- }
- if (m_deltaXs[i] > m_maxX) {
- m_maxX = m_deltaXs[i];
- maxId = i;
- }
- if (geoTo.latitude() > m_maxLati)
- m_maxLati = geoTo.latitude();
- if (geoTo.latitude() < m_minLati)
- m_minLati = geoTo.latitude();
- }
-
- m_bbox = QGeoRectangle(QGeoCoordinate(m_maxLati, m_path.at(minId).longitude()),
- QGeoCoordinate(m_minLati, m_path.at(maxId).longitude()));
-}
-
-inline static void updateBBox(const QList<QGeoCoordinate> &m_path, QList<double> &m_deltaXs,
- double &m_minX, double &m_maxX, double &m_minLati, double &m_maxLati,
- QGeoRectangle &m_bbox)
-{
- if (m_path.isEmpty()) {
- m_deltaXs.clear();
- m_minX = qInf();
- m_maxX = -qInf();
- m_minLati = qInf();
- m_maxLati = -qInf();
- m_bbox = QGeoRectangle();
- return;
- } else if (m_path.size() == 1) { // was 0 now is 1
- m_deltaXs.resize(1);
- m_deltaXs[0] = m_minX = m_maxX = 0.0;
- m_minLati = m_maxLati = m_path.at(0).latitude();
- m_bbox = QGeoRectangle(QGeoCoordinate(m_maxLati, m_path.at(0).longitude()),
- QGeoCoordinate(m_minLati, m_path.at(0).longitude()));
- return;
- } else if ( m_path.size() != m_deltaXs.size() + 1 ) { // this case should not happen
- computeBBox(m_path, m_deltaXs, m_minX, m_maxX, m_minLati, m_maxLati, m_bbox); // something went wrong
- return;
- }
-
- const QGeoCoordinate &geoFrom = m_path.at(m_path.size()-2);
- const QGeoCoordinate &geoTo = m_path.last();
- double longiFrom = geoFrom.longitude();
- double longiTo = geoTo.longitude();
- double deltaLongi = longiTo - longiFrom;
- if (qAbs(deltaLongi) > 180.0) {
- if (longiTo > 0.0)
- longiTo -= 360.0;
- else
- longiTo += 360.0;
- deltaLongi = longiTo - longiFrom;
- }
-
- m_deltaXs.push_back(m_deltaXs.last() + deltaLongi);
- double currentMinLongi = m_bbox.topLeft().longitude();
- double currentMaxLongi = m_bbox.bottomRight().longitude();
- if (m_deltaXs.last() < m_minX) {
- m_minX = m_deltaXs.last();
- currentMinLongi = geoTo.longitude();
- }
- if (m_deltaXs.last() > m_maxX) {
- m_maxX = m_deltaXs.last();
- currentMaxLongi = geoTo.longitude();
- }
- if (geoTo.latitude() > m_maxLati)
- m_maxLati = geoTo.latitude();
- if (geoTo.latitude() < m_minLati)
- m_minLati = geoTo.latitude();
- m_bbox = QGeoRectangle(QGeoCoordinate(m_maxLati, currentMinLongi),
- QGeoCoordinate(m_minLati, currentMaxLongi));
-}
-
-// Lazy by default. Eager, within the module, used only in MapItems/MapObjectsQSG
-class Q_POSITIONING_PRIVATE_EXPORT QGeoPathPrivate : public QGeoShapePrivate
-{
-public:
- QGeoPathPrivate();
- QGeoPathPrivate(const QList<QGeoCoordinate> &path, const qreal width = 0.0);
- ~QGeoPathPrivate();
-
-// QGeoShape API
- virtual QGeoShapePrivate *clone() const override;
- virtual bool isValid() const override;
- virtual bool isEmpty() const override;
- virtual QGeoCoordinate center() const override;
- virtual bool operator==(const QGeoShapePrivate &other) const override;
- virtual bool contains(const QGeoCoordinate &coordinate) const override;
- virtual QGeoRectangle boundingGeoRectangle() const override;
- size_t hash(size_t seed) const override;
-
-// QGeoPathPrivate API
- virtual const QList<QGeoCoordinate> &path() const;
- virtual bool lineContains(const QGeoCoordinate &coordinate) const;
- virtual qreal width() const;
- virtual double length(qsizetype indexFrom, qsizetype indexTo) const;
- virtual qsizetype size() const;
- virtual QGeoCoordinate coordinateAt(qsizetype index) const;
- virtual bool containsCoordinate(const QGeoCoordinate &coordinate) const;
-
- virtual void setWidth(const qreal &width);
- virtual void translate(double degreesLatitude, double degreesLongitude);
- virtual void setPath(const QList<QGeoCoordinate> &path);
- virtual void clearPath();
- virtual void addCoordinate(const QGeoCoordinate &coordinate);
- virtual void insertCoordinate(qsizetype index, const QGeoCoordinate &coordinate);
- virtual void replaceCoordinate(qsizetype index, const QGeoCoordinate &coordinate);
- virtual void removeCoordinate(const QGeoCoordinate &coordinate);
- virtual void removeCoordinate(qsizetype index);
- virtual void computeBoundingBox();
- virtual void markDirty();
-
-// data members
- QList<QGeoCoordinate> m_path;
- qreal m_width = 0;
- QGeoRectangle m_bbox; // cached
- double m_leftBoundWrapped; // cached
- bool m_bboxDirty = false;
-};
-
-class Q_POSITIONING_PRIVATE_EXPORT QGeoPathPrivateEager : public QGeoPathPrivate
-{
-public:
- QGeoPathPrivateEager();
- QGeoPathPrivateEager(const QList<QGeoCoordinate> &path, const qreal width = 0.0);
- ~QGeoPathPrivateEager();
-
-// QGeoShapePrivate API
- virtual QGeoShapePrivate *clone() const override;
- virtual void translate(double degreesLatitude, double degreesLongitude) override;
-
-// QGeoShapePrivate API
- virtual void markDirty() override;
- virtual void addCoordinate(const QGeoCoordinate &coordinate) override;
- virtual void computeBoundingBox() override;
-
-// *Eager API
- void updateBoundingBox();
-
-// data members
- QList<double> m_deltaXs; // longitude deltas from m_path[0]
- double m_minX = 0; // minimum value inside deltaXs
- double m_maxX = 0; // maximum value inside deltaXs
- double m_minLati = 0; // minimum latitude. paths do not wrap around through the poles
- double m_maxLati = 0; // minimum latitude. paths do not wrap around through the poles
-};
-
-// This is a mean of creating a QGeoPathPrivateEager and injecting it into QGeoPaths via operator=
-class Q_POSITIONING_PRIVATE_EXPORT QGeoPathEager : public QGeoPath
-{
- Q_GADGET
-public:
-
- QGeoPathEager();
- QGeoPathEager(const QList<QGeoCoordinate> &path, const qreal &width = 0.0);
- QGeoPathEager(const QGeoPath &other);
- QGeoPathEager(const QGeoShape &other);
- ~QGeoPathEager();
-};
-
-QT_END_NAMESPACE
-
-#endif // QGEOPATH_P_H