From d3ca6c67f1b8fbf5d71c307e71ba89a483ec75bc Mon Sep 17 00:00:00 2001 From: Bruno de Oliveira Abinader Date: Tue, 7 Feb 2017 17:52:21 +0200 Subject: =?UTF-8?q?[Qt]=20Added=20QMapbox::Feature=20=E2=86=92=20GeoJSON?= =?UTF-8?q?=20conversion=20helper?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- platform/qt/app/mapwindow.cpp | 24 ++++++++++++++++++++++++ platform/qt/src/qt_conversion.hpp | 8 +++++++- platform/qt/src/qt_geojson.hpp | 15 +++++++++++++-- 3 files changed, 44 insertions(+), 3 deletions(-) (limited to 'platform') diff --git a/platform/qt/app/mapwindow.cpp b/platform/qt/app/mapwindow.cpp index 050b498503..e29e62f157 100644 --- a/platform/qt/app/mapwindow.cpp +++ b/platform/qt/app/mapwindow.cpp @@ -258,6 +258,30 @@ void MapWindow::keyPressEvent(QKeyEvent *ev) } } break; + case Qt::Key_5: { + if (m_map->layerExists("circleLayer")) { + m_map->removeLayer("circleLayer"); + m_map->removeSource("circleSource"); + } else { + QMapbox::CoordinatesCollections geometry { { { m_map->coordinate() } } }; + QMapbox::Feature feature { QMapbox::Feature::PointType, geometry, {}, {} }; + + QVariantMap circleSource; + circleSource["type"] = "geojson"; + circleSource["data"] = QVariant::fromValue(feature); + m_map->addSource("circleSource", circleSource); + + QVariantMap circle; + circle["id"] = "circleLayer"; + circle["type"] = "circle"; + circle["source"] = "circleSource"; + m_map->addLayer(circle); + + m_map->setPaintProperty("circleLayer", "circle-radius", 10.0); + m_map->setPaintProperty("circleLayer", "circle-color", QColor("black")); + } + } + break; case Qt::Key_Tab: m_map->cycleDebugOptions(); break; diff --git a/platform/qt/src/qt_conversion.hpp b/platform/qt/src/qt_conversion.hpp index ae05200d66..4b93ca7423 100644 --- a/platform/qt/src/qt_conversion.hpp +++ b/platform/qt/src/qt_conversion.hpp @@ -30,7 +30,13 @@ inline QVariant arrayMember(const QVariant& value, std::size_t i) { } inline bool isObject(const QVariant& value) { - return value.canConvert(QVariant::Map) || value.type() == QVariant::ByteArray; + return value.canConvert(QVariant::Map) + || value.type() == QVariant::ByteArray +#if QT_VERSION >= 0x050000 + || QString(value.typeName()) == QStringLiteral("QMapbox::Feature"); +#else + || QString(value.typeName()) == QString("QMapbox::Feature"); +#endif } inline optional objectMember(const QVariant& value, const char* key) { diff --git a/platform/qt/src/qt_geojson.hpp b/platform/qt/src/qt_geojson.hpp index caec790842..038b051941 100644 --- a/platform/qt/src/qt_geojson.hpp +++ b/platform/qt/src/qt_geojson.hpp @@ -179,9 +179,20 @@ namespace mbgl { namespace style { namespace conversion { +template <> +Result convertGeoJSON(const QMapbox::Feature& feature) { + return Result { GeoJSON { asMapboxGLFeature(feature) } }; +} + template <> Result convertGeoJSON(const QVariant& value) { - if (value.type() != QVariant::ByteArray) { +#if QT_VERSION >= 0x050000 + if (value.typeName() == QStringLiteral("QMapbox::Feature")) { +#else + if (value.typeName() == QString("QMapbox::Feature")) { +#endif + return convertGeoJSON(value.value()); + } else if (value.type() != QVariant::ByteArray) { return Error { "JSON data must be in QByteArray" }; } @@ -201,7 +212,7 @@ Result convertGeoJSON(const QVariant& value) { return Error { message.str() }; } - conversion::Result geoJSON = conversion::convertGeoJSON(d); + Result geoJSON = convertGeoJSON(d); if (!geoJSON) { return Error { geoJSON.error().message }; } -- cgit v1.2.1