[Qt] Moved GeoJSON-related conversion functions to qt_geojson.hpp

This commit is contained in:
Bruno de Oliveira Abinader
2017-02-07 14:58:55 +02:00
parent 8b9a511357
commit 59d279b689
3 changed files with 68 additions and 61 deletions

View File

@@ -836,68 +836,26 @@ void QMapboxGL::setTransitionOptions(qint64 duration, qint64 delay) {
d_ptr->mapObj->setTransitionOptions(mbgl::style::TransitionOptions{ convert(duration), convert(delay) });
}
mbgl::ShapeAnnotationGeometry asMapboxGLGeometry(const QMapbox::ShapeAnnotationGeometry &geometry) {
auto asMapboxGLLineString = [&](const QMapbox::Coordinates &lineString) {
mbgl::LineString<double> mbglLineString;
mbglLineString.reserve(lineString.size());
for (const auto &coordinate : lineString) {
mbglLineString.emplace_back(mbgl::Point<double> { coordinate.second, coordinate.first });
}
return mbglLineString;
};
auto asMapboxGLMultiLineString = [&](const QMapbox::CoordinatesCollection &multiLineString) {
mbgl::MultiLineString<double> mbglMultiLineString;
mbglMultiLineString.reserve(multiLineString.size());
for (const auto &lineString : multiLineString) {
mbglMultiLineString.emplace_back(std::forward<mbgl::LineString<double>>(asMapboxGLLineString(lineString)));
}
return mbglMultiLineString;
};
auto asMapboxGLPolygon = [&](const QMapbox::CoordinatesCollection &polygon) {
mbgl::Polygon<double> mbglPolygon;
mbglPolygon.reserve(polygon.size());
for (const auto &linearRing : polygon) {
mbgl::LinearRing<double> mbglLinearRing;
mbglLinearRing.reserve(linearRing.size());
for (const auto &coordinate: linearRing) {
mbglLinearRing.emplace_back(mbgl::Point<double> { coordinate.second, coordinate.first });
}
mbglPolygon.emplace_back(std::move(mbglLinearRing));
}
return mbglPolygon;
};
auto asMapboxGLMultiPolygon = [&](const QMapbox::CoordinatesCollections &multiPolygon) {
mbgl::MultiPolygon<double> mbglMultiPolygon;
mbglMultiPolygon.reserve(multiPolygon.size());
for (const auto &polygon : multiPolygon) {
mbglMultiPolygon.emplace_back(std::forward<mbgl::Polygon<double>>(asMapboxGLPolygon(polygon)));
}
return mbglMultiPolygon;
};
mbgl::ShapeAnnotationGeometry result;
switch (geometry.type) {
case QMapbox::ShapeAnnotationGeometry::LineStringType:
result = { asMapboxGLLineString(geometry.geometry.first().first()) };
break;
case QMapbox::ShapeAnnotationGeometry::PolygonType:
result = { asMapboxGLPolygon(geometry.geometry.first()) };
break;
case QMapbox::ShapeAnnotationGeometry::MultiLineStringType:
result = { asMapboxGLMultiLineString(geometry.geometry.first()) };
break;
case QMapbox::ShapeAnnotationGeometry::MultiPolygonType:
result = { asMapboxGLMultiPolygon(geometry.geometry) };
break;
}
return result;
}
mbgl::Annotation asMapboxGLAnnotation(const QMapbox::Annotation & annotation) {
auto asMapboxGLGeometry = [](const QMapbox::ShapeAnnotationGeometry &geometry) {
mbgl::ShapeAnnotationGeometry result;
switch (geometry.type) {
case QMapbox::ShapeAnnotationGeometry::LineStringType:
result = { asMapboxGLLineString(geometry.geometry.first().first()) };
break;
case QMapbox::ShapeAnnotationGeometry::PolygonType:
result = { asMapboxGLPolygon(geometry.geometry.first()) };
break;
case QMapbox::ShapeAnnotationGeometry::MultiLineStringType:
result = { asMapboxGLMultiLineString(geometry.geometry.first()) };
break;
case QMapbox::ShapeAnnotationGeometry::MultiPolygonType:
result = { asMapboxGLMultiPolygon(geometry.geometry) };
break;
}
return result;
};
if (annotation.canConvert<QMapbox::SymbolAnnotation>()) {
QMapbox::SymbolAnnotation symbolAnnotation = annotation.value<QMapbox::SymbolAnnotation>();
QMapbox::Coordinate& pair = symbolAnnotation.geometry;

View File

@@ -4,6 +4,8 @@
#include <mbgl/util/feature.hpp>
#include <mbgl/util/optional.hpp>
#include <QMapbox>
#include <QColor>
#include <QVariant>

View File

@@ -4,12 +4,59 @@
#include <mbgl/style/conversion/geojson.hpp>
#include <mbgl/util/rapidjson.hpp>
#include <QMapbox>
#include <QByteArray>
#include <QVariant>
#include <sstream>
#include <string>
namespace QMapbox {
mbgl::LineString<double> asMapboxGLLineString(const QMapbox::Coordinates &lineString) {
mbgl::LineString<double> mbglLineString;
mbglLineString.reserve(lineString.size());
for (const auto &coordinate : lineString) {
mbglLineString.emplace_back(mbgl::Point<double> { coordinate.second, coordinate.first });
}
return mbglLineString;
};
mbgl::MultiLineString<double> asMapboxGLMultiLineString(const QMapbox::CoordinatesCollection &multiLineString) {
mbgl::MultiLineString<double> mbglMultiLineString;
mbglMultiLineString.reserve(multiLineString.size());
for (const auto &lineString : multiLineString) {
mbglMultiLineString.emplace_back(std::forward<mbgl::LineString<double>>(asMapboxGLLineString(lineString)));
}
return mbglMultiLineString;
};
mbgl::Polygon<double> asMapboxGLPolygon(const QMapbox::CoordinatesCollection &polygon) {
mbgl::Polygon<double> mbglPolygon;
mbglPolygon.reserve(polygon.size());
for (const auto &linearRing : polygon) {
mbgl::LinearRing<double> mbglLinearRing;
mbglLinearRing.reserve(linearRing.size());
for (const auto &coordinate: linearRing) {
mbglLinearRing.emplace_back(mbgl::Point<double> { coordinate.second, coordinate.first });
}
mbglPolygon.emplace_back(std::move(mbglLinearRing));
}
return mbglPolygon;
};
mbgl::MultiPolygon<double> asMapboxGLMultiPolygon(const QMapbox::CoordinatesCollections &multiPolygon) {
mbgl::MultiPolygon<double> mbglMultiPolygon;
mbglMultiPolygon.reserve(multiPolygon.size());
for (const auto &polygon : multiPolygon) {
mbglMultiPolygon.emplace_back(std::forward<mbgl::Polygon<double>>(asMapboxGLPolygon(polygon)));
}
return mbglMultiPolygon;
};
} // namespace QMapbox
namespace mbgl {
namespace style {
namespace conversion {