diff options
author | Bruno de Oliveira Abinader <bruno@mapbox.com> | 2017-02-28 18:26:19 -0800 |
---|---|---|
committer | Paolo Angelelli <paolo.angelelli@qt.io> | 2017-08-30 13:49:36 +0000 |
commit | 6024168ef21dd4fe6c5ddd7e837d56076e886e01 (patch) | |
tree | 140e9d827a4045382dee6db2412268cc164cdfc5 /src/location | |
parent | 8dae4824df50dfde8c4910bdf88cde78aeb1ce18 (diff) | |
download | qtlocation-6024168ef21dd4fe6c5ddd7e837d56076e886e01.tar.gz |
Mapbox GL native circle support
Circles crossing one pole are drawn inverted.
Circles crossing 2 poles do not even have the correct geometry.
Nevertheless, a first approximation.
Task-number: QTBUG-58869
Change-Id: I5a508f5d6e27c4f08412a7ae327883866068a1e9
Reviewed-by: Paolo Angelelli <paolo.angelelli@qt.io>
Diffstat (limited to 'src/location')
-rw-r--r-- | src/location/declarativemaps/qdeclarativecirclemapitem.cpp | 10 | ||||
-rw-r--r-- | src/location/declarativemaps/qdeclarativecirclemapitem_p.h | 8 |
2 files changed, 11 insertions, 7 deletions
diff --git a/src/location/declarativemaps/qdeclarativecirclemapitem.cpp b/src/location/declarativemaps/qdeclarativecirclemapitem.cpp index 5f002bf9..91328dc7 100644 --- a/src/location/declarativemaps/qdeclarativecirclemapitem.cpp +++ b/src/location/declarativemaps/qdeclarativecirclemapitem.cpp @@ -262,7 +262,7 @@ void QGeoMapCircleGeometry::updateScreenPointsInvert(const QList<QDoubleVector2D sourceBounds_ = screenBounds_; } -static bool crossEarthPole(const QGeoCoordinate ¢er, qreal distance) +bool QDeclarativeCircleMapItem::crossEarthPole(const QGeoCoordinate ¢er, qreal distance) { qreal poleLat = 90; QGeoCoordinate northPole = QGeoCoordinate(poleLat, center.longitude()); @@ -275,7 +275,7 @@ static bool crossEarthPole(const QGeoCoordinate ¢er, qreal distance) return false; } -static void calculatePeripheralPoints(QList<QGeoCoordinate> &path, +void QDeclarativeCircleMapItem::calculatePeripheralPoints(QList<QGeoCoordinate> &path, const QGeoCoordinate ¢er, qreal distance, int steps, @@ -644,9 +644,9 @@ void QDeclarativeCircleMapItem::updateCirclePathForRendering(QList<QDoubleVector const QGeoCoordinate ¢er, qreal distance) { - qreal poleLat = 90; - qreal distanceToNorthPole = center.distanceTo(QGeoCoordinate(poleLat, 0)); - qreal distanceToSouthPole = center.distanceTo(QGeoCoordinate(-poleLat, 0)); + const qreal poleLat = 90; + const qreal distanceToNorthPole = center.distanceTo(QGeoCoordinate(poleLat, 0)); + const qreal distanceToSouthPole = center.distanceTo(QGeoCoordinate(-poleLat, 0)); bool crossNorthPole = distanceToNorthPole < distance; bool crossSouthPole = distanceToSouthPole < distance; diff --git a/src/location/declarativemaps/qdeclarativecirclemapitem_p.h b/src/location/declarativemaps/qdeclarativecirclemapitem_p.h index 15774427..c117b444 100644 --- a/src/location/declarativemaps/qdeclarativecirclemapitem_p.h +++ b/src/location/declarativemaps/qdeclarativecirclemapitem_p.h @@ -96,6 +96,12 @@ public: const QGeoShape &geoShape() const Q_DECL_OVERRIDE; QGeoMap::ItemType itemType() const Q_DECL_OVERRIDE; + static bool crossEarthPole(const QGeoCoordinate ¢er, qreal distance); + static void calculatePeripheralPoints(QList<QGeoCoordinate> &path, const QGeoCoordinate ¢er, + qreal distance, int steps, QGeoCoordinate &leftBound); + bool preserveCircleGeometry(QList<QDoubleVector2D> &path, const QGeoCoordinate ¢er, + qreal distance); + Q_SIGNALS: void centerChanged(const QGeoCoordinate ¢er); void radiusChanged(qreal radius); @@ -111,8 +117,6 @@ protected Q_SLOTS: private: void updateCirclePath(); - bool preserveCircleGeometry(QList<QDoubleVector2D> &path, const QGeoCoordinate ¢er, - qreal distance); void updateCirclePathForRendering(QList<QDoubleVector2D> &path, const QGeoCoordinate ¢er, qreal distance); |