|
33 | 33 | #include "qgslinesymbollayer.h" |
34 | 34 | #include "qgsfillsymbollayer.h" |
35 | 35 | #include "qgsmarkersymbollayer.h" |
| 36 | +#include "qgsrenderer.h" |
| 37 | +#include "qgssinglesymbolrenderer.h" |
| 38 | +#include "qgscategorizedsymbolrenderer.h" |
36 | 39 | #include <QEventLoop> |
37 | 40 | #include <QNetworkRequest> |
38 | 41 | #include <QNetworkReply> |
@@ -641,6 +644,65 @@ std::unique_ptr<QgsMarkerSymbol> QgsArcGisRestUtils::parseEsriMarkerSymbolJson( |
641 | 644 | return symbol; |
642 | 645 | } |
643 | 646 |
|
| 647 | +QgsFeatureRenderer *QgsArcGisRestUtils::parseEsriRenderer( const QVariantMap &rendererData ) |
| 648 | +{ |
| 649 | + const QString type = rendererData.value( QStringLiteral( "type" ) ).toString(); |
| 650 | + if ( type == QLatin1String( "simple" ) ) |
| 651 | + { |
| 652 | + const QVariantMap symbolProps = rendererData.value( QStringLiteral( "symbol" ) ).toMap(); |
| 653 | + std::unique_ptr< QgsSymbol > symbol = parseEsriSymbolJson( symbolProps ); |
| 654 | + if ( symbol ) |
| 655 | + return new QgsSingleSymbolRenderer( symbol.release() ); |
| 656 | + else |
| 657 | + return nullptr; |
| 658 | + } |
| 659 | + else if ( type == QLatin1String( "uniqueValue" ) ) |
| 660 | + { |
| 661 | + const QString attribute = rendererData.value( QStringLiteral( "field1" ) ).toString(); |
| 662 | + // TODO - handle field2, field3 |
| 663 | + const QVariantList categories = rendererData.value( QStringLiteral( "uniqueValueInfos" ) ).toList(); |
| 664 | + QgsCategoryList categoryList; |
| 665 | + for ( const QVariant &category : categories ) |
| 666 | + { |
| 667 | + const QVariantMap categoryData = category.toMap(); |
| 668 | + const QString value = categoryData.value( QStringLiteral( "value" ) ).toString(); |
| 669 | + const QString label = categoryData.value( QStringLiteral( "label" ) ).toString(); |
| 670 | + std::unique_ptr< QgsSymbol > symbol = QgsArcGisRestUtils::parseEsriSymbolJson( categoryData.value( QStringLiteral( "symbol" ) ).toMap() ); |
| 671 | + if ( symbol ) |
| 672 | + { |
| 673 | + categoryList.append( QgsRendererCategory( value, symbol.release(), label ) ); |
| 674 | + } |
| 675 | + } |
| 676 | + |
| 677 | + std::unique_ptr< QgsSymbol > defaultSymbol = parseEsriSymbolJson( rendererData.value( QStringLiteral( "defaultSymbol" ) ).toMap() ); |
| 678 | + if ( defaultSymbol ) |
| 679 | + { |
| 680 | + categoryList.append( QgsRendererCategory( QVariant(), defaultSymbol.release(), rendererData.value( QStringLiteral( "defaultLabel" ) ).toString() ) ); |
| 681 | + } |
| 682 | + |
| 683 | + if ( categoryList.empty() ) |
| 684 | + return nullptr; |
| 685 | + |
| 686 | + return new QgsCategorizedSymbolRenderer( attribute, categoryList ); |
| 687 | + } |
| 688 | + else if ( type == QLatin1String( "classBreaks" ) ) |
| 689 | + { |
| 690 | + // currently unsupported |
| 691 | + return nullptr; |
| 692 | + } |
| 693 | + else if ( type == QLatin1String( "heatmap" ) ) |
| 694 | + { |
| 695 | + // currently unsupported |
| 696 | + return nullptr; |
| 697 | + } |
| 698 | + else if ( type == QLatin1String( "vectorField" ) ) |
| 699 | + { |
| 700 | + // currently unsupported |
| 701 | + return nullptr; |
| 702 | + } |
| 703 | + return nullptr; |
| 704 | +} |
| 705 | + |
644 | 706 | QColor QgsArcGisRestUtils::parseEsriColorJson( const QVariant &colorData ) |
645 | 707 | { |
646 | 708 | const QVariantList colorParts = colorData.toList(); |
|
0 commit comments