summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulian Sherollari <jdotsh@gmail.com>2018-08-20 18:36:32 +0200
committerPaolo Angelelli <paolo.angelelli@qt.io>2018-08-20 16:41:11 +0000
commit480b5e168da11dc917dfd7ed8d44359d702eac83 (patch)
treec5d1a128738348b60bb584715c6933d29bf53824
parent282d146923533eea6105758b9f09f29ee896975a (diff)
downloadqtlocation-480b5e168da11dc917dfd7ed8d44359d702eac83.tar.gz
Add QGeoPolygon holes support to LocationSingleton
Change-Id: I877e9c8e9d11c40ac302ceeaa9c8c85da958f038 Reviewed-by: Paolo Angelelli <paolo.angelelli@qt.io>
-rw-r--r--src/imports/positioning/locationsingleton.cpp34
-rw-r--r--src/imports/positioning/locationsingleton.h1
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;