120 const QVariant listCoords = inputMap.value(QStringLiteral(
"coordinates"));
122 QVariantMap singleLinestringMap;
123 for (
int i = 0; i < list.size(); ++i) {
124 singleLinestringMap.clear();
125 const QList <QGeoCoordinate> coordinatesList = importArrayOfPositions(list.at(i));
126 singleLinestringMap.insert(QStringLiteral(
"type"), QStringLiteral(
"LineString"));
127 parsedLineString.setPath(coordinatesList);
128 singleLinestringMap.insert(QStringLiteral(
"data"), QVariant::fromValue(parsedLineString));
129 returnedObject.append(QVariant::fromValue(singleLinestringMap));
131 return returnedObject;
138 QVariantMap singlePolygonMap;
139 const QVariant valueCoordinates = inputMap.value(QStringLiteral(
"coordinates"));
141 for (
int i = 0; i < list.size(); ++i) {
142 singlePolygonMap.clear();
143 const QList<QList<QGeoCoordinate>> coordinatesList = importArrayOfArrayOfPositions(list.at(i));
145 for (
int j = 0; j < coordinatesList.size(); ++j) {
147 singlePoly.setPerimeter(coordinatesList.at(j));
149 singlePoly.addHole(coordinatesList.at(j));
151 singlePolygonMap.insert(QStringLiteral(
"type"), QStringLiteral(
"Polygon"));
152 singlePolygonMap.insert(QStringLiteral(
"data"), QVariant::fromValue(singlePoly));
153 returnedObject.append(QVariant::fromValue(singlePolygonMap));
155 return returnedObject;
175 QVariantMap returnedObject;
176 QString geometryTypes[] = {
177 QStringLiteral(
"Point"),
178 QStringLiteral(
"MultiPoint"),
179 QStringLiteral(
"LineString"),
180 QStringLiteral(
"MultiLineString"),
181 QStringLiteral(
"Polygon"),
182 QStringLiteral(
"MultiPolygon"),
183 QStringLiteral(
"GeometryCollection")
194 for (
int i = 0; i<7; ++i) {
195 if (inputMap.value(QStringLiteral(
"type")).value<QString>() == geometryTypes[i]) {
198 returnedObject.insert(QStringLiteral(
"type"), QStringLiteral(
"Point"));
199 returnedObject.insert(QStringLiteral(
"data"), QVariant::fromValue(importPoint(inputMap)));
203 returnedObject.insert(QStringLiteral(
"type"), QStringLiteral(
"MultiPoint"));
204 returnedObject.insert(QStringLiteral(
"data"), QVariant::fromValue(importMultiPoint(inputMap)));
208 returnedObject.insert(QStringLiteral(
"type"), QStringLiteral(
"LineString"));
209 returnedObject.insert(QStringLiteral(
"data"), QVariant::fromValue(importLineString(inputMap)));
212 case MultiLineString: {
213 returnedObject.insert(QStringLiteral(
"type"), QStringLiteral(
"MultiLineString"));
214 returnedObject.insert(QStringLiteral(
"data"), QVariant::fromValue(importMultiLineString(inputMap)));
218 returnedObject.insert(QStringLiteral(
"type"), QStringLiteral(
"Polygon"));
219 returnedObject.insert(QStringLiteral(
"data"), QVariant::fromValue(importPolygon(inputMap)));
223 returnedObject.insert(QStringLiteral(
"type"), QStringLiteral(
"MultiPolygon"));
224 returnedObject.insert(QStringLiteral(
"data"), QVariant::fromValue(importMultiPolygon(inputMap)));
227 case GeometryCollection: {
228 returnedObject.insert(QStringLiteral(
"type"), QStringLiteral(
"GeometryCollection"));
229 returnedObject.insert(QStringLiteral(
"data"), QVariant::fromValue(importGeometryCollection(inputMap)));
237 return returnedObject;
244 for (
int i = 0; i < featuresList.size(); ++i) {
245 QVariantMap inputFeatureMap = featuresList.at(i).value<QVariantMap>();
246 QVariantMap singleFeatureMap = importGeometry(inputFeatureMap.value(QStringLiteral(
"geometry")).value<QVariantMap>());
247 const QVariantMap importedProperties = inputFeatureMap.value(QStringLiteral(
"properties")).value<QVariantMap>();
248 singleFeatureMap.insert(QStringLiteral(
"properties"), importedProperties);
249 if (inputFeatureMap.contains(QStringLiteral(
"id"))) {
250 QVariant importedId = inputFeatureMap.value(QStringLiteral(
"id")).value<QVariant>();
251 singleFeatureMap.insert(QStringLiteral(
"id"), importedId);
253 returnedObject.append(singleFeatureMap);
255 return returnedObject;
274 QJsonValue lineCoordinates;
275 QJsonValue multiPosition;
276 QJsonArray arrayPosition;
277 for (
int i = 0; i < obtainedCoordinatesList.size(); ++i) {
278 multiPosition = exportPosition(obtainedCoordinatesList.at(i));
279 arrayPosition.append(multiPosition);
281 lineCoordinates = arrayPosition;
282 return lineCoordinates;
309 QJsonObject parsedLineString;
310 QList <QGeoCoordinate> linestringPath = lineStringMap.value(QStringLiteral(
"data")).value<QGeoPath>().path();
311 parsedLineString.insert(QStringLiteral(
"type"), QJsonValue(QStringLiteral(
"LineString")));
312 parsedLineString.insert(QStringLiteral(
"coordinates"), exportArrayOfPositions(linestringPath));
313 return parsedLineString;
318 QVariant polygonVariant = polygonMap.value(QStringLiteral(
"data"));
319 QJsonObject parsedPolygon;
320 QJsonValue polyCoordinates;
321 QList<QList<QGeoCoordinate>> obtainedCoordinatesPoly;
322 QGeoPolygon parsedPoly = polygonVariant.value<QGeoPolygon>();
323 obtainedCoordinatesPoly << parsedPoly.perimeter();
324 if (parsedPoly.holesCount()!=0)
325 for (
int i = 0; i < parsedPoly.holesCount(); ++i) {
326 obtainedCoordinatesPoly << parsedPoly.holePath(i);
328 polyCoordinates = exportArrayOfArrayOfPositions(obtainedCoordinatesPoly);
329 parsedPolygon.insert(QStringLiteral(
"type"), QJsonValue(QStringLiteral(
"Polygon")));
330 parsedPolygon.insert(QStringLiteral(
"coordinates"), polyCoordinates);
331 return parsedPolygon;
336 QJsonObject parsedMultiPoint;
337 QList <QGeoCoordinate> obtainedCoordinatesMP;
339 for (
const QVariant &exCircleVariantMap: multiCircleVariantList) {
340 obtainedCoordinatesMP << exCircleVariantMap.value<QVariantMap>().value(QStringLiteral(
"data")).value<QGeoCircle>().center();
342 QJsonValue multiPosition = exportArrayOfPositions(obtainedCoordinatesMP);
343 parsedMultiPoint.insert(QStringLiteral(
"type"), QJsonValue(QStringLiteral(
"MultiPoint")));
344 parsedMultiPoint.insert(QStringLiteral(
"coordinates"), multiPosition);
345 return parsedMultiPoint;
350 QJsonObject parsedMultiLineString;
351 QList<QList<QGeoCoordinate>> extractedCoordinatesValue;
352 QVariant multiPathVariant = multiLineStringMap.value(QStringLiteral(
"data"));
354 for (
int i = 0; i < multiPathList.size(); ++i) {
355 extractedCoordinatesValue << multiPathList.at(i).value<QVariantMap>().value(QStringLiteral(
"data")).value<QGeoPath>().path();
357 QJsonValue exportedCoordinatesValue = exportArrayOfArrayOfPositions(extractedCoordinatesValue);
358 parsedMultiLineString.insert(QStringLiteral(
"type"), QJsonValue(QStringLiteral(
"MultiLineString")));
359 parsedMultiLineString.insert(QStringLiteral(
"coordinates"), exportedCoordinatesValue);
360 return parsedMultiLineString;
365 QJsonObject parsedMultiPolygon;
366 QJsonValue polyCoordinates;
367 QJsonArray parsedArrayPolygon;
368 QList<QList<QGeoCoordinate>> extractedCoordinatesValue;
369 QVariant multiPolygonVariant = multiPolygonMap.value(QStringLiteral(
"data"));
373 for (
int i = 0; i < multiPolygonList.size(); ++i) {
374 extractedCoordinatesValue << multiPolygonList.at(i).value<QVariantMap>().value(QStringLiteral(
"data")).value<QGeoPolygon>().perimeter();
375 polyHoles = multiPolygonList.at(i).value<QVariantMap>().value(QStringLiteral(
"data")).value<QGeoPolygon>().holesCount();
377 for (currentHole = 0 ; currentHole < polyHoles; currentHole++)
378 extractedCoordinatesValue << multiPolygonList.at(i).value<QVariantMap>().value(QStringLiteral(
"data")).value<QGeoPolygon>().holePath(currentHole);
379 polyCoordinates = exportArrayOfArrayOfPositions(extractedCoordinatesValue);
380 parsedArrayPolygon.append(polyCoordinates);
381 extractedCoordinatesValue.clear();
383 QJsonValue exportedCoordinatesNodeValue = parsedArrayPolygon;
384 parsedMultiPolygon.insert(QStringLiteral(
"type"), QJsonValue(QStringLiteral(
"MultiPolygon")));
385 parsedMultiPolygon.insert(QStringLiteral(
"coordinates"), exportedCoordinatesNodeValue);
386 return parsedMultiPolygon;
394 QJsonObject parsedGeometry;
395 QJsonValue valueGeometries;
396 QJsonArray parsedGeometries;
398 for (
int i = 0; i < geometriesList.size(); ++i) {
399 parsedGeometry = exportGeometry(geometriesList.at(i).value<QVariantMap>());
400 valueGeometries = parsedGeometry;
401 parsedGeometries.append(valueGeometries);
403 QJsonValue exportedGeometriesValue = parsedGeometries;
404 parsed.insert(QStringLiteral(
"type"), QJsonValue(QStringLiteral(
"GeometryCollection")));
405 parsed.insert(QStringLiteral(
"geometries"), exportedGeometriesValue);
411 QJsonObject exportedGeometry;
412 if (geometryMap.value(QStringLiteral(
"type")) == QStringLiteral(
"Point"))
413 exportedGeometry = exportPoint(geometryMap);
414 if (geometryMap.value(QStringLiteral(
"type")) == QStringLiteral(
"MultiPoint"))
415 exportedGeometry = exportMultiPoint(geometryMap);
416 if (geometryMap.value(QStringLiteral(
"type")) == QStringLiteral(
"LineString"))
417 exportedGeometry = exportLineString(geometryMap);
418 if (geometryMap.value(QStringLiteral(
"type")) == QStringLiteral(
"MultiLineString"))
419 exportedGeometry = exportMultiLineString(geometryMap);
420 if (geometryMap.value(QStringLiteral(
"type")) == QStringLiteral(
"Polygon"))
421 exportedGeometry = exportPolygon(geometryMap);
422 if (geometryMap.value(QStringLiteral(
"type")) == QStringLiteral(
"MultiPolygon"))
423 exportedGeometry = exportMultiPolygon(geometryMap);
424 if (geometryMap.value(QStringLiteral(
"type")) == QStringLiteral(
"GeometryCollection"))
425 exportedGeometry = exportGeometryCollection(geometryMap);
426 return exportedGeometry;
431 QJsonObject exportedFeature;
432 QJsonValue geometryNodeValue = QJsonValue(exportGeometry(featureMap));
433 QJsonValue propertiesNodeValue = featureMap.value(QStringLiteral(
"properties")).value<QVariant>().toJsonValue();
434 QJsonValue idNodeValue = featureMap.value(QStringLiteral(
"id")).value<QVariant>().toJsonValue();
435 exportedFeature.insert(QStringLiteral(
"type"), QJsonValue(QStringLiteral(
"Feature")));
436 exportedFeature.insert(QStringLiteral(
"geometry"), geometryNodeValue);
437 exportedFeature.insert(QStringLiteral(
"properties"), propertiesNodeValue);
438 if (!idNodeValue.isNull())
439 exportedFeature.insert(QStringLiteral(
"id"), idNodeValue);
440 return exportedFeature;
445 QJsonObject exportedFeatureCollection;
446 QJsonArray featureArray;
448 for (
int i = 0; i < featureList.size(); ++i) {
449 featureArray.append(QJsonValue(exportFeature(featureList.at(i).value<QVariantMap>())));
451 exportedFeatureCollection.insert(QStringLiteral(
"type"), QJsonValue(QStringLiteral(
"FeatureCollection")));
452 exportedFeatureCollection.insert(QStringLiteral(
"features"), QJsonValue(featureArray) );
453 return exportedFeatureCollection;
470 QVariantList returnedList;
471 QJsonObject object = geoJson.object();
472 QVariantMap rootGeoJsonObject = object.toVariantMap();
473 QString geoType[] = {
474 QStringLiteral(
"Point"),
475 QStringLiteral(
"MultiPoint"),
476 QStringLiteral(
"LineString"),
477 QStringLiteral(
"MultiLineString"),
478 QStringLiteral(
"Polygon"),
479 QStringLiteral(
"MultiPolygon"),
480 QStringLiteral(
"GeometryCollection"),
481 QStringLiteral(
"Feature"),
482 QStringLiteral(
"FeatureCollection")
495 QVariantMap parsedGeoJsonMap;
498 const QVariant keyVariant = rootGeoJsonObject.value(QStringLiteral(
"type"));
499 if (!keyVariant.isValid()) {
502 QString valueType = keyVariant.value<QString>();
505 for (
int i = 0; i < 9; ++i) {
506 if (valueType == geoType[i]) {
509 QGeoCircle circle = importPoint(rootGeoJsonObject);
510 QVariant dataNodeValue = QVariant::fromValue(circle);
511 parsedGeoJsonMap.insert(QStringLiteral(
"type"), QStringLiteral(
"Point"));
512 parsedGeoJsonMap.insert(QStringLiteral(
"data"), dataNodeValue);
516 QVariantList multiCircle = importMultiPoint(rootGeoJsonObject);
517 QVariant dataNodeValue = QVariant::fromValue(multiCircle);
518 QList <QGeoCircle> testlist;
519 parsedGeoJsonMap.insert(QStringLiteral(
"type"), QStringLiteral(
"MultiPoint"));
520 parsedGeoJsonMap.insert(QStringLiteral(
"data"), dataNodeValue);
524 QGeoPath lineString = importLineString(rootGeoJsonObject);
525 QVariant dataNodeValue = QVariant::fromValue(lineString);
526 parsedGeoJsonMap.insert(QStringLiteral(
"type"), QStringLiteral(
"LineString"));
527 parsedGeoJsonMap.insert(QStringLiteral(
"data"), dataNodeValue);
530 case MultiLineString: {
531 QVariantList multiLineString = importMultiLineString(rootGeoJsonObject);
532 QVariant dataNodeValue = QVariant::fromValue(multiLineString);
533 parsedGeoJsonMap.insert(QStringLiteral(
"type"), QStringLiteral(
"MultiLineString"));
534 parsedGeoJsonMap.insert(QStringLiteral(
"data"), dataNodeValue);
538 QGeoPolygon poly = importPolygon(rootGeoJsonObject);
539 QVariant dataNodeValue = QVariant::fromValue(poly);
540 parsedGeoJsonMap.insert(QStringLiteral(
"type"), QStringLiteral(
"Polygon"));
541 parsedGeoJsonMap.insert(QStringLiteral(
"data"), dataNodeValue);
545 QVariantList multiPoly = importMultiPolygon(rootGeoJsonObject);
546 QVariant dataNodeValue = QVariant::fromValue(multiPoly);
547 parsedGeoJsonMap.insert(QStringLiteral(
"type"), QStringLiteral(
"MultiPolygon"));
548 parsedGeoJsonMap.insert(QStringLiteral(
"data"), dataNodeValue);
552 case GeometryCollection: {
553 QVariantList multiGeo = importGeometryCollection(rootGeoJsonObject);
554 QVariant dataNodeValue = QVariant::fromValue(multiGeo);
555 parsedGeoJsonMap.insert(QStringLiteral(
"type"), QStringLiteral(
"GeometryCollection"));
556 parsedGeoJsonMap.insert(QStringLiteral(
"data"), dataNodeValue);
561 parsedGeoJsonMap = importGeometry(rootGeoJsonObject.value(QStringLiteral(
"geometry")).value<QVariantMap>());
562 QVariantMap importedProperties = rootGeoJsonObject.value(QStringLiteral(
"properties")).value<QVariantMap>();
563 parsedGeoJsonMap.insert(QStringLiteral(
"properties"), importedProperties);
564 if (rootGeoJsonObject.contains(QStringLiteral(
"id"))){
565 QVariant importedId = rootGeoJsonObject.value(QStringLiteral(
"id")).value<QVariant>();
566 parsedGeoJsonMap.insert(QStringLiteral(
"id"), importedId);
571 case FeatureCollection: {
572 QVariantList featCollection = importFeatureCollection(rootGeoJsonObject);
573 QVariant dataNodeValue = QVariant::fromValue(featCollection);
574 parsedGeoJsonMap.insert(QStringLiteral(
"type"), QStringLiteral(
"FeatureCollection"));
575 parsedGeoJsonMap.insert(QStringLiteral(
"data"), dataNodeValue);
581 QVariant bboxNodeValue = rootGeoJsonObject.value(QStringLiteral(
"bbox"));
582 if (bboxNodeValue.isValid()) {
583 parsedGeoJsonMap.insert(QStringLiteral(
"bbox"), bboxNodeValue);
585 returnedList.append(parsedGeoJsonMap);
605 if (geoData.isEmpty())
606 return QJsonDocument();
607 QVariantMap exportMap = geoData.at(0).value<QVariantMap>();
608 QJsonObject newObject;
609 QJsonDocument newDocument;
610 if (exportMap.contains(QStringLiteral(
"properties"))) {
611 newObject = exportFeature(exportMap);
613 if (exportMap.value(QStringLiteral(
"type")) == QStringLiteral(
"Point"))
614 newObject = exportPoint(exportMap);
615 if (exportMap.value(QStringLiteral(
"type")) == QStringLiteral(
"MultiPoint"))
616 newObject = exportMultiPoint(exportMap);
617 if (exportMap.value(QStringLiteral(
"type")) == QStringLiteral(
"LineString"))
618 newObject = exportLineString(exportMap);
619 if (exportMap.value(QStringLiteral(
"type")) == QStringLiteral(
"MultiLineString"))
620 newObject = exportMultiLineString(exportMap);
621 if (exportMap.value(QStringLiteral(
"type")) == QStringLiteral(
"Polygon"))
622 newObject = exportPolygon(exportMap);
623 if (exportMap.value(QStringLiteral(
"type")) == QStringLiteral(
"MultiPolygon"))
624 newObject = exportMultiPolygon(exportMap);
625 if (exportMap.value(QStringLiteral(
"type")) == QStringLiteral(
"GeometryCollection"))
626 newObject = exportGeometryCollection(exportMap);
627 if (exportMap.value(QStringLiteral(
"type")) == QStringLiteral(
"FeatureCollection"))
628 newObject = exportFeatureCollection(exportMap);
630 if (exportMap.contains((QStringLiteral(
"bbox")))) {
631 QJsonArray bboxArray;
632 QVariantList bboxList = exportMap.value(QStringLiteral(
"bbox")).value<QVariantList>();
633 for (
int i = 0; i < bboxList.size(); ++i) {
634 bboxArray.append(QJsonValue(bboxList.at(i).value<
double>()));
636 newObject.insert(QStringLiteral(
"bbox"), QJsonValue(bboxArray));
638 newDocument.setObject(newObject);
684 static constexpr QStringView sTab(u" ");
688 for (
int i = 0; i< tabs; i++) {
691 if (v.typeId() == QMetaType::QVariantList) {
692 stream << sTabs <<
"[\n";
693 const QVariantList &l = v.toList();
694 for (
int i = 0; i < l.size(); ++i)
695 stream << printQvariant(l.at(i), tabs + 1);
696 stream << sTabs <<
"]\n";
697 }
else if (v.typeId() == QMetaType::QVariantMap) {
698 stream << sTabs <<
"{\n";
699 const QVariantList &l = v.toList();
700 const QVariantMap &map = v.toMap();
703 if (!map.keys().isEmpty()) {
705 if (map.contains(QStringLiteral(
"type"))) {
706 stream << sTabs << sTab << QStringLiteral(
"type") <<
" : "
707 << printQvariant(map[QStringLiteral(
"type")], tabs + 1).remove(QRegularExpression(QStringLiteral(
"^[ ]*")));
709 for (QVariantMap::const_iterator iter = map.begin(); iter != map.end(); ++iter) {
710 if (iter.key() == QStringLiteral(
"type"))
712 stream << sTabs << sTab << iter.key() <<
" : " << printQvariant(iter.value(), tabs + 1).remove(QRegularExpression(QStringLiteral(
"^[ ]*")));
715 for (
int i = 0; i < l.size(); ++i)
716 stream << printQvariant(l.at(i), tabs + 1);
717 stream << sTabs <<
"}\n";
720 QGeoShape workigGeometry;
721 if ( v.canConvert<QGeoShape>()) {
722 workigGeometry = v.value<QGeoShape>();
723 if (workigGeometry.type() == QGeoShape::CircleType) {
725 stream << circle<<
"\n";
726 }
else if (workigGeometry.type() == QGeoShape::PathType) {
727 QGeoPath path = v.value<QGeoPath>();
728 stream << path<<
"\n";
729 }
else if (workigGeometry.type() == QGeoShape::PolygonType) {
731 stream << polygon<<
"\n";
737 stream << v.toString() <<
"\n";