diff options
author | Julian Sherollari <jdotsh@gmail.com> | 2018-08-20 18:36:32 +0200 |
---|---|---|
committer | Paolo Angelelli <paolo.angelelli@qt.io> | 2018-08-20 16:41:11 +0000 |
commit | 480b5e168da11dc917dfd7ed8d44359d702eac83 (patch) | |
tree | c5d1a128738348b60bb584715c6933d29bf53824 /src | |
parent | 282d146923533eea6105758b9f09f29ee896975a (diff) | |
download | qtlocation-480b5e168da11dc917dfd7ed8d44359d702eac83.tar.gz |
Add QGeoPolygon holes support to LocationSingleton
Change-Id: I877e9c8e9d11c40ac302ceeaa9c8c85da958f038
Reviewed-by: Paolo Angelelli <paolo.angelelli@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/imports/positioning/locationsingleton.cpp | 34 | ||||
-rw-r--r-- | src/imports/positioning/locationsingleton.h | 1 |
2 files changed, 35 insertions, 0 deletions
diff --git a/src/imports/positioning/locationsingleton.cpp b/src/imports/positioning/locationsingleton.cpp index 209a289b..e355851e 100644 --- a/src/imports/positioning/locationsingleton.cpp +++ b/src/imports/positioning/locationsingleton.cpp @@ -40,6 +40,7 @@ #include "locationsingleton.h" #include <QtPositioning/private/qwebmercator_p.h> #include <QtPositioning/private/qdoublevector2d_p.h> +#include <QDebug> static QGeoCoordinate parseCoordinate(const QJSValue &value, bool *ok) { @@ -267,6 +268,39 @@ QGeoPolygon LocationSingleton::polygon(const QVariantList &coordinates) const } /*! + \qmlmethod geopolygon QtPositioning::polygon(list<coordinate> perimeter, list<list<coordinate>> holes) const + + Constructs a polygon from coordinates for perimeter and inner holes. + + \sa {geopolygon} + \since 5.12 +*/ +QGeoPolygon LocationSingleton::polygon(const QVariantList &perimeter, const QVariantList &holes) const +{ + QList<QGeoCoordinate> internalCoordinates; + for (int i = 0; i < perimeter.size(); i++) { + if (perimeter.at(i).canConvert<QGeoCoordinate>()) + internalCoordinates << perimeter.at(i).value<QGeoCoordinate>(); + } + QGeoPolygon poly(internalCoordinates); + + for (int i = 0; i < holes.size(); i++) { + if (holes.at(i).type() == QVariant::List) { + QList<QGeoCoordinate> hole; + const QVariantList &holeData = holes.at(i).toList(); + for (int j = 0; j < holeData.size(); j++) { + if (holeData.at(j).canConvert<QGeoCoordinate>()) + hole << holeData.at(j).value<QGeoCoordinate>(); + } + if (hole.size()) + poly.addHole(hole); + } + } + + return poly; +} + +/*! \qmlmethod geocircle QtPositioning::shapeToCircle(geoshape shape) const Converts \a shape to a geocircle. diff --git a/src/imports/positioning/locationsingleton.h b/src/imports/positioning/locationsingleton.h index a70332ec..9372b8f1 100644 --- a/src/imports/positioning/locationsingleton.h +++ b/src/imports/positioning/locationsingleton.h @@ -80,6 +80,7 @@ public: Q_INVOKABLE QGeoPolygon polygon() const; Q_INVOKABLE QGeoPolygon polygon(const QVariantList &value) const; + Q_INVOKABLE QGeoPolygon polygon(const QVariantList &perimeter, const QVariantList &holes) const; Q_INVOKABLE QGeoCircle shapeToCircle(const QGeoShape &shape) const; Q_INVOKABLE QGeoRectangle shapeToRectangle(const QGeoShape &shape) const; |