QGIS API Documentation 3.30.0-'s-Hertogenbosch (f186b8efe0)
qgsmaplayerfactory.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgsmaplayerfactory.cpp
3 --------------------------------------
4 Date : March 2021
5 Copyright : (C) 2021 by Nyall Dawson
6 Email : nyall dot dawson at gmail dot com
7***************************************************************************/
8
9/***************************************************************************
10 * *
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
15 * *
16 ***************************************************************************/
17
18#include "qgsmaplayerfactory.h"
19#include "qgsvectorlayer.h"
20#include "qgsrasterlayer.h"
21#include "qgsmeshlayer.h"
22#include "qgspointcloudlayer.h"
23#include "qgsvectortilelayer.h"
24#include "qgsannotationlayer.h"
25#include "qgsgrouplayer.h"
26
27Qgis::LayerType QgsMapLayerFactory::typeFromString( const QString &string, bool &ok )
28{
29 ok = true;
30 if ( string.compare( QLatin1String( "vector" ), Qt::CaseInsensitive ) == 0 )
31 return Qgis::LayerType::Vector;
32 else if ( string.compare( QLatin1String( "raster" ), Qt::CaseInsensitive ) == 0 )
33 return Qgis::LayerType::Raster;
34 else if ( string.compare( QLatin1String( "mesh" ), Qt::CaseInsensitive ) == 0 )
35 return Qgis::LayerType::Mesh;
36 else if ( string.compare( QLatin1String( "vector-tile" ), Qt::CaseInsensitive ) == 0 )
37 return Qgis::LayerType::VectorTile;
38 else if ( string.compare( QLatin1String( "point-cloud" ), Qt::CaseInsensitive ) == 0 )
39 return Qgis::LayerType::PointCloud;
40 else if ( string.compare( QLatin1String( "plugin" ), Qt::CaseInsensitive ) == 0 )
41 return Qgis::LayerType::Plugin;
42 else if ( string.compare( QLatin1String( "annotation" ), Qt::CaseInsensitive ) == 0 )
43 return Qgis::LayerType::Annotation;
44 else if ( string.compare( QLatin1String( "group" ), Qt::CaseInsensitive ) == 0 )
45 return Qgis::LayerType::Group;
46
47 ok = false;
48 return Qgis::LayerType::Vector;
49}
50
52{
53 switch ( type )
54 {
55 case Qgis::LayerType::Vector:
56 return QStringLiteral( "vector" );
57 case Qgis::LayerType::Raster:
58 return QStringLiteral( "raster" );
59 case Qgis::LayerType::Plugin:
60 return QStringLiteral( "plugin" );
61 case Qgis::LayerType::Mesh:
62 return QStringLiteral( "mesh" );
63 case Qgis::LayerType::VectorTile:
64 return QStringLiteral( "vector-tile" );
65 case Qgis::LayerType::Annotation:
66 return QStringLiteral( "annotation" );
67 case Qgis::LayerType::PointCloud:
68 return QStringLiteral( "point-cloud" );
69 case Qgis::LayerType::Group:
70 return QStringLiteral( "group" );
71 }
72 return QString();
73}
74
75QgsMapLayer *QgsMapLayerFactory::createLayer( const QString &uri, const QString &name, Qgis::LayerType type, const LayerOptions &options, const QString &provider )
76{
77 switch ( type )
78 {
79 case Qgis::LayerType::Vector:
80 {
81 QgsVectorLayer::LayerOptions vectorOptions;
82 vectorOptions.transformContext = options.transformContext;
83 vectorOptions.loadDefaultStyle = options.loadDefaultStyle;
84 vectorOptions.loadAllStoredStyles = options.loadAllStoredStyles;
85 return new QgsVectorLayer( uri, name, provider, vectorOptions );
86 }
87
88 case Qgis::LayerType::Raster:
89 {
90 QgsRasterLayer::LayerOptions rasterOptions;
91 rasterOptions.transformContext = options.transformContext;
92 rasterOptions.loadDefaultStyle = options.loadDefaultStyle;
93 return new QgsRasterLayer( uri, name, provider, rasterOptions );
94 }
95
96 case Qgis::LayerType::Mesh:
97 {
99 meshOptions.transformContext = options.transformContext;
100 meshOptions.loadDefaultStyle = options.loadDefaultStyle;
101 return new QgsMeshLayer( uri, name, provider, meshOptions );
102 }
103
104 case Qgis::LayerType::VectorTile:
105 {
106 const QgsVectorTileLayer::LayerOptions vectorTileOptions( options.transformContext );
107 return new QgsVectorTileLayer( uri, name, vectorTileOptions );
108 }
109
110 case Qgis::LayerType::Annotation:
111 {
112 const QgsAnnotationLayer::LayerOptions annotationOptions( options.transformContext );
113 return new QgsAnnotationLayer( name, annotationOptions );
114 }
115
116 case Qgis::LayerType::Group:
117 {
118 const QgsGroupLayer::LayerOptions groupOptions( options.transformContext );
119 return new QgsGroupLayer( name, groupOptions );
120 }
121
122 case Qgis::LayerType::PointCloud:
123 {
124 QgsPointCloudLayer::LayerOptions pointCloudOptions;
125 pointCloudOptions.loadDefaultStyle = options.loadDefaultStyle;
126 pointCloudOptions.transformContext = options.transformContext;
127 return new QgsPointCloudLayer( uri, name, provider, pointCloudOptions );
128 }
129
130 case Qgis::LayerType::Plugin:
131 break;
132 }
133 return nullptr;
134}
LayerType
Types of layers that can be added to a map.
Definition: qgis.h:115
Represents a map layer containing a set of georeferenced annotations, e.g.
A map layer which consists of a set of child layers, where all component layers are rendered as a sin...
Definition: qgsgrouplayer.h:42
static QString typeToString(Qgis::LayerType type)
Converts a map layer type to a string value.
static Qgis::LayerType typeFromString(const QString &string, bool &ok)
Returns the map layer type corresponding a string value.
static QgsMapLayer * createLayer(const QString &uri, const QString &name, Qgis::LayerType type, const LayerOptions &options, const QString &provider=QString())
Creates a map layer, given a uri, name, layer type and provider name.
Base class for all map layer types.
Definition: qgsmaplayer.h:73
Represents a mesh layer supporting display of data on structured or unstructured meshes.
Definition: qgsmeshlayer.h:100
Represents a map layer supporting display of point clouds.
Represents a raster layer.
Represents a vector layer which manages a vector based data sets.
Implements a map layer that is dedicated to rendering of vector tiles.
Setting options for loading annotation layers.
Setting options for loading group layers.
Definition: qgsgrouplayer.h:52
Setting options for loading layers.
QgsCoordinateTransformContext transformContext
Transform context.
bool loadAllStoredStyles
Controls whether the stored styles will be all loaded.
bool loadDefaultStyle
Set to true if the default layer style should be loaded.
Setting options for loading mesh layers.
Definition: qgsmeshlayer.h:108
QgsCoordinateTransformContext transformContext
Coordinate transform context.
Definition: qgsmeshlayer.h:121
bool loadDefaultStyle
Set to true if the default layer style should be loaded.
Definition: qgsmeshlayer.h:127
Setting options for loading point cloud layers.
bool loadDefaultStyle
Set to true if the default layer style should be loaded.
QgsCoordinateTransformContext transformContext
Coordinate transform context.
Setting options for loading raster layers.
bool loadDefaultStyle
Sets to true if the default layer style should be loaded.
QgsCoordinateTransformContext transformContext
Coordinate transform context.
Setting options for loading vector layers.
bool loadDefaultStyle
Set to true if the default layer style should be loaded.
QgsCoordinateTransformContext transformContext
Coordinate transform context.
bool loadAllStoredStyles
Controls whether the stored styles will be all loaded.
Setting options for loading vector tile layers.