121 const QVariant listCoords = inputMap.value(QStringLiteral(
"coordinates"));
123 QVariantMap singleLinestringMap;
124 for (
int i = 0; i < list.size(); ++i) {
125 singleLinestringMap.clear();
126 const QList <QGeoCoordinate> coordinatesList = importArrayOfPositions(list.at(i));
127 singleLinestringMap.insert(QStringLiteral(
"type"), QStringLiteral(
"LineString"));
128 parsedLineString.setPath(coordinatesList);
129 singleLinestringMap.insert(QStringLiteral(
"data"), QVariant::fromValue(parsedLineString));
130 returnedObject.append(QVariant::fromValue(singleLinestringMap));
132 return returnedObject;
139 QVariantMap singlePolygonMap;
140 const QVariant valueCoordinates = inputMap.value(QStringLiteral(
"coordinates"));
142 for (
int i = 0; i < list.size(); ++i) {
143 singlePolygonMap.clear();
144 const QList<QList<QGeoCoordinate>> coordinatesList = importArrayOfArrayOfPositions(list.at(i));
146 for (
int j = 0; j < coordinatesList.size(); ++j) {
148 singlePoly.setPerimeter(coordinatesList.at(j));
150 singlePoly.addHole(coordinatesList.at(j));
152 singlePolygonMap.insert(QStringLiteral(
"type"), QStringLiteral(
"Polygon"));
153 singlePolygonMap.insert(QStringLiteral(
"data"), QVariant::fromValue(singlePoly));
154 returnedObject.append(QVariant::fromValue(singlePolygonMap));
156 return returnedObject;
176 QVariantMap returnedObject;
177 QString geometryTypes[] = {
178 QStringLiteral(
"Point"),
179 QStringLiteral(
"MultiPoint"),
180 QStringLiteral(
"LineString"),
181 QStringLiteral(
"MultiLineString"),
182 QStringLiteral(
"Polygon"),
183 QStringLiteral(
"MultiPolygon"),
184 QStringLiteral(
"GeometryCollection")
195 for (
int i = 0; i<7; ++i) {
196 if (inputMap.value(QStringLiteral(
"type")).value<QString>() == geometryTypes[i]) {
199 returnedObject.insert(QStringLiteral(
"type"), QStringLiteral(
"Point"));
200 returnedObject.insert(QStringLiteral(
"data"), QVariant::fromValue(importPoint(inputMap)));
204 returnedObject.insert(QStringLiteral(
"type"), QStringLiteral(
"MultiPoint"));
205 returnedObject.insert(QStringLiteral(
"data"), QVariant::fromValue(importMultiPoint(inputMap)));
209 returnedObject.insert(QStringLiteral(
"type"), QStringLiteral(
"LineString"));
210 returnedObject.insert(QStringLiteral(
"data"), QVariant::fromValue(importLineString(inputMap)));
213 case MultiLineString: {
214 returnedObject.insert(QStringLiteral(
"type"), QStringLiteral(
"MultiLineString"));
215 returnedObject.insert(QStringLiteral(
"data"), QVariant::fromValue(importMultiLineString(inputMap)));
219 returnedObject.insert(QStringLiteral(
"type"), QStringLiteral(
"Polygon"));
220 returnedObject.insert(QStringLiteral(
"data"), QVariant::fromValue(importPolygon(inputMap)));
224 returnedObject.insert(QStringLiteral(
"type"), QStringLiteral(
"MultiPolygon"));
225 returnedObject.insert(QStringLiteral(
"data"), QVariant::fromValue(importMultiPolygon(inputMap)));
228 case GeometryCollection: {
229 returnedObject.insert(QStringLiteral(
"type"), QStringLiteral(
"GeometryCollection"));
230 returnedObject.insert(QStringLiteral(
"data"), QVariant::fromValue(importGeometryCollection(inputMap)));
238 return returnedObject;
245 for (
int i = 0; i < featuresList.size(); ++i) {
246 QVariantMap inputFeatureMap = featuresList.at(i).value<QVariantMap>();
247 QVariantMap singleFeatureMap = importGeometry(inputFeatureMap.value(QStringLiteral(
"geometry")).value<QVariantMap>());
248 const QVariantMap importedProperties = inputFeatureMap.value(QStringLiteral(
"properties")).value<QVariantMap>();
249 singleFeatureMap.insert(QStringLiteral(
"properties"), importedProperties);
250 if (inputFeatureMap.contains(QStringLiteral(
"id"))) {
251 QVariant importedId = inputFeatureMap.value(QStringLiteral(
"id")).value<QVariant>();
252 singleFeatureMap.insert(QStringLiteral(
"id"), importedId);
254 returnedObject.append(singleFeatureMap);
256 return returnedObject;
275 QJsonValue lineCoordinates;
276 QJsonValue multiPosition;
277 QJsonArray arrayPosition;
278 for (
int i = 0; i < obtainedCoordinatesList.size(); ++i) {
279 multiPosition = exportPosition(obtainedCoordinatesList.at(i));
280 arrayPosition.append(multiPosition);
282 lineCoordinates = arrayPosition;
283 return lineCoordinates;
310 QJsonObject parsedLineString;
311 QList <QGeoCoordinate> linestringPath = lineStringMap.value(QStringLiteral(
"data")).value<QGeoPath>().path();
312 parsedLineString.insert(QStringLiteral(
"type"), QJsonValue(QStringLiteral(
"LineString")));
313 parsedLineString.insert(QStringLiteral(
"coordinates"), exportArrayOfPositions(linestringPath));
314 return parsedLineString;
319 QVariant polygonVariant = polygonMap.value(QStringLiteral(
"data"));
320 QJsonObject parsedPolygon;
321 QJsonValue polyCoordinates;
322 QList<QList<QGeoCoordinate>> obtainedCoordinatesPoly;
323 QGeoPolygon parsedPoly = polygonVariant.value<QGeoPolygon>();
324 obtainedCoordinatesPoly << parsedPoly.perimeter();
325 if (parsedPoly.holesCount()!=0)
326 for (
int i = 0; i < parsedPoly.holesCount(); ++i) {
327 obtainedCoordinatesPoly << parsedPoly.holePath(i);
329 polyCoordinates = exportArrayOfArrayOfPositions(obtainedCoordinatesPoly);
330 parsedPolygon.insert(QStringLiteral(
"type"), QJsonValue(QStringLiteral(
"Polygon")));
331 parsedPolygon.insert(QStringLiteral(
"coordinates"), polyCoordinates);
332 return parsedPolygon;
337 QJsonObject parsedMultiPoint;
338 QList <QGeoCoordinate> obtainedCoordinatesMP;
340 for (
const QVariant &exCircleVariantMap: multiCircleVariantList) {
341 obtainedCoordinatesMP << exCircleVariantMap.value<QVariantMap>().value(QStringLiteral(
"data")).value<QGeoCircle>().center();
343 QJsonValue multiPosition = exportArrayOfPositions(obtainedCoordinatesMP);
344 parsedMultiPoint.insert(QStringLiteral(
"type"), QJsonValue(QStringLiteral(
"MultiPoint")));
345 parsedMultiPoint.insert(QStringLiteral(
"coordinates"), multiPosition);
346 return parsedMultiPoint;
351 QJsonObject parsedMultiLineString;
352 QList<QList<QGeoCoordinate>> extractedCoordinatesValue;
353 QVariant multiPathVariant = multiLineStringMap.value(QStringLiteral(
"data"));
355 for (
int i = 0; i < multiPathList.size(); ++i) {
356 extractedCoordinatesValue << multiPathList.at(i).value<QVariantMap>().value(QStringLiteral(
"data")).value<QGeoPath>().path();
358 QJsonValue exportedCoordinatesValue = exportArrayOfArrayOfPositions(extractedCoordinatesValue);
359 parsedMultiLineString.insert(QStringLiteral(
"type"), QJsonValue(QStringLiteral(
"MultiLineString")));
360 parsedMultiLineString.insert(QStringLiteral(
"coordinates"), exportedCoordinatesValue);
361 return parsedMultiLineString;
366 QJsonObject parsedMultiPolygon;
367 QJsonValue polyCoordinates;
368 QJsonArray parsedArrayPolygon;
369 QList<QList<QGeoCoordinate>> extractedCoordinatesValue;
370 QVariant multiPolygonVariant = multiPolygonMap.value(QStringLiteral(
"data"));
374 for (
int i = 0; i < multiPolygonList.size(); ++i) {
375 extractedCoordinatesValue << multiPolygonList.at(i).value<QVariantMap>().value(QStringLiteral(
"data")).value<QGeoPolygon>().perimeter();
376 polyHoles = multiPolygonList.at(i).value<QVariantMap>().value(QStringLiteral(
"data")).value<QGeoPolygon>().holesCount();
378 for (currentHole = 0 ; currentHole < polyHoles; currentHole++)
379 extractedCoordinatesValue << multiPolygonList.at(i).value<QVariantMap>().value(QStringLiteral(
"data")).value<QGeoPolygon>().holePath(currentHole);
380 polyCoordinates = exportArrayOfArrayOfPositions(extractedCoordinatesValue);
381 parsedArrayPolygon.append(polyCoordinates);
382 extractedCoordinatesValue.clear();
384 QJsonValue exportedCoordinatesNodeValue = parsedArrayPolygon;
385 parsedMultiPolygon.insert(QStringLiteral(
"type"), QJsonValue(QStringLiteral(
"MultiPolygon")));
386 parsedMultiPolygon.insert(QStringLiteral(
"coordinates"), exportedCoordinatesNodeValue);
387 return parsedMultiPolygon;
395 QJsonObject parsedGeometry;
396 QJsonValue valueGeometries;
397 QJsonArray parsedGeometries;
399 for (
int i = 0; i < geometriesList.size(); ++i) {
400 parsedGeometry = exportGeometry(geometriesList.at(i).value<QVariantMap>());
401 valueGeometries = parsedGeometry;
402 parsedGeometries.append(valueGeometries);
404 QJsonValue exportedGeometriesValue = parsedGeometries;
405 parsed.insert(QStringLiteral(
"type"), QJsonValue(QStringLiteral(
"GeometryCollection")));
406 parsed.insert(QStringLiteral(
"geometries"), exportedGeometriesValue);
412 QJsonObject exportedGeometry;
413 if (geometryMap.value(QStringLiteral(
"type")) == QStringLiteral(
"Point"))
414 exportedGeometry = exportPoint(geometryMap);
415 if (geometryMap.value(QStringLiteral(
"type")) == QStringLiteral(
"MultiPoint"))
416 exportedGeometry = exportMultiPoint(geometryMap);
417 if (geometryMap.value(QStringLiteral(
"type")) == QStringLiteral(
"LineString"))
418 exportedGeometry = exportLineString(geometryMap);
419 if (geometryMap.value(QStringLiteral(
"type")) == QStringLiteral(
"MultiLineString"))
420 exportedGeometry = exportMultiLineString(geometryMap);
421 if (geometryMap.value(QStringLiteral(
"type")) == QStringLiteral(
"Polygon"))
422 exportedGeometry = exportPolygon(geometryMap);
423 if (geometryMap.value(QStringLiteral(
"type")) == QStringLiteral(
"MultiPolygon"))
424 exportedGeometry = exportMultiPolygon(geometryMap);
425 if (geometryMap.value(QStringLiteral(
"type")) == QStringLiteral(
"GeometryCollection"))
426 exportedGeometry = exportGeometryCollection(geometryMap);
427 return exportedGeometry;
432 QJsonObject exportedFeature;
433 QJsonValue geometryNodeValue = QJsonValue(exportGeometry(featureMap));
434 QJsonValue propertiesNodeValue = featureMap.value(QStringLiteral(
"properties")).value<QVariant>().toJsonValue();
435 QJsonValue idNodeValue = featureMap.value(QStringLiteral(
"id")).value<QVariant>().toJsonValue();
436 exportedFeature.insert(QStringLiteral(
"type"), QJsonValue(QStringLiteral(
"Feature")));
437 exportedFeature.insert(QStringLiteral(
"geometry"), geometryNodeValue);
438 exportedFeature.insert(QStringLiteral(
"properties"), propertiesNodeValue);
439 if (!idNodeValue.isNull())
440 exportedFeature.insert(QStringLiteral(
"id"), idNodeValue);
441 return exportedFeature;
446 QJsonObject exportedFeatureCollection;
447 QJsonArray featureArray;
449 for (
int i = 0; i < featureList.size(); ++i) {
450 featureArray.append(QJsonValue(exportFeature(featureList.at(i).value<QVariantMap>())));
452 exportedFeatureCollection.insert(QStringLiteral(
"type"), QJsonValue(QStringLiteral(
"FeatureCollection")));
453 exportedFeatureCollection.insert(QStringLiteral(
"features"), QJsonValue(featureArray) );
454 return exportedFeatureCollection;
471 QVariantList returnedList;
472 QJsonObject object = geoJson.object();
473 QVariantMap rootGeoJsonObject = object.toVariantMap();
474 QString geoType[] = {
475 QStringLiteral(
"Point"),
476 QStringLiteral(
"MultiPoint"),
477 QStringLiteral(
"LineString"),
478 QStringLiteral(
"MultiLineString"),
479 QStringLiteral(
"Polygon"),
480 QStringLiteral(
"MultiPolygon"),
481 QStringLiteral(
"GeometryCollection"),
482 QStringLiteral(
"Feature"),
483 QStringLiteral(
"FeatureCollection")
496 QVariantMap parsedGeoJsonMap;
499 const QVariant keyVariant = rootGeoJsonObject.value(QStringLiteral(
"type"));
500 if (!keyVariant.isValid()) {
503 QString valueType = keyVariant.value<QString>();
506 for (
int i = 0; i < 9; ++i) {
507 if (valueType == geoType[i]) {
510 QGeoCircle circle = importPoint(rootGeoJsonObject);
511 QVariant dataNodeValue = QVariant::fromValue(circle);
512 parsedGeoJsonMap.insert(QStringLiteral(
"type"), QStringLiteral(
"Point"));
513 parsedGeoJsonMap.insert(QStringLiteral(
"data"), dataNodeValue);
517 QVariantList multiCircle = importMultiPoint(rootGeoJsonObject);
518 QVariant dataNodeValue = QVariant::fromValue(multiCircle);
519 QList <QGeoCircle> testlist;
520 parsedGeoJsonMap.insert(QStringLiteral(
"type"), QStringLiteral(
"MultiPoint"));
521 parsedGeoJsonMap.insert(QStringLiteral(
"data"), dataNodeValue);
525 QGeoPath lineString = importLineString(rootGeoJsonObject);
526 QVariant dataNodeValue = QVariant::fromValue(lineString);
527 parsedGeoJsonMap.insert(QStringLiteral(
"type"), QStringLiteral(
"LineString"));
528 parsedGeoJsonMap.insert(QStringLiteral(
"data"), dataNodeValue);
531 case MultiLineString: {
532 QVariantList multiLineString = importMultiLineString(rootGeoJsonObject);
533 QVariant dataNodeValue = QVariant::fromValue(multiLineString);
534 parsedGeoJsonMap.insert(QStringLiteral(
"type"), QStringLiteral(
"MultiLineString"));
535 parsedGeoJsonMap.insert(QStringLiteral(
"data"), dataNodeValue);
539 QGeoPolygon poly = importPolygon(rootGeoJsonObject);
540 QVariant dataNodeValue = QVariant::fromValue(poly);
541 parsedGeoJsonMap.insert(QStringLiteral(
"type"), QStringLiteral(
"Polygon"));
542 parsedGeoJsonMap.insert(QStringLiteral(
"data"), dataNodeValue);
546 QVariantList multiPoly = importMultiPolygon(rootGeoJsonObject);
547 QVariant dataNodeValue = QVariant::fromValue(multiPoly);
548 parsedGeoJsonMap.insert(QStringLiteral(
"type"), QStringLiteral(
"MultiPolygon"));
549 parsedGeoJsonMap.insert(QStringLiteral(
"data"), dataNodeValue);
553 case GeometryCollection: {
554 QVariantList multiGeo = importGeometryCollection(rootGeoJsonObject);
555 QVariant dataNodeValue = QVariant::fromValue(multiGeo);
556 parsedGeoJsonMap.insert(QStringLiteral(
"type"), QStringLiteral(
"GeometryCollection"));
557 parsedGeoJsonMap.insert(QStringLiteral(
"data"), dataNodeValue);
562 parsedGeoJsonMap = importGeometry(rootGeoJsonObject.value(QStringLiteral(
"geometry")).value<QVariantMap>());
563 QVariantMap importedProperties = rootGeoJsonObject.value(QStringLiteral(
"properties")).value<QVariantMap>();
564 parsedGeoJsonMap.insert(QStringLiteral(
"properties"), importedProperties);
565 if (rootGeoJsonObject.contains(QStringLiteral(
"id"))){
566 QVariant importedId = rootGeoJsonObject.value(QStringLiteral(
"id")).value<QVariant>();
567 parsedGeoJsonMap.insert(QStringLiteral(
"id"), importedId);
572 case FeatureCollection: {
573 QVariantList featCollection = importFeatureCollection(rootGeoJsonObject);
574 QVariant dataNodeValue = QVariant::fromValue(featCollection);
575 parsedGeoJsonMap.insert(QStringLiteral(
"type"), QStringLiteral(
"FeatureCollection"));
576 parsedGeoJsonMap.insert(QStringLiteral(
"data"), dataNodeValue);
582 QVariant bboxNodeValue = rootGeoJsonObject.value(QStringLiteral(
"bbox"));
583 if (bboxNodeValue.isValid()) {
584 parsedGeoJsonMap.insert(QStringLiteral(
"bbox"), bboxNodeValue);
586 returnedList.append(parsedGeoJsonMap);
606 if (geoData.isEmpty())
607 return QJsonDocument();
608 QVariantMap exportMap = geoData.at(0).value<QVariantMap>();
609 QJsonObject newObject;
610 QJsonDocument newDocument;
611 if (exportMap.contains(QStringLiteral(
"properties"))) {
612 newObject = exportFeature(exportMap);
614 if (exportMap.value(QStringLiteral(
"type")) == QStringLiteral(
"Point"))
615 newObject = exportPoint(exportMap);
616 if (exportMap.value(QStringLiteral(
"type")) == QStringLiteral(
"MultiPoint"))
617 newObject = exportMultiPoint(exportMap);
618 if (exportMap.value(QStringLiteral(
"type")) == QStringLiteral(
"LineString"))
619 newObject = exportLineString(exportMap);
620 if (exportMap.value(QStringLiteral(
"type")) == QStringLiteral(
"MultiLineString"))
621 newObject = exportMultiLineString(exportMap);
622 if (exportMap.value(QStringLiteral(
"type")) == QStringLiteral(
"Polygon"))
623 newObject = exportPolygon(exportMap);
624 if (exportMap.value(QStringLiteral(
"type")) == QStringLiteral(
"MultiPolygon"))
625 newObject = exportMultiPolygon(exportMap);
626 if (exportMap.value(QStringLiteral(
"type")) == QStringLiteral(
"GeometryCollection"))
627 newObject = exportGeometryCollection(exportMap);
628 if (exportMap.value(QStringLiteral(
"type")) == QStringLiteral(
"FeatureCollection"))
629 newObject = exportFeatureCollection(exportMap);
631 if (exportMap.contains((QStringLiteral(
"bbox")))) {
632 QJsonArray bboxArray;
633 QVariantList bboxList = exportMap.value(QStringLiteral(
"bbox")).value<QVariantList>();
634 for (
int i = 0; i < bboxList.size(); ++i) {
635 bboxArray.append(QJsonValue(bboxList.at(i).value<
double>()));
637 newObject.insert(QStringLiteral(
"bbox"), QJsonValue(bboxArray));
639 newDocument.setObject(newObject);
685 static constexpr QStringView sTab(u" ");
689 for (
int i = 0; i< tabs; i++) {
692 if (v.typeId() == QMetaType::QVariantList) {
693 stream << sTabs <<
"[\n";
694 const QVariantList &l = v.toList();
695 for (
int i = 0; i < l.size(); ++i)
696 stream << printQvariant(l.at(i), tabs + 1);
697 stream << sTabs <<
"]\n";
698 }
else if (v.typeId() == QMetaType::QVariantMap) {
699 stream << sTabs <<
"{\n";
700 const QVariantList &l = v.toList();
701 const QVariantMap &map = v.toMap();
704 if (!map.keys().isEmpty()) {
706 if (map.contains(QStringLiteral(
"type"))) {
707 stream << sTabs << sTab << QStringLiteral(
"type") <<
" : "
708 << printQvariant(map[QStringLiteral(
"type")], tabs + 1).remove(QRegularExpression(QStringLiteral(
"^[ ]*")));
710 for (QVariantMap::const_iterator iter = map.begin(); iter != map.end(); ++iter) {
711 if (iter.key() == QStringLiteral(
"type"))
713 stream << sTabs << sTab << iter.key() <<
" : " << printQvariant(iter.value(), tabs + 1).remove(QRegularExpression(QStringLiteral(
"^[ ]*")));
716 for (
int i = 0; i < l.size(); ++i)
717 stream << printQvariant(l.at(i), tabs + 1);
718 stream << sTabs <<
"}\n";
721 QGeoShape workigGeometry;
722 if ( v.canConvert<QGeoShape>()) {
723 workigGeometry = v.value<QGeoShape>();
724 if (workigGeometry.type() == QGeoShape::CircleType) {
726 stream << circle<<
"\n";
727 }
else if (workigGeometry.type() == QGeoShape::PathType) {
728 QGeoPath path = v.value<QGeoPath>();
729 stream << path<<
"\n";
730 }
else if (workigGeometry.type() == QGeoShape::PolygonType) {
732 stream << polygon<<
"\n";
738 stream << v.toString() <<
"\n";