[Qt] Moved GeoJSON-related conversion functions to qt_geojson.hpp
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
#include <mbgl/util/feature.hpp>
|
||||
#include <mbgl/util/optional.hpp>
|
||||
|
||||
#include <QMapbox>
|
||||
|
||||
#include <QColor>
|
||||
#include <QVariant>
|
||||
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user