• esri/symbols

# CIMSymbol

AMD: require(["esri/symbols/CIMSymbol"], (CIMSymbol) => { /* code goes here */ });
ESM: import CIMSymbol from "@arcgis/core/symbols/CIMSymbol.js";
Class: esri/symbols/CIMSymbol
Inheritance: CIMSymbol Symbol Accessor
Since: ArcGIS Maps SDK for JavaScript 4.12

CIMSymbols are high quality, scalable, multi-layer vector symbols for features and graphics. They allow the user to add more customizations to their symbols, using one or more symbol layers to create unique symbols. CIMSymbols can be created from CIMSymbolReference JSON that complies with the CIM specification by passing the JSON to the data property. Not everything in the CIM specification is currently supported in the ArcGIS Maps SDK for JavaScript. The documentation on this page details the current support in the API.

CIMSymbols have at least one symbol layer, but can have more, as outlined in the following table:

Symbol type Typical symbol layers Role
CIMPointSymbol Marker layers: CIMVectorMarker, CIMPictureMarker Draw relative to the point geometry
CIMLineSymbol Marker layers: CIMVectorMarker, CIMPictureMarker Draw at specified locations relative to the line geometry.
Stroke layers: CIMSolidStroke, CIMPictureStroke Draw relative to the line geometry.
CIMPolygonSymbol Marker layers: CIMVectorMarker, CIMPictureMarker Draw relative to the polygon outline or within the polygon interior, depending on the marker placement setting.
Stroke layers: CIMSolidStroke, CIMPictureStroke Draw relative to the polygon outline.
Fill layers: CIMSolidFill, CIMHatchFill, CIMPictureFill Draw relative to the polygon interior.

To get or set the values for color, rotation, and size on the CIMSymbol, use the utility functions found in cimSymbolUtils.

Known Limitations

## Constructors

new CIMSymbol(properties)
Parameter
 properties Object optional See the properties for a list of all the properties that may be passed into the constructor.

## Property Overview

Any properties can be set, retrieved or listened to. See the Working with Properties topic.
Show inherited properties Hide inherited properties
Name Type Summary Class
CIMSymbolReference

The JSON payload of the CIMSymbolReference.

more details
CIMSymbol
String

The name of the class.

more details
Accessor
String

The symbol type.

more details
CIMSymbol

### Property Details

The JSON payload of the CIMSymbolReference. The CIMSymbolReference is comprised of the symbol, primitive overrides, and scale.

Symbol: The symbol property can be of type CIMPointSymbol, CIMLineSymbol, or CIMPolygonSymbol. Each symbol is made up of one or more symbolLayers. Symbol layers are the building blocks of CIM symbols, they combine to make rich graphical depictions. You can configure the shape, color, texture, size, position, etc of each symbol layer, and combine multiple symbol layers to create your desired symbol. The CIM Symbol Builder provides a simple user interface to experiment with symbol layers and their properties.

Primitive overrides: Primitive overrides allow you to use Arcade expressions to dynamically change many symbol layer properties from data values. Primitive overrides are defined on the primitiveOverrides property - this property takes in an array of objects, each object representing a primitive override on a specific symbol layer.

Minimum and maximum scale: (Since version 4.20) The minScale and maxScale values will determine the scale values at which your symbol will be visible in the view. To show your symbol at all scales, these properties can either be ignored or set to 0.

Example
const cimSymbol = new CIMSymbol({
data: {
type: "CIMSymbolReference",
minScale: 750000, // only allow the symbol to be shown at certain scales
maxScale: 80000,
symbol: {
type: "CIMLineSymbol",
symbolLayers: [{ ... }]
},
primitiveOverrides: [{
type: "CIMPrimitiveOverride",
primitiveName: "symbol-layer-1", // the name of the symbol layer we want to override
propertyName: "Size", // the name of the property on the symbol layer we want to override
valueExpressionInfo: {
type: "CIMExpressionInfo",
title: "Size override",
expression: "..." // the expression to change the size of the symbol
}
}]
}
});

The name of the class. The declared class name is formatted as esri.folder.className.

The symbol type.

For CIMSymbol the type is always "cim".

## Method Overview

Show inherited methods Hide inherited methods
Name Return Type Summary Class

Adds one or more handles which are to be tied to the lifecycle of the object.

more details
Accessor
CIMSymbol

Creates a deep clone of the symbol.

more details
CIMSymbol
*

Creates a new instance of this class and initializes it with values from a JSON object generated from an ArcGIS product.

more details
Symbol
Boolean

Returns true if a named group of handles exist.

more details
Accessor

Removes a group of handles owned by the object.

more details
Accessor
Object

Converts an instance of this class to its ArcGIS portal JSON representation.

more details
Symbol

### Method Details

ArcGIS Maps SDK for JavaScript 4.25

Adds one or more handles which are to be tied to the lifecycle of the object. The handles will be removed when the object is destroyed.

// Manually manage handles
const handle = reactiveUtils.when(
() => !view.updating,
() => {
wkidSelect.disabled = false;
},
{ once: true }
);

// Destroy the object
this.destroy();

Parameters
 handleOrHandles Handles marked for removal once the object is destroyed. groupKey * optional Key identifying the group to which the handles should be added. All the handles in the group can later be removed with Accessor.removeHandles(). If no key is provided the handles are added to a default group.
clone()

Creates a deep clone of the symbol.

Returns
Type Description
CIMSymbol A deep clone of the object that invoked this method.
Example
// Creates a deep clone of the graphic's symbol
let symLyr = graphic.symbol.clone();
fromJSON(json){*}static

Creates a new instance of this class and initializes it with values from a JSON object generated from an ArcGIS product. The object passed into the input json parameter often comes from a response to a query operation in the REST API or a toJSON() method from another ArcGIS product. See the Using fromJSON() topic in the Guide for details and examples of when and how to use this function.

Parameter
 json Object A JSON representation of the instance in the ArcGIS format. See the ArcGIS REST API documentation for examples of the structure of various input JSON objects.
Returns
Type Description
* Returns a new instance of this class.
hasHandles(groupKey){Boolean}inherited
ArcGIS Maps SDK for JavaScript 4.25

Returns true if a named group of handles exist.

Parameter
 groupKey * optional A group key.
Returns
Type Description
Boolean Returns true if a named group of handles exist.
Example
// Remove a named group of handles if they exist.
}
removeHandles(groupKey)inherited
ArcGIS Maps SDK for JavaScript 4.25

Removes a group of handles owned by the object.

Parameter
 groupKey * optional A group key or an array or collection of group keys to remove.
Example
obj.removeHandles(); // removes handles from default group

obj.removeHandles("handle-group");
obj.removeHandles("other-handle-group");
toJSON(){Object}inherited

Converts an instance of this class to its ArcGIS portal JSON representation. See the Using fromJSON() guide topic for more information.

Returns
Type Description
Object The ArcGIS portal JSON representation of an instance of this class.

## Type Definitions

CIMAnimatedSymbolProperties Object
ArcGIS Maps SDK for JavaScript 4.24

Represents animated symbol properties, a collection of symbol properties that apply when the symbol layer has animation data.

Properties
 playAnimation Boolean optional Indicates whether the animated symbol should play its animation. reverseAnimation Boolean optional Indicates whether the animated symbol should play back in reverse. randomizeStartTime Boolean optional Indicates whether to generate a randomized start offset in seconds to apply to the symbol animation of each feature. randomizeStartSeed Number optional The starting value for generating a random number. Used by the randomizeStartTime property to determine the time offset for each feature. startTimeOffset Number optional The time offset in seconds to use as the starting point of the symbol animation. This is used if randomizeStartTime is false. duration Number optional The time (in seconds) it take to play through the symbol's animation once. This determines a symbol's playback speed. repeatType String optional Determines how to repeat the animation of a symbol when the animation cycle ends. Possible Values:"None"|"Loop"|"Oscillate" repeatDelay Number optional The number of seconds to delay before repeating an animation cycle.
CIMColorSubstitution Object

Represents color substitution, an ordered list of color substitutes.

"colorSubstitutions": [
{
// replace all white in the image with black
oldColor: [255, 255, 255, 255],
newColor: [0, 0, 0, 255]
}
]

Properties
 oldColor The old color (the color that will be substituted). Value should be an array of r,b,g,a values (i.e. [255,255,255,255]). newColor The new color that will replace the old color. Value should be an array of r,b,g,a values (i.e. [255,255,255,255]).

Represents a geometric effect.

CIMGeometricEffectArrow Object
ArcGIS Maps SDK for JavaScript 4.16

Represents the arrow geometric effect which creates a dynamic line along a line feature with an arrow of a specified arrow type and width.

{
"type": "CIMGeometricEffectArrow",
"geometricEffectArrowType": "Crossed",
"width": 15
}


The following image shows what the effect defined in the code snippet above looks like on a CIMSolidStroke symbol layer.

Properties
 type String The value is always "CIMGeometricEffectArrow". primitiveName String optional The primitive name. geometricEffectArrowType String The type of arrow to be displayed. Possible Values:"OpenEnded"|"Block"|"Crossed" width Number The distance between the lines that construct the body of the arrow.
CIMGeometricEffectBuffer Object
ArcGIS Maps SDK for JavaScript 4.16

Represents the buffer geometric effect which creates a dynamic polygon with a specified distance around features.

{
"type": "CIMGeometricEffectBuffer",
"size": 5
}


The following image shows what the effect defined in the code snippet above looks like on a CIMSolidStroke symbol layer.

Properties
 type String The value is always "CIMGeometricEffectBuffer". primitiveName String optional The primitive name. size Number The distance from the feature. This distance is either from the edge of the marker, the edge of the stroke or the edge of the polygon outline.
CIMGeometricEffectControlMeasureLine Object
ArcGIS Maps SDK for JavaScript 4.22

Represents the control measure line geometric effect.

Properties
 type String The value is always "CIMGeometricEffectControlMeasureLine". primitiveName String optional The primitive name. rule String The style of effect. Must be a value from the list of GeometricEffectControlMeasureLineRule.
CIMGeometricEffectCut Object
ArcGIS Maps SDK for JavaScript 4.16

Represents the cut geometric effect which creates a dynamic line that is shorter on one or both ends than the line feature or polygon outline.

{
"type": "CIMGeometricEffectCut",
"beginCut": 10, // cut 10px from the beginning of the line
"middleCut": 15, // cut 15px from the middle of the line
"endCut": 0 // don't cut the end of the line
}


The following image shows what the effect defined in the code snippet above looks like on a CIMSolidStroke symbol layer.

Properties
 type String The value is always "CIMGeometricEffectCut". primitiveName String optional The primitive name. beginCut Number optional The distance from the beginning of a line that the display of the stroke starts. The beginning of the line is determined by the direction in which the line was digitized. endCut Number optional The distance from the end of a line that the display of the stroke ends. The end of the line is determined by the direction in which the line was digitized. middleCut Number optional The distance around the middle of a line that the display of the stroke is interrupted. invert Boolean optional A value indicating whether the effect should be applied in the opposite manner. This displays the stroke symbol only at the ends of the line and leaves the rest of the line unsymbolized.
CIMGeometricEffectDashes Object
ArcGIS Maps SDK for JavaScript 4.16

Represents the dashes geometric effect which creates a dynamic multipart line geometry from a line feature or the outline of a polygon based on a template.

{
"type": "CIMGeometricEffectDashes",
"dashTemplate": [5,5,1,5], // [dash, gap, dash, gap]
"lineDashEnding": "NoConstraint",
"offsetAlongLine": 0
}


The following image shows what the effect defined in the code snippet above looks like on a CIMSolidStroke symbol layer.

Properties
 type String The value is always "CIMGeometricEffectDashes". primitiveName String optional The primitive name. customEndingOffset Number optional Where the pattern should end relative to the ending point of the geometry. Negative numbers indicate a shift to the left and positive numbers a shift to the right. This property is only applied if the lineDashEnding is set to "Custom". dashTemplate The distance for each dash and gap. There can be multiple dash and gap values to form a complex pattern (i.e. [2,5] where 2 is the length of the dash and 5 is the length of the gap). lineDashEnding String The setting which determines how the strokes with dash patterns are handled at the end points of the line geometry's segments. Possible Values:"NoConstraint"|"HalfPattern"|"HalfGap"|"FullPattern"|"FullGap"|"Custom" offsetAlongLine Number The position where the pattern should begin relative to the starting point of the geometry. It shifts the entire pattern along the line the specified distance. Negative values indicate a shift to the left and positive numbers a shift to the right. This property is only applied if lineDashEnding is set to NoConstraint or Custom.
CIMGeometricEffectDonut Object
ArcGIS Maps SDK for JavaScript 4.26

Represents the donut geometric effect which creates a dynamic polygon ring of a specified width in relation to the outline of polygon features.

Properties
 type String The value is always "CIMGeometricEffectDonut". primitiveName String optional The primitive name. option String The option for the way the symbol handles complex geometries. Possible Values:"Fast"|"Accurate" width Number The distance from the edge of the polygon that the fill symbol is to be displayed.
CIMGeometricEffectJog Object
ArcGIS Maps SDK for JavaScript 4.16

Represents the jog geometric effect which creates a dynamic line with a jog of a specified angle, position, and width in the line.

{
"type": "CIMGeometricEffectJog",
"angle": 225,
"length": 20,
"position": 50
}


The image below shows a CIMSolidStroke symbol layer with the CIMGeometricEffectJog effect applied as defined in the snippet above.

Properties
 type String The value is always "CIMGeometricEffectJog". primitiveName String optional The primitive name. angle Number The angle of the job in the line which is measured in degrees. length Number The length of the segment that forms the jog in the line. position Number The location of the center of the jog, as a percentage measured from the start of the input geometry.
CIMGeometricEffectMove Object
ArcGIS Maps SDK for JavaScript 4.16

Represents the move geometric effect which creates a point, line or polygon that is offset a specified distance in X and Y.

{
"type": "CIMGeometricEffectMove",
"offsetX": 10,
"offsetY": -5
}

Properties
 type String The value is always "CIMGeometricEffectMove". primitiveName String optional The primitive name. offsetX Number optional The distance to move the symbol along the X-axis of the feature geometry. offsetY Number optional The distance to move the symbol along the Y-axis of the feature geometry.
CIMGeometricEffectOffset Object
ArcGIS Maps SDK for JavaScript 4.16

Represents the offset geometric effect which creates a dynamic line or polygon offset at a specified distance perpendicularly from a feature.

{
"type": "CIMGeometricEffectOffset",
"offset": 5,
"method": "Rounded",
"option": "Fast"
}

Properties
 type String The value is always "CIMGeometricEffectOffset". primitiveName String optional The primitive name. method String The way strokes or fills are displayed at corners. Possible Values:"Mitered"|"Bevelled"|"Rounded"|"Square" offset Number The distance of the symbol perpendicular to the feature geometry. option String The way the symbol handles complex geometries. Possible Values:"Fast"|"Accurate"
CIMGeometricEffectRotate Object
ArcGIS Maps SDK for JavaScript 4.16

Represents the rotate geometric effect which creates a dynamic line or polygon rotated a specified angle from the feature.

{
// rotates the symbol 90 degrees from the symbol's geometry
"type": "CIMGeometricEffectRotate",
"angle": 90
}

Properties
 type String The value is always "CIMGeometricEffectRotate". primitiveName String optional The primitive name. angle Number The amount of rotation for the symbol.
CIMGeometricEffectScale Object
ArcGIS Maps SDK for JavaScript 4.16

Represents the rotate geometric effect which creates a dynamic line or polygon scaled by a specified factor. Vertices are moved in relation to the center point of a feature envelope. Values greater than 1 move vertices away from the center point. Values between 0 and 1 move vertices toward the center point. Values less than 0 draw an inverse dynamic line or polygon where the vertices have crossed to the other side of the center point.

{
"type": "CIMGeometricEffectScale",
"XScaleFactor": 1.5,
"YScaleFactor": 1.5
}

Properties
 type String The value is always "CIMGeometricEffectScale". primitiveName String optional The primitive name. XScaleFactor Number The amount of change in size of a symbol in the x-axis. The value is expressed in terms of a ratio/percentage. YScaleFactor Number The amount of change in size of a symbol in the x-axis. The value is expressed in terms of a ratio/percentage.
CIMGeometricEffectWave Object
ArcGIS Maps SDK for JavaScript 4.16

Represents the wave geometric effect which creates a dynamic line or polygon along a feature with a repeating wave pattern.

{
"type": "CIMGeometricEffectWave",
"amplitude": 5,
"period": 5,
"waveform": "Square"
}


The image below shows a CIMSolidStroke symbol layer with the CIMGeometricEffectWave effect applied as defined in the snippet above.

Properties
 type String The value is always "CIMGeometricEffectWave". primitiveName String optional The primitive name. amplitude Number The distance perpendicular to a feature to display the curves for the symbol. period Number The distance along the line or polygon to display the curves for the symbol. seed Number optional The starting value for generating a random number. This is only used when the waveform is set to "Random". waveform String The shape of the curves to be displayed along the symbol. Possible Values:"Sinus"|"Square"|"Triangle"|"Random"
CIMHatchFill Object

Represents a hatch fill which fills polygonal geometry with a uniform series of parallel line symbols.

{
"type": "CIMHatchFill",
"enable": true,
"lineSymbol": {
"type": "CIMLineSymbol",
"symbolLayers": [{
"type": "CIMSolidStroke",
"enable": true,
"capStyle": "Butt",
"joinStyle": "Miter",
"miterLimit": 10,
"width": 1,
"color": [255, 61, 61, 255]
}]
},
"rotation": 45,
"separation": 5
}


The following image shows a CIMPolygonSymbol with a CIMHatchFill symbol layer (as defined in the code snippet above).

Properties
 type String The value is always "CIMHatchFill". effects optional The geometric effects applied to the symbol layer. Effects dynamically alter the geometry when the symbology is applied. Multiple effects applied to a symbol layer are rendered sequentially. enable Boolean A value indicating whether the symbol layer is visible. The symbol layer draws only when enabled. colorLocked Boolean optional A value indicating whether the color can be changed for this symbol layer. If the symbol layer is colorLocked, then any changes to the symbol's color property will not be applied to this symbol layer. primitiveName String optional The primitive name of the symbol. Used when setting a PrimitiveOverride. lineSymbol CIMLineSymbol The line symbol that is used to draw the hatch lines in the fill. offsetX Number optional How much to move the stroke to a new X-position. offsetY Number optional How much to move the stroke to a new Y-position. rotation Number optional The angle of rotation for all the strokes, in degrees. separation Number The distance between the line symbols in the hatch pattern.
CIMLineSymbol Object
ArcGIS Maps SDK for JavaScript 4.16

Represents a line symbol used to draw polyline features and graphics.

The code snippet below shows an example of a CIMLineSymbol with one CIMSolidStroke symbol layer with a dash effect on top of another CIMSolidStroke layer as shown below.

const lineSymbol = new CIMSymbol({
data: {
type: "CIMSymbolReference",
symbol: {
type: "CIMLineSymbol",
symbolLayers: [{
type: "CIMSolidStroke",
effects: [{
type: "CIMGeometricEffectDashes",
dashTemplate: [5, 5],
lineDashEnding: "FullGap",
controlPointEnding: "NoConstraint"
}],
enable: "true",
capStyle: "Butt",
joinStyle: "Round",
width: 2.6,
color: [255, 255, 255, 255]
},
{
type: "CIMSolidStroke",
enable: true,
capStyle: "Butt",
joinStyle: "Round",
width: 3.4,
color: [0, 0, 0, 255]
}]
}
}
});

• CIMLineSymbol is not currently supported in 3D SceneViews.
Properties
 type String The value is always "CIMLineSymbol". symbolLayers The symbol layers. Symbol layers are the components that make up a symbol. A symbol layer is represented by a marker, stroke, or fill symbol layer. Symbol layers are the building blocks of CIM symbols, they combine to make rich graphical depictions. You can configure the shape, color, texture, size, position, etc of each symbol layer, and combine multiple symbol layers to create your desired symbol. effects optional The geometric effects applied to the symbol. useRealWorldSymbolSizes Boolean optional A value indicating whether the symbol size properties are rendered using real world units or page units. When set to true, the symbol will draw using real world units (e.g. meters).
CIMMarkerGraphic Object

Represents a marker graphic which is used to define vector graphics in a vector marker.

Properties
 type String The value is always "CIMMarkerGraphic". geometry Geometry The geometry of the marker. The symbol used to draw the marker graphic. This can be a point, line, polygon or text symbol. textString String optional The text that is defined within the marker if drawn with a text symbol. primitiveName String optional The primitive name.
CIMMarkerPlacementAlongLineSameSize Object

Represents marker placement along the line which places markers that are the same size evenly along a line or polygon outline.

"markerPlacement": {
"type": "CIMMarkerPlacementAlongLineSameSize",
"angleToLine": true,
"offset": 0,
"controlPointsPlacement": "NoConstraint",
"customEndingOffset": 0,
"endings": "NoConstraint",
"offsetAlongLine": 0,
"placementTemplate": [10, 10]
}


The following image shows what the marker placement defined in the code snippet above looks like on a circular CIMVectorMarker symbol layer.

Properties
 type String The value is always "CIMMarkerPlacementAlongLineSameSize". primitiveName String optional The primitive name. placePerPart Boolean optional A value indicating whether to consider individual geometry parts or the whole geometry. angleToLine Boolean optional A value indicating whether to angle the marker to the line. offset Number optional The offset. customEndingOffset Number optional Where the pattern should end relative to the ending point of the geometry. The entire pattern is shifted along the line for the specified distance. Negative numbers shift to the left and positive numbers shift to the right. This is only applied if the endings property is set to Custom. endings String optional How markers are placed at the end points of a line. Possible Values:"NoConstraint"|"WithMarkers"|"WithFullGap"|"WithHalfGap"|"Custom" offsetAlongLine Number optional Where the pattern should begin relative to the starting point of the geometry. The entire pattern is shifted along the line for the specified distance. Negative numbers shift to the left and positive numbers shift to the right. This is only applied if the endings property is set to No Constraint or Custom. placementTemplate The numeric pattern that defines the sequence of placed markers and the length of space between them.
CIMMarkerPlacementAtExtremities Object

Represents marker placement at extremities which places markers at only one or both endpoints of a line.

"markerPlacement": {
"type": "CIMMarkerPlacementAtExtremities",
"angleToLine": true,
"offset": 0,
"extremityPlacement": "Both",
"offsetAlongLine": 0
}


The following image shows what the marker placement defined in the code snippet above looks like on a circular CIMVectorMarker symbol layer.

Properties
 type String The value is always "CIMMarkerPlacementAtExtremities". primitiveName String optional The primitive name. placePerPart Boolean optional A value indicating whether to consider individual geometry parts or the whole geometry. angleToLine Boolean optional A value indicating whether to angle the marker to the line. offset Number optional The offset. extremityPlacement String optional Which ends of the line a marker will be placed. Possible Values:"Both"|"JustBegin"|"JustEnd"|"None" offsetAlongLine Number optional The distance from the ends of a line that the marker will be placed.
CIMMarkerPlacementAtRatioPositions Object

Represents marker placement at ratio positions which places a set number of markers along the line or the outline of a polygon.

"markerPlacement": {
"type": "CIMMarkerPlacementAtRatioPositions",
"angleToLine": true,
"offset": 0,
"beginPosition": 0,
"endPosition": 0,
"flipFirst": false,
"positionArray": ["0", "0.5"]
}


The following image shows what the marker placement defined in the code snippet above looks like on a circular CIMVectorMarker symbol layer.

Properties
 type String The value is always "CIMMarkerPlacementAtRatioPositions". primitiveName String optional The primitive name. placePerPart Boolean optional A value indicating whether to consider individual geometry parts or the whole geometry. angleToLine Boolean optional A value indicating whether to angle the marker to the line. offset Number optional The offset. beginPosition Number optional The distance from the beginning of a line that the marker will be placed. endPosition Number optional The distance from the end of a line that the marker will be placed. The ending of a line is determined by the direction in which the line was digitized. flipFirst Boolean optional A value indicating whether only the first marker will be rotated 180 degrees. positionArray The array of positions.
CIMMarkerPlacementInsidePolygon Object

Represents marker placement inside a polygon which defines how a polygon is filled with a pattern of markers.

"markerPlacement": {
"type": "CIMMarkerPlacementInsidePolygon",
"gridAngle": 0,
"offsetX": 0,
"offsetY": 0,
"stepX": 20,
"stepY": 20,
"shiftOddRows": true
}


The following image shows what the marker placement defined in the code snippet above looks like on a circular CIMVectorMarker symbol layer.

Properties
 type String The value is always "CIMMarkerPlacementInsidePolygon". primitiveName String optional The primitive name. placePerPart Boolean optional A value indicating whether to consider individual geometry parts or the whole geometry. gridAngle Number optional The orientation angle that the markers are placed on within the polygon. gridType String optional The grid type which defines how markers are placed. Random is supported as of version 4.24. Possible Values:"Fixed"|"Random" offsetX Number optional The marker row offset horizontally. offsetY Number optional The marker row offset vertically. shiftOddRows Boolean optional A value indicating whether every other row of markers should be shifted to create an offset grid. stepX Number optional The distance between each marker on the X-axis of the grid. stepY Number optional The distance between each marker on the Y-axis of the grid. randomness Number optional Since 4.24 A percentage that determines the randomness of markers within the polygon. Accepted values are between 0 and 100, with 0 being the least random and 100 being the most random. Only applied when gridType is Random. seed Number optional Since 4.24 The starting value for generating a random pattern. Only applied when gridType is Random. clipping String optional The clipping option which specifies how markers should be clipped at the polygon boundary. The markers will always be clipped at the polygon boundary. The value is always "ClipAtBoundary".
CIMMarkerPlacementOnLine Object

Represents a marker placement on the line.

"markerPlacement": {
"type": "CIMMarkerPlacementOnLine",
"angleToLine": true,
"offset": 0,
"relativeTo": "LineMiddle",
"startPointOffset": 0
}


The following image shows what the marker placement defined in the code snippet above looks like on a circular CIMVectorMarker symbol layer.

Properties
 type String The value is always "CIMMarkerPlacementOnLine". primitiveName String optional The primitive name. placePerPart Boolean optional A value indicating whether to consider individual geometry parts or the whole geometry. angleToLine Boolean optional A value indicating whether to angle the marker to the line. offset Number optional The offset. relativeTo String The location on a line where a marker will be placed. The direction of the line is determined by the direction in which the line was digitized. Possible Values:"LineMiddle"|"LineBeginning"|"LineEnd"|"SegmentMidpoint" startPointOffset Number optional The distances from a specified location on a line that a marker will be placed.
CIMMarkerPlacementOnVertices Object

Represents a marker placement on vertices which places a single marker on a line or polygon outline at a set distance from the middle or one of the endpoints.

"markerPlacement": {
"type": "CIMMarkerPlacementOnVertices",
"angleToLine": true,
"offset": 0,
"placeOnEndPoints": true,
"placeOnRegularVertices": true
}


The following image shows what the marker placement defined in the code snippet above looks like on a circular CIMVectorMarker symbol layer.

Properties
 type String The value is always "CIMMarkerPlacementOnVertices". primitiveName String optional The primitive name. placePerPart Boolean optional A value indicating whether to consider individual geometry parts or the whole geometry. angleToLine Boolean optional A value indicating whether to angle the marker to the line. offset Number optional The offset. placeOnControlPoints Boolean optional A value indicating whether a marker will be placed on the control points of the line. placeOnEndPoints Boolean optional A value indicating whether a marker will be placed on the endpoints of the line. placeOnRegularVertices Boolean optional A value indicating whether a marker will be placed on the vertices of the line.
CIMMarkerPlacementPolygonCenter Object

Represents marker placement polygon center which defines how a single marker will be placed within the polygon.

"markerPlacement": {
"type": "CIMMarkerPlacementPolygonCenter",
"method": "OnPolygon",
"offsetX": 0,
"offsetY": 0,
"clipAtBoundary": false
}


The following image shows what the marker placement defined in the code snippet above looks like on a circular CIMVectorMarker symbol layer.

Properties
 type String The value is always "CIMMarkerPlacementPolygonCenter". primitiveName String optional The primitive name. placePerPart Boolean optional A value indicating whether to consider individual geometry parts or the whole geometry. method String optional The method used to determine the polygon center. Possible Values:"OnPolygon"|"CenterOfMass"|"BoundingBoxCenter" offsetX Number optional The value which offsets the marker horizontally from the center. offsetY Number optional The value which offsets the marker vertically from the center. clipAtBoundary Boolean optional A value indicating whether the marker should be clipped if it extends pasts the boundary of the polygon.
CIMPictureFill Object

Represents a picture fill which fills polygonal geometry with a picture. Supported file types are .bmp, .jpg, .png, and .gif.

The following image shows a CIMPolygonSymbol with two CIMPictureFill symbol layers and a CIMSolidFill symbol layer (as defined in the code snippet below).

{
"type": "CIMPolygonSymbol",
"symbolLayers": [
{
"type": "CIMPictureFill",
"enable": true,
"colorLocked": true,
"rotation": -90,
"scaleX": 1,
"height": 80,
"textureFilter": "Picture",
"tintColor": [130, 130, 130, 255]
},
{
"type": "CIMPictureFill",
"enable": true,
"rotation": -90,
"scaleX": 1,
"height": 80,
"textureFilter": "Picture",
"tintColor": [192, 228, 218, 255]
},
{
"type": "CIMSolidFill",
"enable": true,
"color": [120, 191, 233, 255]
}
]
}

Properties
 type String The value is always "CIMPictureFill". effects optional The geometric effects applied to the symbol layer. Effects dynamically alter the geometry when the symbology is applied. Multiple effects applied to a symbol layer are rendered sequentially. enable Boolean A value indicating whether the symbol layer is visible. The symbol layer draws only when enabled. colorLocked Boolean optional A value indicating whether the color can be changed for this symbol layer. If the symbol layer is colorLocked, then any changes to the symbol's color property will not be applied to this symbol layer. primitiveName String optional The primitive name of the symbol. Used when setting a PrimitiveOverride. url String The url of the image. Typically a base64 encoded image. offsetX Number optional The distance that the image is offset in the horizontal direction. offsetY Number optional The distance that the image is offset in the vertical direction. rotation Number optional The angle of the image within the fill. scaleX Number optional The width of the symbol without changing the height, as a ratio. height Number optional The height of the image. colorSubstitutions optional The color substitutions which allows colors in the image to be substituted with a different color. tintColor optional The color that is applied as a tint to the image. The color is applied to the whole image. When the tint is set to white the image appears with its native colors. Value should be an array of r,b,g,a values (i.e. [255,255,255,255] (white)).
CIMPictureMarker Object

Represents a picture marker created from a raster (bitmapped) image file. The image can have color substitutions to replace one or more colors in the image or it can have a tint applied to the whole image depending on the picture type. Supported formats are .bmp, .jpg, .png, and .gif.

The following image shows a CIMPictureMarker symbol layer (as defined in the code snippet below).

{
"type": "CIMPictureMarker",
"enable": true,
"anchorPoint": {
"x": 0,
"y": 0
},
"size": 40,
"scaleX": 1,
"tintColor": [255, 255, 255, 255],
"url": "https://freesvg.org/img/Earth.png"
}

Properties
type String

The value is always "CIMPictureMarker".

enable Boolean

A value indicating whether the symbol layer is visible. The symbol layer draws only when enabled.

url String

The url of the image. Typically a base64 encoded image.

size Number

The height of the marker. Modifying size changes the marker's height to the specified size. The width will be updated proportionally.

colorLocked Boolean
optional

A value indicating whether the color can be changed for this symbol layer. If the symbol layer is colorLocked, then any changes to the symbol's color property will not be applied to this symbol layer.

effects
optional

The geometric effects applied to the symbol layer. Effects dynamically alter the geometry when the symbology is applied. Multiple effects applied to a symbol layer are rendered sequentially.

primitiveName String
optional

The primitive name of the symbol. Used when setting a PrimitiveOverride.

anchorPoint Object
optional

The specified location where all transformation property operations originate.

Specification
 optional The x coordinate of the anchor point, measured along the east/west axis. optional The y coordinate of the anchor point, measured along the north/south axis.
anchorPointUnits String
optional
Default Value:"Relative"

A value which specifies if the anchor point location is considered a percentage of the size or as an absolute distance.

Possible Values:"Relative"|"Absolute"

offsetX Number
optional

The distance that the image is offset in the horizontal direction.

offsetY Number
optional

The distance that the image is offset in the vertical direction.

rotateClockwise Boolean
optional

A value indicating whether the rotation is applied clockwise or counterclockwise to the marker layer.

rotation Number
optional

The angle of the image within the fill.

markerPlacement MarkerPlacement
optional

Determines how markers are placed along a line or within a polygon.

scaleX Number
optional

The width of the symbol without changing the height, as a ratio.

height Number
optional

The height of the image.

colorSubstitutions
optional

The color substitutions which allows colors in the image to be substituted with a different color.

tintColor
optional

The color that is applied as a tint to the image. The color is applied to the whole image. When the tint is set to white the image appears with its native colors. Value should be an array of r,b,g,a values (i.e. [255,255,255,255] (white)).

animatedSymbolProperties CIMAnimatedSymbolProperties
optional

Since 4.24 The collection of symbol properties that apply when the symbol layer has animation data.

CIMPictureStroke Object

Represents a picture stroke which draws linear geometry with a repeating image file. Supported file types are .bmp, .jpg, .png, and .gif.

Properties
 type String The value is always "CIMPictureStroke". effects optional The geometric effects applied to the symbol layer. Effects dynamically alter the geometry when the symbology is applied. Multiple effects applied to a symbol layer are rendered sequentially. enable Boolean A value indicating whether the symbol layer is visible. The symbol layer draws only when enabled. colorLocked Boolean optional A value indicating whether the color can be changed for this symbol layer. If the symbol layer is colorLocked, then any changes to the symbol's color property will not be applied to this symbol layer. primitiveName String optional The primitive name of the symbol. Used when setting a PrimitiveOverride. url String The url of the image. Typically a base64 encoded image. colorSubstitutions optional The color substitutions which allows colors in the image to be substituted with a different color. tintColor optional The color that is applied as a tint to the image. The color is applied to the whole image. When the tint is set to white the image appears with its native colors. Value should be an array of r,b,g,a values (i.e. [255,255,255,255] (white)). width Number The width of the stroke. capStyle String optional Determines how the stroke should draw at the ends of the geometries. Possible Values:"Butt"|"Round"|"Square" joinStyle String optional Determines how the symbol is drawn at the stroke segment connections. Possible Values:"Bevel"|"Round"|"Miter" miterLimit Number optional The maximum 'sharpness' that is allowed for miter joins. The sharp angle will be clipped and rendered with a bevel join if the spike created by the miter join exceeds the miterLimit multiplied by the width of the stroke. This property is only applied to the symbol layer when the joinStyle is set to Miter.
CIMPointSymbol Object

Represents a point symbol used to draw point features and graphics.

The code snippet below shows an example of a CIMPointSymbol with one CIMVectorMarker symbol layer which contains a triangle marker graphic as shown below.

const symbol = new CIMSymbol({
data:  {
type: "CIMSymbolReference",
symbol: {
type: "CIMPointSymbol",
symbolLayers: [{
type: "CIMVectorMarker",
enable: true,
size: 32,
frame: {
xmin: 0,
ymin: 0,
xmax: 16,
ymax: 16
},
markerGraphics: [{
type: "CIMMarkerGraphic",
geometry: {
rings: [[[8, 16],[0, 0],[16, 0],[8, 16]]]
},
symbol: {
type: "CIMPolygonSymbol",
symbolLayers: [{
type: "CIMSolidStroke",
width: 5,
color: [240, 94, 35, 255]
}]
}
}]
}]
}
}
});
Properties
 type String The value is always "CIMPointSymbol". symbolLayers The symbol layers. Symbol layers are the components that make up a symbol. A symbol layer is represented by a marker, stroke, or fill symbol layer. Symbol layers are the building blocks of CIM symbols, they combine to make rich graphical depictions. You can configure the shape, color, texture, size, position, etc of each symbol layer, and combine multiple symbol layers to create your desired symbol. angle Number optional The amount of variation applied to the symbol, measured in degrees, propagated cumulatively to all marker symbols. angleAlignment String optional Default Value:"Display" Indicates whether point symbols align to the map or to the display when a rotation is applied to the map. Possible Values:"Display"|"Map" effects optional The geometric effects applied to the symbol. primitiveName String optional The primitive name of the symbol. Used when setting a PrimitiveOverride. scaleX Number optional The X scale which changes the width of the symbol without changing the height, as a ratio. useRealWorldSymbolSizes Boolean optional A value indicating whether the symbol size properties are rendered using real world units or page units. When set to true, the symbol will draw using real world units (e.g. meters).
CIMPolygonSymbol Object
ArcGIS Maps SDK for JavaScript 4.16

Represents a polygon symbol used to draw polygon features and graphics.

The code snippet below shows an example of a CIMPolygonSymbol with CIMVectorMarker symbols placed inside the polygon.

const markerPolygonSymbol = new CIMSymbol({
data: {
type: "CIMSymbolReference",
symbol: {
type: "CIMPolygonSymbol",
symbolLayers: [{
type: "CIMVectorMarker",
enable: true,
size: 10,
markerPlacement: {
type: "CIMMarkerPlacementInsidePolygon",
gridType: "Fixed",
seed: 13,
stepX: 16,
stepY: 16,
clipping: "ClipAtBoundary",
},
markerGraphics: [{
type: "CIMMarkerGraphic",
geometry: {
rings: [
[
[0,5],
[1.12,1.55],
[4.76,1.55],
[1.82,-0.59],
[2.94,-4.05],
[0,-1.91],
[-2.94,-4.05],
[-1.82,-0.59],
[-4.76,1.55],
[-1.12,1.55],
[0,5]
]
]
},
symbol: {
type: "CIMPolygonSymbol",
symbolLayers: [{
type: "CIMSolidFill",
enable: true,
color: [190,210,255,255]
}]
}
}],
scaleSymbolsProportionally: true,
respectFrame: true
},
{
type: "CIMSolidFill",
enable: true,
color: [0,112,255,255]
}]
}
}
});

• CIMPolygonSymbol is not currently supported in 3D SceneViews.
Properties
 type String The value is always "CIMPolygonSymbol". symbolLayers The symbol layers. Symbol layers are the components that make up a symbol. A symbol layer is represented by a marker, stroke, or fill symbol layer. Symbol layers are the building blocks of CIM symbols, they combine to make rich graphical depictions. You can configure the shape, color, texture, size, position, etc of each symbol layer, and combine multiple symbol layers to create your desired symbol. effects optional The geometric effects applied to the symbol. useRealWorldSymbolSizes Boolean optional A value indicating whether the symbol size properties are rendered using real world units or page units. When set to true, the symbol will draw using real world units (e.g. meters).
CIMSolidFill Object

Represents a solid fill which fills polygonal geometry with a single solid color.

The following image shows a CIMPolygonSymbol with a CIMSolidFill symbol layer (as defined in the code snippet below).

{
"type": "CIMSolidFill",
"enable": true,
"color": [151, 219, 242, 255]
}

Properties
 type String The value is always "CIMSolidFill". effects optional The geometric effects applied to the symbol layer. Effects dynamically alter the geometry when the symbology is applied. Multiple effects applied to a symbol layer are rendered sequentially. enable Boolean A value indicating whether the symbol layer is visible. The symbol layer draws only when enabled. colorLocked Boolean optional A value indicating whether the color can be changed for this symbol layer. If the symbol layer is colorLocked, then any changes to the symbol's color property will not be applied to this symbol layer. primitiveName String optional The primitive name of the symbol. Used when setting a PrimitiveOverride. color The color that is applied to the fill. Value should be an array of r,b,g,a values (i.e. [255,255,255,255] (white)).
CIMSolidStroke Object

Represents a solid stroke which draws linear geometry with a single solid color.

The following image shows a CIMLineSymbol with a CIMSolidStroke symbol layer (as defined in the code snippet below).

{
"type": "CIMSolidStroke",
"enable": true,
"capStyle": "Round",
"joinStyle": "Round",
"lineStyle3D": "Strip",
"miterLimit": 10,
"width": 5,
"color": [0, 0, 0, 255]
}

Properties
 type String The value is always "CIMSolidStroke". effects optional The geometric effects applied to the symbol layer. Effects dynamically alter the geometry when the symbology is applied. Multiple effects applied to a symbol layer are rendered sequentially. enable Boolean A value indicating whether the symbol layer is visible. The symbol layer draws only when enabled. colorLocked Boolean optional A value indicating whether the color can be changed for this symbol layer. If the symbol layer is colorLocked, then any changes to the symbol's color property will not be applied to this symbol layer. primitiveName String optional The primitive name of the symbol. Used when setting a PrimitiveOverride. color The color that is applied to the fill. Value should be an array of r,b,g,a values (i.e. [255,255,255,255] (white)). width Number The width of the stroke. capStyle String optional Determines how the stroke should draw at the ends of the geometries. Possible Values:"Butt"|"Round"|"Square" joinStyle String optional Determines how the symbol is drawn at the stroke segment connections. Possible Values:"Bevel"|"Round"|"Miter" miterLimit Number optional The maximum 'sharpness' that is allowed for miter joins. The sharp angle will be clipped and rendered with a bevel join if the spike created by the miter join exceeds the miterLimit multiplied by the width of the stroke. This property is only applied to the symbol layer when the joinStyle is set to Miter.

Represents a symbol layer.

CIMSymbolReference Object

Represents a symbol reference from the data property.

Properties
 type String The value is always "CIMSymbolReference". primitiveOverrides optional The primitive overrides. These allow you to use Arcade expressions to dynamically change many symbol layer properties from data values. The symbol. Supported values are CIMPointSymbol, CIMLineSymbol, and CIMPolygonSymbol. minScale Number optional Since 4.20 The minimum scale the symbol reference should be displayed. To show your symbol at all scales, set minScale and maxScale to 0. maxScale Number optional Since 4.20 The maximum scale the symbol reference should be displayed. To show your symbol at all scales, set minScale and maxScale to 0.
CIMTextSymbol Object

Represents a text symbol which is used to draw text graphics. Text symbols do not contain any symbol layers.

The code snippet below shows an example of a CIMTextSymbol as a marker graphic inside a CIMVectorMarker symbol layer.

{
"type": "CIMVectorMarker",
"enable": true,
"size": 10,
"colorLocked": true,
"anchorPointUnits": "Relative",
"frame": {
"xmin": -5,
"ymin": -5,
"xmax": 5,
"ymax": 5
},
"markerGraphics": [
{
"type": "CIMMarkerGraphic",
"geometry": {
"x": 0,
"y": 0
},
"symbol": {
"type": "CIMTextSymbol",
"fontFamilyName": "Arial",
"fontStyleName": "Bold",
"height": 20,
"horizontalAlignment": "Center",
"offsetX": 0,
"offsetY": 0,
"symbol": {
"type": "CIMPolygonSymbol",
"symbolLayers": [
{
"type": "CIMSolidFill",
"enable": true,
"color": [89, 31, 147, 255]
}
]
},
"verticalAlignment": "Center",
},
"textString": "hello!"
}
],
"scaleSymbolsProportionally": true,
"respectFrame": true
}

Properties
 type String The value is always "CIMTextSymbol". angle Number optional The amount of rotation applied to the text symbol, measured in degrees, around the geometry. fontFamilyName String The font family name of the font (e.g. Comic Sans). The possible values are dependent upon if you working with a MapView or SceneView. See the Labeling guide page for detailed explanation. Unsupported fonts will fall back to Arial Unicode MS Regular in MapView and sans-serif in SceneView. fontStyleName String optional The style name for the font family. Possible Values:"Regular"|"Bold"|"Italic" haloSize Number optional The size of the halo that extends beyond the symbol shape. haloSymbol CIMPolygonSymbol The polygon symbol that is used to draw the halo for a text symbol. height Number The size of the text in points. horizontalAlignment String optional The alignment type used to align the text to the geometry horizontally. Affects which side of a point geometry the point text is drawn or which end of a line it is drawn close to. Commonly used to define how stacked text appears. Possible Values:"Left"|"Right"|"Center" offsetX Number optional The X offset. offsetY Number optional The Y offset. strikethrough Boolean optional A value indicating whether to draw the text with a strike through it. symbol CIMPolygonSymbol The polygon symbol that is used to draw the glyphs of the text. underline Boolean optional A value indicating whether to draw the text with an underline. verticalAlignment String optional The vertical alignment of the text. Possible Values:"Top"|"Center"|"Baseline"|"Bottom"
CIMVectorMarker Object

Represents a vector marker which can represent vector graphics. It's constructed from MarkerGraphics which are geometries and symbols used as building blocks for the marker.

The following image shows a CIMPointSymbol with a CIMVectorMarker symbol layer (as defined in the code snippet below).

{
"type": "CIMVectorMarker",
"enable": true,
"size": 40,
"frame": {
"xmin": 0,
"ymin": 0,
"xmax": 17,
"ymax": 17
},
"markerGraphics": [
{
"type": "CIMMarkerGraphic",
"geometry": {
"rings": [
[
[4.25, 1.31],
[0, 8.51],
[4.25, 15.66],
[12.75, 15.66 ],
[17, 8.51],
[12.75, 1.31],
[4.25,1.31]
]
]
},
"symbol": {
"type": "CIMPolygonSymbol",
"symbolLayers": [
{
"type": "CIMSolidFill",
"enable": true,
"color": [214, 0, 0, 255]
}
]
}
}
],
"scaleSymbolsProportionally": true,
"respectFrame": true
}

Properties
type String

The value is always "CIMVectorMarker".

effects
optional

The geometric effects applied to the symbol layer. Effects dynamically alter the geometry when the symbology is applied. Multiple effects applied to a symbol layer are rendered sequentially.

enable Boolean

A value indicating whether the symbol layer is visible. The symbol layer draws only when enabled.

colorLocked Boolean
optional

A value indicating whether the color can be changed for this symbol layer. If the symbol layer is colorLocked, then any changes to the symbol's color property will not be applied to this symbol layer.

primitiveName String
optional

The primitive name of the symbol. Used when setting a PrimitiveOverride.

size Number

The height of the marker. Modifying size changes the marker's height to the specified size. The width will be updated proportionally.

anchorPoint Object
optional

The specified location where all transformation property operations originate.

Specification
 optional The x coordinate of the anchor point, measured along the east/west axis. optional The y coordinate of the anchor point, measured along the north/south axis.
anchorPointUnits String
optional
Default Value:"Relative"

A value which specifies if the anchor point location is considered a percentage of the size or as an absolute distance.

Possible Values:"Relative"|"Absolute"

offsetX Number
optional

The distance that the image is offset in the horizontal direction.

offsetY Number
optional

The distance that the image is offset in the vertical direction.

rotateClockwise Boolean
optional

A value indicating whether the rotation is applied clockwise or counterclockwise to the marker layer.

rotation Number
optional

The angle of the image within the fill.

markerPlacement MarkerPlacement
optional

Determines how markers are placed along a line or within a polygon.

frame Envelope

The outer boundary of the entire vector marker.

markerGraphics

The vector graphics that define the shape of the marker.

scaleSymbolsProportionally Boolean
optional

A value indicating whether the strokes and or fills of a marker are scaled proportionally when the symbol size is changed. When enabled, the strokes for the outline or fill of the polygon symbol used to draw the marker will be scaled proportionally with changes to the symbol size. If this property is not enabled, then the stroke will draw with the specified width regardless of the marker size.

respectFrame Boolean
optional

A value indicating whether the frame of the vector marker should be honored when drawing the marker.

Envelope Object

An envelope is a rectangle defined by a range of values for each coordinate and attribute.

Properties
 xmin Number The minimum X value in the area of the envelope. xmax Number The maximum X value in the area of the envelope. ymin Number The minimum Y value in the area of the envelope. ymax Number The maximum Y value in the area of the envelope.

Represents a marker placement.

PrimitiveOverride Object

Represents a primitive override. A primitive override allows you to use an Arcade expression to dynamically change a property on a symbol layer based on data values. This is used with the Arcade visualization profile, which gives access to $feature and $view.scale profile variables. This allows you to override symbol layer properties based on a feature attribute at the current scale of the view.

Using $view.scale: The following JSON snippet shows a primitive override on the size property for a symbol layer with the primitiveName "symbol-layer-1". Based on the Arcade expression, the size of the symbol layer will update as the view scale changes. { type: "CIMPrimitiveOverride", primitiveName: "symbol-layer-1", // the name of the symbol layer we want to override propertyName: "Size", // the name of the property on the symbol layer we want to override valueExpressionInfo: { type: "CIMExpressionInfo", title: "Size override", // the pixel size at the largest scale // 42 represents the pixel size of the // circles at the view's largest scale (1:2,311,161) expression: "42 * 2311161 /$view.scale",
returnType: "Default"
}
}


Using $feature: The following JSON snippet shows a primitive override on the textString property of a markerGraphic with the primitive name "textGraphic". The value of textGraphic will be based on the value of NAME for each feature. { type: "CIMPrimitiveOverride", primitiveName: "textGraphic", propertyName: "TextString", valueExpressionInfo: { type: "CIMExpressionInfo", title: "Custom", expression: "$feature.NAME", // value of textString will be based on the NAME of the feature
returnType: "Default"
}
}

Properties
type String

The value is always "CIMPrimitiveOverride".

primitiveName String

The primitive name this override applies to.

propertyName String

The name of the property in the primitive this override applies to (e.g. "Size"). This value must be in Proper case (e.g. "Size" not "size").

valueExpressionInfo Object

Contains the Arcade expression that returns a value to be applied to the property on the primitive.

Specification
 type String The value is always "CIMExpressionInfo". title String optional The human readable text that describes the expression. expression String An Arcade expression following the specification defined by the Arcade Visualization Profile. Expressions in primitive overrides may reference field values using the \$feature profile variable and must return a number or a string. The value returned from this expression represents the value override for the specified propertyName. For example, when overriding a symbol layer's color, you must return a string or an array representing a color (e.g. [255, 0, 0, 1], "red", or "#fff"). When overriding a size, you must return a number representing the new size of the symbol layer. name String optional The name of the expression. returnType String optional The return type of the expression. "Default" means the return type of the expression is determined by the consumer using the expression. Possible Values:"Default"|"String"|"Numeric"