A symbol defines the appearance of features and graphics that are displayed in a GeoView. More...
Header: | #include <Symbol.h> |
Since: | Esri::ArcGISRuntime 100.0 |
Inherits: | Esri::ArcGISRuntime::Object and Esri::ArcGISRuntime::JsonSerializable |
Inherited By: | Esri::ArcGISRuntime::CompositeSymbol, Esri::ArcGISRuntime::DistanceCompositeSceneSymbol, Esri::ArcGISRuntime::FillSymbol, Esri::ArcGISRuntime::LineSymbol, Esri::ArcGISRuntime::MarkerSceneSymbol, Esri::ArcGISRuntime::MarkerSymbol, and Esri::ArcGISRuntime::MultilayerSymbol |
Public Functions
virtual | ~Symbol() override |
Esri::ArcGISRuntime::Symbol * | clone(QObject *parent = nullptr) const |
QFuture<QImage> | createSwatchAsync(const Esri::ArcGISRuntime::Geometry &geometry, float width, float height, const QColor &backgroundColor = QColor()) |
QFuture<QImage> | createSwatchAsync(const Esri::ArcGISRuntime::Geometry &geometry, float width, float height, float screenScale, const QColor &backgroundColor = QColor()) |
QFuture<QImage> | createSwatchAsync(float width, float height, float screenScale, const QColor &backgroundColor = QColor()) |
QFuture<QImage> | createSwatchAsync(const QColor &backgroundColor = QColor()) |
QFuture<QImage> | createSwatchAsync(float screenScale, const QColor &backgroundColor = QColor()) |
Esri::ArcGISRuntime::SymbolType | symbolType() const |
bool | operator!=(const Esri::ArcGISRuntime::Symbol *other) const |
bool | operator==(const Esri::ArcGISRuntime::Symbol *other) const |
Reimplemented Public Functions
virtual QString | toJson() const override |
virtual QJsonObject | unknownJson() const override |
virtual QJsonObject | unsupportedJson() const override |
Static Public Members
Esri::ArcGISRuntime::Symbol * | fromJson(const QString &json, QObject *parent = nullptr) |
Protected Functions
Symbol(QObject *parent = nullptr) |
Detailed Description
Symbol is the base class for a number of different symbols, such as MarkerSymbol, LineSymbol, FillSymbol abd MultilayerSymbol, which are sub-classes for more specialized symbols.
You can specify the symbology of a single graphic using Graphic::symbol. Alternatively, you can create a Renderer that contains a collection of symbols and rules. Each rule determines which symbol is applied to a graphic or feature depending on its attribute values. To symbolize graphics, apply a renderer to the GraphicsOverlay, and to symbolize features, apply the renderer to FeatureLayer.
There are two models for defining symbols in your map: simple and advanced (multilayer). In general, simple symbols are single-layer symbols that provide basic representations, such as marker, line, fill, text, or picture. Advanced symbols are composed of one or several layers that can be defined individually and combined to create complex representations.
These are described as follows:
- Simple symbols follow the web map specification and you work with them through the simple symbol classes. These are also the symbols you get from web maps or from feature services when advanced symbology is turned off. Simple symbols can be created for points (MarkerSymbol), lines (LineSymbol), and polygons (FillSymbol). Each of the simple symbol types provides an enumeration of predefined styles that can be applied to the symbol.
- Advanced symbols, accessed through multilayer symbol classes, follow the ArcGIS Pro symbol model. These symbols come from feature services (that use advanced symbology), mobile style files, the dictionary renderer, and mobile map packages. You can also build your own advanced symbols for points, lines, and polygons.
Simple symbology is the symbology of the web map. When authoring maps in ArcGIS Pro as web maps, your multilayer symbols will be converted to simple symbols. In general, point symbols are converted to picture marker symbols optimized for the web, and line and polygon symbols are simplified while representing the original symbol as closely as possible. If you are authoring a feature service from ArcGIS Pro or ArcGIS Desktop, however, both the original symbols and the simplified symbols are stored. This allows clients that support advanced symbols to render the features as originally symbolized, while those that do not support advanced symbols (such as ArcGIS Online Map Viewer) can use the simple symbols for display. Having both sets of symbols allows you to retain the advanced symbology where available and still share the feature service as widely as possible.
If your app works primarily with web maps that you want to look the same throughout the platform, your app should use the simple symbols API. Otherwise, make sure your users understand that advanced symbols render slightly differently on clients that don't support advanced symbology.
If your maps are used only with this API and ArcGIS Pro, you can use advanced symbols exclusively. When rendered by this API, advanced symbols are vectorized. This allows them to scale better on devices with high resolution screens.
You can set LoadSettings::isUseAdvancedSymbology to control whether the map uses advanced symbols (when available) or always renders with simple symbols.
A swatch is an image that is used to display this symbol. Properties of a swatch include:
- Height, length of image from bottom to top side.
- Width, length of image from left to right side.
- Dots Per Inch (dpi), the resolution of the image.
- Color, interior color of the image.
- Geometry, shape of the image.
Depending on the Geometry of a Graphic or Feature different types of symbols will be used.
Relevant samples:
- Create geometries: Create simple geometry types.
- Create symbol styles from web styles: Create symbol styles from a style file hosted on a portal.
- Distance composite symbol: Change a graphic's symbol based on the camera's proximity to it.
- Search dictionary symbol style: Find symbols within the mil2525d specification that match a keyword.
Member Function Documentation
[explicit protected]
Symbol::Symbol(QObject *parent = nullptr)
Default constructor with an optional parent.
[override virtual]
Symbol::~Symbol()
Destructor.
[since Esri::ArcGISRuntime 200.1]
Esri::ArcGISRuntime::Symbol *Symbol::clone(QObject *parent = nullptr) const
Clones the Symbol to a new instance.
- parent - The optional parent QObject.
Returns a new instance of the current Symbol.
This function was introduced in Esri::ArcGISRuntime 200.1.
QFuture<QImage> Symbol::createSwatchAsync (const Esri::ArcGISRuntime::Geometry &geometry, float width, float height, const QColor &backgroundColor = QColor())
Creates a swatch image using the provided geometry, width, height, and optional backgroundColor.
The background color defaults to transparent when the backgroundColor is not provided. The width, height, and geometry coordinate values are measured in device independent pixels (DIPs). This operation will determine the primary screen scale factor for scaling the image size.
Note: The specified geometry is in DIPs, with the point {0,0} located at the centerpoint of the swatch image. The x-axis increases towards the right-hand side of the swatch image. The y-axis increases towards the top of the swatch image. For example, when creating a swatch for a MarkerSymbol, specifying a geometry of {10,10} will draw the marker 10 DIPs up and to the right of the center of the swatch. The geometry type should correspond to the symbol type. The geometry's spatial reference is ignored.
This method returns a QFuture for the asynchronous operation. Use future.then() to continue processing when the operation completes. Use future.onFailed() to handle exceptions of type ErrorException.
See Working with QFuture for further details.
since Esri::ArcGISRuntime 200.2
QFuture<QImage> Symbol::createSwatchAsync (const Esri::ArcGISRuntime::Geometry &geometry, float width, float height, float screenScale , const QColor &backgroundColor = QColor())
Returns a swatch image using the provided geometry, width, height, screen scale, and optional background color.
- width - The width of the swatch in device-independent pixels (DIPs).
- height - The height of the swatch in device-independent pixels (DIPs).
- screenScale - The number of pixels per DIP (sometimes referred to as screen density or device pixel ratio). This value is used to scale symbology when rendering the swatch. The value should be set appropriately in order to render swatches at the correct scale for a given display. Note: Picture marker symbols without a set width or height are not scaled by screen scale, as unset width and height are taken to mean "render at native pixel scale".
- backgroundColor - The background color of the swatch. Can be empty, in which case a transparent background is used.
- geometry - The geometry of the symbol to be drawn in the swatch image. The specified geometry is in DIPs, with the point {0,0} located at the center of the swatch image. The X-axis increases towards the right side of the swatch image. The Y-axis increases towards the top of the swatch image. For example: when creating a swatch for a MarkerSymbol, specifying a geometry of {10,10} will draw the marker 10 DIPs up and to the right of the center of the swatch. The geometry type (Point, Polyline, Polygon) should correspond to the symbol type (MarkerSymbol, LineSymbol, FillSymbol). The geometry's spatial reference is ignored.
This method returns a QFuture for the asynchronous operation. Use future.then() to continue processing when the operation completes. Use future.onFailed() to handle exceptions of type ErrorException.
See Working with QFuture for further details.
since Esri::ArcGISRuntime 200.2
[since Esri::ArcGISRuntime 200.2]
QFuture<QImage> Symbol::createSwatchAsync (float width, float height, float screenScale , const QColor &backgroundColor = QColor())
Returns a swatch image using the provided width, height, screen scale, and optional background color.
- width - The width of the swatch in device-independent pixels (DIPs).
- height - The height of the swatch in device-independent pixels (DIPs).
- screenScale - The number of pixels per DIP (sometimes referred to as screen density or device pixel ratio). This value is used to scale symbology when rendering the swatch. The value should be set appropriately in order to render swatches at the correct scale for a given display. Note: Picture marker symbols without a set width or height are not scaled by screen scale, as unset width and height are taken to mean "render at native pixel scale".
- backgroundColor - The background color of the swatch. Can be empty, in which case a transparent background is used.
This method will scale the symbol up or down in order to fit it in to the desired width and height of the swatch.
This method returns a QFuture for the asynchronous operation. Use future.then() to continue processing when the operation completes. Use future.onFailed() to handle exceptions of type ErrorException.
See Working with QFuture for further details.
This function was introduced in Esri::ArcGISRuntime 200.2.
QFuture<QImage> Symbol::createSwatchAsync (const QColor &backgroundColor = QColor())
Creates a swatch image using the optional backgroundColor.
The background color defaults to transparent when the backgroundColor is not provided. This operation will determine the primary screen scale factor for scaling the image size.
This method returns a QFuture for the asynchronous operation. Use future.then() to continue processing when the operation completes. Use future.onFailed() to handle exceptions of type ErrorException.
See Working with QFuture for further details.
since Esri::ArcGISRuntime 200.2
QFuture<QImage> Symbol::createSwatchAsync (float screenScale , const QColor &backgroundColor = QColor())
Returns a swatch of the symbol.
- backgroundColor - The background color of the swatch. Can be empty, in which case a transparent background is used.
- screenScale - The number of pixels per DIP (sometimes referred to as screen density or device pixel ratio).
This method returns a QFuture for the asynchronous operation. Use future.then() to continue processing when the operation completes. Use future.onFailed() to handle exceptions of type ErrorException.
See Working with QFuture for further details.
since Esri::ArcGISRuntime 200.2
[static]
Esri::ArcGISRuntime::Symbol *Symbol::fromJson (const QString &json, QObject *parent = nullptr)
Creates and returns a new Symbol from the provided json, with an optional parent.
Sizes of symbols in JSON are represented in points (not pixels).
Symbol layers in a multilayer symbol are in reverse order of how they appear in the JSON representation.
For Symbols of type MarkerSymbol, an angle set from JSON will be inverted (e.g. an angle of 20 will become -20).
See also JsonSerializable.
Esri::ArcGISRuntime::SymbolType Symbol::symbolType () const
Returns the type of the symbol such as SimpleMarkerSymbol, PictureFillSymbol or MultilayerPointSymbol.
See also SymbolType.
[override virtual]
QString Symbol::toJson () const
Reimplements: JsonSerializable::toJson() const.
Returns this Symbol as a JSON representation.
Sizes of symbols in JSON are represented in points (not pixels).
Symbol layers in a multilayer symbol are in reverse order of how they appear in the JSON representation.
See also JsonSerializable.
[override virtual]
QJsonObject Symbol::unknownJson () const
Reimplements: JsonSerializable::unknownJson() const.
Returns the unknown data from the source JSON.
Unknown JSON is a dictionary of values not defined in the ArcGIS specification used to create this object but found in the source JSON. If the object is written back to JSON, any unknown JSON data is not persisted. The ArcGIS specification may be for a web map, web scene, REST API, and so on.
See also JsonSerializable.
[override virtual]
QJsonObject Symbol::unsupportedJson () const
Reimplements: JsonSerializable::unsupportedJson() const.
Returns the unsupported data from the source JSON.
Unsupported JSON is a dictionary of values defined in the ArcGIS specification used to create this object but not currently used in this API. If the object is written back to JSON, any unsupported JSON data is persisted. The ArcGIS specification may be from a web map, web scene, REST API, and so on.
See also JsonSerializable.
[since Esri::ArcGISRuntime 200.2]
bool Symbol::operator!=(const Esri::ArcGISRuntime::Symbol *other) const
Inequality operator. Returns true
if this object and other are not equal.
This function was introduced in Esri::ArcGISRuntime 200.2.
See also Symbol::operator==.
bool Symbol::operator==(const Esri::ArcGISRuntime::Symbol *other) const
Returns a bool that tests if this symbol is equal to another symbol.
- other - The symbol to be compared.