@itwin/map-layers-formats 4.1.0-dev.62 → 4.1.0-dev.66

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/CHANGELOG.md +16 -1
  2. package/lib/cjs/ArcGisFeature/ArcGisCanvasRenderer.d.ts +3 -1
  3. package/lib/cjs/ArcGisFeature/ArcGisCanvasRenderer.d.ts.map +1 -1
  4. package/lib/cjs/ArcGisFeature/ArcGisCanvasRenderer.js +4 -0
  5. package/lib/cjs/ArcGisFeature/ArcGisCanvasRenderer.js.map +1 -1
  6. package/lib/cjs/ArcGisFeature/ArcGisFeatureProvider.d.ts +10 -4
  7. package/lib/cjs/ArcGisFeature/ArcGisFeatureProvider.d.ts.map +1 -1
  8. package/lib/cjs/ArcGisFeature/ArcGisFeatureProvider.js +71 -12
  9. package/lib/cjs/ArcGisFeature/ArcGisFeatureProvider.js.map +1 -1
  10. package/lib/cjs/ArcGisFeature/ArcGisJsonFeatureReader.d.ts +1 -0
  11. package/lib/cjs/ArcGisFeature/ArcGisJsonFeatureReader.d.ts.map +1 -1
  12. package/lib/cjs/ArcGisFeature/ArcGisJsonFeatureReader.js +18 -0
  13. package/lib/cjs/ArcGisFeature/ArcGisJsonFeatureReader.js.map +1 -1
  14. package/lib/cjs/ArcGisFeature/ArcGisPbfFeatureReader.d.ts +9 -1
  15. package/lib/cjs/ArcGisFeature/ArcGisPbfFeatureReader.d.ts.map +1 -1
  16. package/lib/cjs/ArcGisFeature/ArcGisPbfFeatureReader.js +144 -110
  17. package/lib/cjs/ArcGisFeature/ArcGisPbfFeatureReader.js.map +1 -1
  18. package/lib/cjs/ArcGisFeature/ArcGisSymbologyRenderer.d.ts +32 -77
  19. package/lib/cjs/ArcGisFeature/ArcGisSymbologyRenderer.d.ts.map +1 -1
  20. package/lib/cjs/ArcGisFeature/ArcGisSymbologyRenderer.js +88 -128
  21. package/lib/cjs/ArcGisFeature/ArcGisSymbologyRenderer.js.map +1 -1
  22. package/lib/cjs/ArcGisFeature/EsriSymbology.d.ts +152 -0
  23. package/lib/cjs/ArcGisFeature/EsriSymbology.d.ts.map +1 -0
  24. package/lib/cjs/ArcGisFeature/EsriSymbology.js +181 -0
  25. package/lib/cjs/ArcGisFeature/EsriSymbology.js.map +1 -0
  26. package/lib/esm/ArcGisFeature/ArcGisCanvasRenderer.d.ts +3 -1
  27. package/lib/esm/ArcGisFeature/ArcGisCanvasRenderer.d.ts.map +1 -1
  28. package/lib/esm/ArcGisFeature/ArcGisCanvasRenderer.js +4 -0
  29. package/lib/esm/ArcGisFeature/ArcGisCanvasRenderer.js.map +1 -1
  30. package/lib/esm/ArcGisFeature/ArcGisFeatureProvider.d.ts +10 -4
  31. package/lib/esm/ArcGisFeature/ArcGisFeatureProvider.d.ts.map +1 -1
  32. package/lib/esm/ArcGisFeature/ArcGisFeatureProvider.js +71 -12
  33. package/lib/esm/ArcGisFeature/ArcGisFeatureProvider.js.map +1 -1
  34. package/lib/esm/ArcGisFeature/ArcGisJsonFeatureReader.d.ts +1 -0
  35. package/lib/esm/ArcGisFeature/ArcGisJsonFeatureReader.d.ts.map +1 -1
  36. package/lib/esm/ArcGisFeature/ArcGisJsonFeatureReader.js +18 -0
  37. package/lib/esm/ArcGisFeature/ArcGisJsonFeatureReader.js.map +1 -1
  38. package/lib/esm/ArcGisFeature/ArcGisPbfFeatureReader.d.ts +9 -1
  39. package/lib/esm/ArcGisFeature/ArcGisPbfFeatureReader.d.ts.map +1 -1
  40. package/lib/esm/ArcGisFeature/ArcGisPbfFeatureReader.js +144 -110
  41. package/lib/esm/ArcGisFeature/ArcGisPbfFeatureReader.js.map +1 -1
  42. package/lib/esm/ArcGisFeature/ArcGisSymbologyRenderer.d.ts +32 -77
  43. package/lib/esm/ArcGisFeature/ArcGisSymbologyRenderer.d.ts.map +1 -1
  44. package/lib/esm/ArcGisFeature/ArcGisSymbologyRenderer.js +84 -124
  45. package/lib/esm/ArcGisFeature/ArcGisSymbologyRenderer.js.map +1 -1
  46. package/lib/esm/ArcGisFeature/EsriSymbology.d.ts +152 -0
  47. package/lib/esm/ArcGisFeature/EsriSymbology.d.ts.map +1 -0
  48. package/lib/esm/ArcGisFeature/EsriSymbology.js +170 -0
  49. package/lib/esm/ArcGisFeature/EsriSymbology.js.map +1 -0
  50. package/package.json +11 -11
@@ -4,147 +4,87 @@
4
4
  * See LICENSE.md in the project root for license terms and full copyright notice.
5
5
  *--------------------------------------------------------------------------------------------*/
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.ArcGisSymbologyRenderer = exports.EsriSFS = exports.EsriPMS = exports.EsriSLS = void 0;
7
+ exports.ArcGisUniqueValueSymbologyRenderer = exports.ArcGisSimpleSymbologyRenderer = exports.ArcGisSymbologyRenderer = void 0;
8
8
  const core_bentley_1 = require("@itwin/core-bentley");
9
- const core_common_1 = require("@itwin/core-common");
10
- // Convert a channel array [r, g, b, a] to ColorDef
11
- function colorFromArray(channels) {
12
- if (channels && channels.length === 4) {
13
- // Alpha channel is reversed, 255 = opaque
14
- return core_common_1.ColorDef.from(channels[0], channels[1], channels[2], 255 - channels[3]);
15
- }
16
- return undefined;
17
- }
18
- const loggerCategory = "MapLayersFormats.ArcGISFeature";
19
9
  /** @internal */
20
- class EsriSLS {
21
- get color() { return colorFromArray(this.props.color); }
22
- get type() { return this.props.type; }
23
- get width() { return this.props.width; }
24
- get style() { return this.props.style; }
25
- constructor(json) {
26
- this.props = json;
27
- }
28
- static fromJSON(json) {
29
- return new EsriSLS(json);
30
- }
31
- }
32
- exports.EsriSLS = EsriSLS;
33
- /** @internal */
34
- class EsriPMS {
35
- get type() { return this.props.type; }
36
- get url() { return this.props.url; }
37
- get imageData() { return this.props.imageData; }
38
- get imageUrl() { return `data:${this.contentType};base64,${this.imageData}`; }
39
- get image() { return this._image; }
40
- get contentType() { return this.props.contentType; }
41
- get width() { return this.props.width; }
42
- get height() { return this.props.height; }
43
- get xoffset() { return this.props.xoffset; }
44
- get yoffset() { return this.props.yoffset; }
45
- get angle() { return this.props.angle; }
46
- constructor(json) {
47
- this.props = json;
48
- this._image = new Image();
49
- this._image.src = this.imageUrl;
50
- }
51
- static fromJSON(json) {
52
- return new EsriPMS(json);
53
- }
54
- }
55
- exports.EsriPMS = EsriPMS;
10
+ const loggerCategory = "MapLayersFormats.ArcGISFeature";
56
11
  /** @internal */
57
- class EsriSFS {
58
- get color() { return colorFromArray(this.props.color); }
59
- get type() { return this.props.type; }
60
- get style() { return this.props.style; }
61
- get outline() { return this._outline; }
62
- constructor(json) {
63
- this.props = json;
64
- if (json.outline)
65
- this._outline = EsriSLS.fromJSON(json.outline);
66
- }
67
- static fromJSON(json) {
68
- return new EsriSFS(json);
12
+ class ArcGisSymbologyRenderer {
13
+ static create(renderer, defaultSymbol) {
14
+ if (renderer?.type === "uniqueValue") {
15
+ return new ArcGisUniqueValueSymbologyRenderer(renderer, defaultSymbol);
16
+ }
17
+ else {
18
+ return new ArcGisSimpleSymbologyRenderer(renderer, defaultSymbol);
19
+ }
69
20
  }
70
21
  }
71
- exports.EsriSFS = EsriSFS;
22
+ exports.ArcGisSymbologyRenderer = ArcGisSymbologyRenderer;
72
23
  /** @internal */
73
- class ArcGisSymbologyRenderer {
74
- constructor(geometryType, rendererDefinition) {
75
- let symbol;
76
- if (rendererDefinition?.symbol) {
77
- symbol = rendererDefinition.symbol;
24
+ class ArcGisSimpleSymbologyRenderer extends ArcGisSymbologyRenderer {
25
+ isAttributeDriven() { return false; }
26
+ get symbol() { return this._symbol; }
27
+ get defaultSymbol() { return this._defaultSymbol; }
28
+ constructor(renderer, defaultSymbol) {
29
+ super();
30
+ this.lineWidthScaleFactor = 2; // This is value is empirical, this might need to be adjusted
31
+ this._defaultSymbol = defaultSymbol;
32
+ this.renderer = renderer;
33
+ if (this.renderer?.type === "simple") {
34
+ this._symbol = this.renderer.symbol;
78
35
  }
79
- else if (rendererDefinition?.defaultSymbol) {
80
- symbol = rendererDefinition?.defaultSymbol;
81
- }
82
- if (symbol) {
83
- if (symbol.type === "esriSFS") {
84
- this._symbol = EsriSFS.fromJSON(symbol);
85
- }
86
- else if (symbol.type === "esriSLS") {
87
- this._symbol = EsriSLS.fromJSON(symbol);
88
- }
89
- else if (symbol.type === "esriPMS") {
90
- this._symbol = EsriPMS.fromJSON(symbol);
91
- }
92
- }
93
- // If '_symbol' is still undefined at this point, that means we could not find
94
- // any symbology definition from the metadata, let's use some default symbology
95
- // so that we display at least something.
96
- if (this._symbol === undefined) {
97
- core_bentley_1.Logger.logWarning(loggerCategory, "Symbology definition not supported, using default symbology");
98
- if (geometryType === "esriGeometryPoint" || geometryType === "esriGeometryMultipoint") {
99
- this._symbol = EsriPMS.fromJSON(ArcGisSymbologyRenderer.defaultPMS);
100
- }
101
- else if (geometryType === "esriGeometryLine" || geometryType === "esriGeometryPolyline") {
102
- this._symbol = EsriSLS.fromJSON(ArcGisSymbologyRenderer.defaultSLS);
103
- }
104
- else if (geometryType === "esriGeometryPolygon") {
105
- this._symbol = EsriSFS.fromJSON(ArcGisSymbologyRenderer.defaultSFS);
106
- }
107
- else {
108
- core_bentley_1.Logger.logError(loggerCategory, "Could not determine default symbology: geometry type not supported");
109
- }
36
+ else {
37
+ this._symbol = defaultSymbol;
110
38
  }
111
39
  }
112
40
  applyFillStyle(context) {
113
41
  if (!context)
114
42
  return;
115
- if (this._symbol?.type === "esriSFS") {
43
+ const fillColor = this.getFillColor();
44
+ if (fillColor) {
45
+ context.fillStyle = fillColor.toRgbaString();
46
+ }
47
+ else {
48
+ core_bentley_1.Logger.logTrace(loggerCategory, `Could not apply fill style`);
49
+ }
50
+ }
51
+ getFillColor() {
52
+ let fillColor;
53
+ if (this._symbol.type === "esriSFS") {
116
54
  const sfs = this._symbol;
117
- if (sfs.style === "esriSFSSolid" && sfs.color) {
118
- context.fillStyle = sfs.color.toRgbaString();
119
- }
120
- else {
121
- context.fillStyle = core_common_1.ColorDef.from(200, 0, 0, 100).toRgbaString(); // default color is red?
55
+ if (sfs.color) {
56
+ fillColor = sfs.color;
122
57
  }
123
58
  }
59
+ return fillColor;
124
60
  }
125
61
  applyStrokeStyle(context) {
126
62
  if (!context)
127
63
  return;
64
+ // Stroke style can be from SFS's outline style or a SLS's color
128
65
  let sls;
129
- if (this._symbol?.type === "esriSFS") {
66
+ if (this._symbol.type === "esriSFS") {
130
67
  const sfs = this._symbol;
131
68
  if (sfs.outline && sfs.outline.style === "esriSLSSolid") {
132
69
  sls = sfs.outline;
133
70
  }
134
71
  }
135
- else if (this._symbol?.type === "esriSLS") {
72
+ else if (this._symbol.type === "esriSLS") {
136
73
  sls = this._symbol;
137
74
  }
138
75
  if (sls) {
139
76
  if (sls.color)
140
77
  context.strokeStyle = sls.color.toRgbaString();
141
- context.lineWidth = sls.width * 2; // TODO: Should we scale this value here?
78
+ context.lineWidth = sls.width * this.lineWidthScaleFactor;
79
+ }
80
+ else {
81
+ core_bentley_1.Logger.logTrace(loggerCategory, `Could not apply stroke style`);
142
82
  }
143
83
  }
144
84
  drawPoint(context, ptX, ptY) {
145
85
  if (!context)
146
86
  return;
147
- if (this._symbol?.type === "esriPMS") {
87
+ if (this._symbol.type === "esriPMS") {
148
88
  const pms = this._symbol;
149
89
  let xOffset = 0, yOffset = 0;
150
90
  if (pms.xoffset)
@@ -165,26 +105,46 @@ class ArcGisSymbologyRenderer {
165
105
  }
166
106
  }
167
107
  }
168
- ArcGisSymbologyRenderer.defaultPMS = {
169
- type: "esriPMS",
170
- url: "",
171
- contentType: "image/png",
172
- imageData: "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAmBJREFUOE+Nk01IVFEUx//n3jfvOZOaJkMtiiJ7o9RG3LgoqKhFSFJBTS1ahFBBi0ijfJXCIyQr+hBbSIsoW7iQoKKFCw2CkAI3tZAgy8Ei+xhoTCbnje/NPfHGnA816KzuPR+/c8/HJRQJE7o+VUhym0DcCOYGgBQEXjOLlyqo+nHanCkMoaL4rslKjZwOQLT4ek3Mmz3FACFNLB67ut6M1nWphbg8wI6VyJK5KEH0EQFVJRKbwzokAW++p/ErraAYSQK3u47bC3vLnA+ZB9i2gHF0oyQMCfCGNaUa+vauxs71wWz2V18cnBj8gQ8J1/eeBnHUa4sMFQDGdGno+4gwEAoQzjVUon3rqlx1KY9x7+0MWobjAPg3QJ2eZV4tAEyFNCN5FkSXyw2B3j1hRGvLcgBXMV5MptA4MOXr0gT0u5bZnAf0jBsyiSgJPAxqhON1K3FlRxUMvwFAtv7u0Wl0jvwEmJNEuOhakTt5wKEBifr6Oo14BIBRpgt07w6jcVMIngKGY7NofR5HwlF+zDcpsC193vyYB/innvHywCzdZfAR/+onX1segBTAxHzzfPE7/8yzzIPLjJE1LTixHZx5CtCK4gXLzovBiDPUsYxVM7gUkB3nWKlm6DYEnQGzXARxCOK+a1WfKtQXb6LNAvr7iCboCUA1Ocdsdv5KLPe7F6pH/w3wLbc+BwOuc5IZ1wEE/jonQbjptZn24tKKX7BgvR2r0NKZRwDvAqCI+Z30VJPTURv7P4A9psuQcYAUPwAoReBLrmX2Lmls7i8sZ7kWLwuoxA1FVJGxzMPLufi6P2r+2xFbOUjGAAAAAElFTkSuQmCC",
173
- width: 16,
174
- height: 16,
175
- xoffset: -8,
176
- yoffset: -16,
177
- };
178
- ArcGisSymbologyRenderer.defaultSLS = {
179
- type: "esriSLS",
180
- color: [0, 0, 0, 255],
181
- width: 1,
182
- style: "esriSLSSolid",
183
- };
184
- ArcGisSymbologyRenderer.defaultSFS = {
185
- type: "esriSFS",
186
- color: [0, 0, 0, 255],
187
- style: "esriSFSSolid",
188
- };
189
- exports.ArcGisSymbologyRenderer = ArcGisSymbologyRenderer;
108
+ exports.ArcGisSimpleSymbologyRenderer = ArcGisSimpleSymbologyRenderer;
109
+ /** @internal */
110
+ class ArcGisUniqueValueSymbologyRenderer extends ArcGisSimpleSymbologyRenderer {
111
+ isAttributeDriven() { return true; }
112
+ get rendererFields() {
113
+ if (this.uvRenderer.field1)
114
+ return [this.uvRenderer.field1];
115
+ else
116
+ return undefined;
117
+ }
118
+ constructor(renderer, defaultSymbol) {
119
+ super(renderer, defaultSymbol);
120
+ this.uvRenderer = this.renderer;
121
+ if (this.uvRenderer.defaultSymbol) {
122
+ this._defaultSymbol = this.uvRenderer.defaultSymbol;
123
+ this._symbol = this.defaultSymbol;
124
+ }
125
+ }
126
+ setActiveFeatureAttributes(attributes) {
127
+ this._activeFeatureAttributes = attributes;
128
+ let newSymbolApplied = false;
129
+ if (this._activeFeatureAttributes) {
130
+ if (this.uvRenderer.field1 && Object.keys(this._activeFeatureAttributes).includes(this.uvRenderer.field1)) {
131
+ const queryValue = this._activeFeatureAttributes[this.uvRenderer.field1];
132
+ for (const uvi of this.uvRenderer.uniqueValueInfos) {
133
+ // Strangely, ArcGIS documentation says 'value' is a string,
134
+ // not too sure if a comparison on other types is possible, or its always forced to string properties?
135
+ if (uvi.value === queryValue.toString()) {
136
+ this._symbol = uvi.symbol;
137
+ newSymbolApplied = true;
138
+ break;
139
+ }
140
+ }
141
+ }
142
+ }
143
+ // Fallback to default symbology to make sure we render something
144
+ if (!newSymbolApplied) {
145
+ this._symbol = this.defaultSymbol;
146
+ }
147
+ }
148
+ }
149
+ exports.ArcGisUniqueValueSymbologyRenderer = ArcGisUniqueValueSymbologyRenderer;
190
150
  //# sourceMappingURL=ArcGisSymbologyRenderer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ArcGisSymbologyRenderer.js","sourceRoot":"","sources":["../../../src/ArcGisFeature/ArcGisSymbologyRenderer.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { Logger } from \"@itwin/core-bentley\";\r\nimport { ColorDef } from \"@itwin/core-common\";\r\nimport { ArcGisFeatureGeometryType } from \"./ArcGisFeatureQuery\";\r\n\r\n// Convert a channel array [r, g, b, a] to ColorDef\r\nfunction colorFromArray(channels?: number[]) {\r\n if (channels && channels.length === 4) {\r\n // Alpha channel is reversed, 255 = opaque\r\n return ColorDef.from(channels[0], channels[1], channels[2], 255 - channels[3]);\r\n }\r\n return undefined;\r\n}\r\n\r\nconst loggerCategory = \"MapLayersFormats.ArcGISFeature\";\r\n\r\n/** @internal */\r\nexport type EsriSymbolType = \"esriSFS\" | \"esriPMS\" | \"esriSLS\" | \"esriSMS\" | \"esriTS\" | \"CIMSymbolReference\";\r\ninterface EsriSymbol {\r\n type: EsriSymbolType;\r\n}\r\n\r\n/** @internal */\r\nexport type EsriSLSStyle = \"esriSLSDash\" | \"esriSLSDashDot\" | \"esriSLSDashDotDot\" | \"esriSLSDot\" | \"esriSLSLongDash\" | \"esriSLSLongDashDot\" |\r\n\"esriSLSNull\" | \"esriSLSShortDash\" | \"esriSLSShortDashDot\" | \"esriSLSShortDashDotDot\" | \"esriSLSShortDot\" | \"esriSLSSolid\";\r\n\r\ninterface EsriSLSProps {\r\n color: number[];\r\n type: EsriSymbolType;\r\n width: number;\r\n style: EsriSLSStyle;\r\n}\r\n\r\n/** @internal */\r\nexport class EsriSLS implements EsriSymbol {\r\n public readonly props: EsriSLSProps;\r\n\r\n public get color() { return colorFromArray(this.props.color); }\r\n public get type() { return this.props.type; }\r\n public get width() { return this.props.width; }\r\n public get style() { return this.props.style; }\r\n\r\n constructor(json: EsriSLSProps) {\r\n this.props = json;\r\n }\r\n\r\n public static fromJSON(json: EsriSLSProps) {\r\n return new EsriSLS(json);\r\n }\r\n}\r\n\r\ninterface EsriPMSProps {\r\n type: EsriSymbolType;\r\n url: string;\r\n imageData: string;\r\n contentType: string;\r\n width?: number;\r\n height?: number;\r\n xoffset?: number;\r\n yoffset?: number;\r\n angle?: number;\r\n}\r\n\r\n/** @internal */\r\nexport class EsriPMS implements EsriSymbol {\r\n public readonly props: EsriPMSProps;\r\n private _image: HTMLImageElement;\r\n\r\n public get type() { return this.props.type; }\r\n public get url() { return this.props.url; }\r\n public get imageData() { return this.props.imageData; }\r\n public get imageUrl() { return `data:${this.contentType};base64,${this.imageData}`; }\r\n public get image() { return this._image; }\r\n public get contentType() { return this.props.contentType; }\r\n public get width() { return this.props.width; }\r\n public get height() { return this.props.height; }\r\n public get xoffset() { return this.props.xoffset; }\r\n public get yoffset() { return this.props.yoffset; }\r\n public get angle() { return this.props.angle; }\r\n\r\n constructor(json: EsriPMSProps) {\r\n this.props = json;\r\n this._image = new Image();\r\n this._image.src = this.imageUrl;\r\n }\r\n\r\n public static fromJSON(json: EsriPMSProps) {\r\n return new EsriPMS(json);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport type EsriSFSStyleProps = \"esriSFSBackwardDiagonal\" | \"esriSFSCross\" | \"esriSFSDiagonalCross\" | \"esriSFSForwardDiagonal\" | \"esriSFSHorizontal\" | \"esriSFSNull\" | \"esriSFSSolid\" | \"esriSFSVertical\";\r\ninterface EsriSFSProps {\r\n color?: number[];\r\n type: EsriSymbolType;\r\n style: EsriSFSStyleProps;\r\n outline?: EsriSLSProps;\r\n}\r\n\r\n/** @internal */\r\nexport class EsriSFS implements EsriSymbol {\r\n public readonly props: EsriSFSProps;\r\n private _outline: EsriSLS | undefined;\r\n\r\n public get color() { return colorFromArray(this.props.color); }\r\n public get type() { return this.props.type; }\r\n public get style() { return this.props.style; }\r\n public get outline() { return this._outline; }\r\n constructor(json: EsriSFSProps) {\r\n this.props = json;\r\n if (json.outline)\r\n this._outline = EsriSLS.fromJSON(json.outline);\r\n }\r\n\r\n public static fromJSON(json: EsriSFSProps): EsriSFS {\r\n return new EsriSFS(json);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class ArcGisSymbologyRenderer {\r\n private _symbol: EsriSymbol | undefined;\r\n\r\n private static readonly defaultPMS: EsriPMSProps = {\r\n type: \"esriPMS\",\r\n url: \"\",\r\n contentType: \"image/png\",\r\n imageData: \"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAmBJREFUOE+Nk01IVFEUx//n3jfvOZOaJkMtiiJ7o9RG3LgoqKhFSFJBTS1ahFBBi0ijfJXCIyQr+hBbSIsoW7iQoKKFCw2CkAI3tZAgy8Ei+xhoTCbnje/NPfHGnA816KzuPR+/c8/HJRQJE7o+VUhym0DcCOYGgBQEXjOLlyqo+nHanCkMoaL4rslKjZwOQLT4ek3Mmz3FACFNLB67ut6M1nWphbg8wI6VyJK5KEH0EQFVJRKbwzokAW++p/ErraAYSQK3u47bC3vLnA+ZB9i2gHF0oyQMCfCGNaUa+vauxs71wWz2V18cnBj8gQ8J1/eeBnHUa4sMFQDGdGno+4gwEAoQzjVUon3rqlx1KY9x7+0MWobjAPg3QJ2eZV4tAEyFNCN5FkSXyw2B3j1hRGvLcgBXMV5MptA4MOXr0gT0u5bZnAf0jBsyiSgJPAxqhON1K3FlRxUMvwFAtv7u0Wl0jvwEmJNEuOhakTt5wKEBifr6Oo14BIBRpgt07w6jcVMIngKGY7NofR5HwlF+zDcpsC193vyYB/innvHywCzdZfAR/+onX1segBTAxHzzfPE7/8yzzIPLjJE1LTixHZx5CtCK4gXLzovBiDPUsYxVM7gUkB3nWKlm6DYEnQGzXARxCOK+a1WfKtQXb6LNAvr7iCboCUA1Ocdsdv5KLPe7F6pH/w3wLbc+BwOuc5IZ1wEE/jonQbjptZn24tKKX7BgvR2r0NKZRwDvAqCI+Z30VJPTURv7P4A9psuQcYAUPwAoReBLrmX2Lmls7i8sZ7kWLwuoxA1FVJGxzMPLufi6P2r+2xFbOUjGAAAAAElFTkSuQmCC\",\r\n width: 16,\r\n height: 16,\r\n xoffset: -8,\r\n yoffset: -16,\r\n };\r\n\r\n private static readonly defaultSLS: EsriSLSProps = {\r\n type: \"esriSLS\",\r\n color: [0, 0, 0, 255],\r\n width: 1,\r\n style: \"esriSLSSolid\",\r\n };\r\n\r\n private static readonly defaultSFS: EsriSFSProps = {\r\n type: \"esriSFS\",\r\n color: [0, 0, 0, 255],\r\n style: \"esriSFSSolid\",\r\n };\r\n\r\n constructor(geometryType: ArcGisFeatureGeometryType, rendererDefinition: any) {\r\n let symbol;\r\n if (rendererDefinition?.symbol) {\r\n symbol = rendererDefinition.symbol;\r\n } else if (rendererDefinition?.defaultSymbol) {\r\n symbol = rendererDefinition?.defaultSymbol;\r\n }\r\n\r\n if (symbol) {\r\n if (symbol.type === \"esriSFS\") {\r\n this._symbol = EsriSFS.fromJSON(symbol);\r\n } else if (symbol.type === \"esriSLS\") {\r\n this._symbol = EsriSLS.fromJSON(symbol);\r\n } else if (symbol.type === \"esriPMS\") {\r\n this._symbol = EsriPMS.fromJSON(symbol);\r\n }\r\n }\r\n\r\n // If '_symbol' is still undefined at this point, that means we could not find\r\n // any symbology definition from the metadata, let's use some default symbology\r\n // so that we display at least something.\r\n if (this._symbol === undefined) {\r\n Logger.logWarning(loggerCategory, \"Symbology definition not supported, using default symbology\");\r\n if (geometryType === \"esriGeometryPoint\" || geometryType === \"esriGeometryMultipoint\") {\r\n this._symbol = EsriPMS.fromJSON(ArcGisSymbologyRenderer.defaultPMS);\r\n } else if (geometryType === \"esriGeometryLine\" || geometryType === \"esriGeometryPolyline\") {\r\n this._symbol = EsriSLS.fromJSON(ArcGisSymbologyRenderer.defaultSLS);\r\n } else if (geometryType === \"esriGeometryPolygon\") {\r\n this._symbol = EsriSFS.fromJSON(ArcGisSymbologyRenderer.defaultSFS);\r\n } else {\r\n Logger.logError(loggerCategory, \"Could not determine default symbology: geometry type not supported\");\r\n }\r\n }\r\n }\r\n\r\n public applyFillStyle(context: CanvasRenderingContext2D) {\r\n if (!context)\r\n return;\r\n\r\n if (this._symbol?.type === \"esriSFS\") {\r\n const sfs = this._symbol as EsriSFS;\r\n if (sfs.style === \"esriSFSSolid\" && sfs.color) {\r\n context.fillStyle = sfs.color.toRgbaString();\r\n } else {\r\n context.fillStyle = ColorDef.from(200, 0, 0, 100).toRgbaString(); // default color is red?\r\n }\r\n }\r\n }\r\n\r\n public applyStrokeStyle(context: CanvasRenderingContext2D) {\r\n if (!context)\r\n return;\r\n\r\n let sls: EsriSLS | undefined;\r\n if (this._symbol?.type === \"esriSFS\") {\r\n const sfs = this._symbol as EsriSFS;\r\n if (sfs.outline && sfs.outline.style === \"esriSLSSolid\") {\r\n sls = sfs.outline;\r\n }\r\n } else if (this._symbol?.type === \"esriSLS\") {\r\n sls = this._symbol as EsriSLS;\r\n }\r\n\r\n if (sls) {\r\n if (sls.color)\r\n context.strokeStyle = sls.color.toRgbaString();\r\n context.lineWidth = sls.width * 2; // TODO: Should we scale this value here?\r\n }\r\n }\r\n\r\n public drawPoint(context: CanvasRenderingContext2D, ptX: number, ptY: number) {\r\n if (!context)\r\n return;\r\n\r\n if (this._symbol?.type === \"esriPMS\") {\r\n const pms = this._symbol as EsriPMS;\r\n let xOffset = 0, yOffset = 0;\r\n if (pms.xoffset)\r\n xOffset = pms.xoffset;\r\n else if (pms.width)\r\n xOffset = pms.width * -0.5; // if no offset center in the middle\r\n\r\n if (pms.yoffset)\r\n yOffset = pms.yoffset;\r\n else if (pms.height)\r\n yOffset = pms.height * -0.5; // if no offset center in the middle\r\n\r\n if (pms.width && pms.height) {\r\n context.drawImage(pms.image, ptX + xOffset, ptY + yOffset, pms.width, pms.height);\r\n } else {\r\n context.drawImage(pms.image, ptX + xOffset, ptY + yOffset);\r\n }\r\n\r\n // TODO: marker rotation angle\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"ArcGisSymbologyRenderer.js","sourceRoot":"","sources":["../../../src/ArcGisFeature/ArcGisSymbologyRenderer.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { Logger } from \"@itwin/core-bentley\";\r\nimport { ColorDef } from \"@itwin/core-common\";\r\nimport { EsriPMS, EsriRenderer, EsriSFS, EsriSimpleRenderer, EsriSLS, EsriSymbol, EsriUniqueValueRenderer } from \"./EsriSymbology\";\r\nimport { ArcGisAttributeDrivenSymbology } from \"@itwin/core-frontend\";\r\n\r\n/** @internal */\r\nconst loggerCategory = \"MapLayersFormats.ArcGISFeature\";\r\n\r\n/** @internal */\r\nexport type ArcGisSymbologyRendererType = \"simple\" | \"attributeDriven\";\r\n\r\n/** @internal */\r\nexport abstract class ArcGisSymbologyRenderer {\r\n public abstract isAttributeDriven(): this is ArcGisAttributeDrivenSymbology;\r\n public abstract applyFillStyle(context: CanvasRenderingContext2D): void;\r\n public abstract applyStrokeStyle(context: CanvasRenderingContext2D): void;\r\n public abstract drawPoint(context: CanvasRenderingContext2D, ptX: number, ptY: number): void;\r\n\r\n public static create(renderer: EsriRenderer|undefined, defaultSymbol: EsriSymbol) {\r\n if (renderer?.type === \"uniqueValue\") {\r\n return new ArcGisUniqueValueSymbologyRenderer(renderer as EsriUniqueValueRenderer, defaultSymbol);\r\n } else {\r\n return new ArcGisSimpleSymbologyRenderer(renderer, defaultSymbol);\r\n }\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class ArcGisSimpleSymbologyRenderer extends ArcGisSymbologyRenderer {\r\n public override isAttributeDriven(): this is ArcGisAttributeDrivenSymbology {return false;}\r\n public lineWidthScaleFactor = 2; // This is value is empirical, this might need to be adjusted\r\n\r\n public get symbol() {return this._symbol;}\r\n public get defaultSymbol() {return this._defaultSymbol;}\r\n protected _symbol: EsriSymbol;\r\n protected _defaultSymbol: EsriSymbol;\r\n\r\n public readonly renderer?: EsriRenderer;\r\n\r\n public constructor(renderer: EsriRenderer|undefined, defaultSymbol: EsriSymbol) {\r\n super();\r\n this._defaultSymbol = defaultSymbol;\r\n this.renderer = renderer;\r\n\r\n if (this.renderer?.type === \"simple\") {\r\n this._symbol = (this.renderer as EsriSimpleRenderer).symbol;\r\n } else {\r\n this._symbol = defaultSymbol;\r\n }\r\n\r\n }\r\n\r\n public applyFillStyle(context: CanvasRenderingContext2D) {\r\n if (!context)\r\n return;\r\n\r\n const fillColor = this.getFillColor();\r\n if (fillColor) {\r\n context.fillStyle = fillColor.toRgbaString();\r\n } else {\r\n Logger.logTrace(loggerCategory, `Could not apply fill style`);\r\n }\r\n }\r\n\r\n private getFillColor() {\r\n let fillColor: ColorDef | undefined;\r\n if (this._symbol.type === \"esriSFS\") {\r\n const sfs = this._symbol as EsriSFS;\r\n if (sfs.color) {\r\n fillColor = sfs.color;\r\n }\r\n }\r\n\r\n return fillColor;\r\n }\r\n\r\n public applyStrokeStyle(context: CanvasRenderingContext2D) {\r\n if (!context)\r\n return;\r\n\r\n // Stroke style can be from SFS's outline style or a SLS's color\r\n let sls: EsriSLS | undefined;\r\n if (this._symbol.type === \"esriSFS\") {\r\n const sfs = this._symbol as EsriSFS;\r\n if (sfs.outline && sfs.outline.style === \"esriSLSSolid\") {\r\n sls = sfs.outline;\r\n }\r\n } else if (this._symbol.type === \"esriSLS\") {\r\n sls = this._symbol as EsriSLS;\r\n }\r\n\r\n if (sls) {\r\n if (sls.color)\r\n context.strokeStyle = sls.color.toRgbaString();\r\n context.lineWidth = sls.width * this.lineWidthScaleFactor;\r\n } else {\r\n Logger.logTrace(loggerCategory, `Could not apply stroke style`);\r\n }\r\n\r\n }\r\n\r\n public drawPoint(context: CanvasRenderingContext2D, ptX: number, ptY: number) {\r\n if (!context)\r\n return;\r\n\r\n if (this._symbol.type === \"esriPMS\") {\r\n const pms = this._symbol as EsriPMS;\r\n let xOffset = 0, yOffset = 0;\r\n if (pms.xoffset)\r\n xOffset = pms.xoffset;\r\n else if (pms.width)\r\n xOffset = pms.width * -0.5; // if no offset center in the middle\r\n\r\n if (pms.yoffset)\r\n yOffset = pms.yoffset;\r\n else if (pms.height)\r\n yOffset = pms.height * -0.5; // if no offset center in the middle\r\n\r\n if (pms.width && pms.height) {\r\n context.drawImage(pms.image, ptX + xOffset, ptY + yOffset, pms.width, pms.height);\r\n } else {\r\n context.drawImage(pms.image, ptX + xOffset, ptY + yOffset);\r\n }\r\n\r\n // TODO: marker rotation angle\r\n }\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class ArcGisUniqueValueSymbologyRenderer extends ArcGisSimpleSymbologyRenderer implements ArcGisAttributeDrivenSymbology {\r\n public override isAttributeDriven(): this is ArcGisAttributeDrivenSymbology {return true;}\r\n protected _activeFeatureAttributes: {[key: string]: any} | undefined;\r\n protected uvRenderer: EsriUniqueValueRenderer;\r\n\r\n public get rendererFields() {\r\n if (this.uvRenderer.field1)\r\n return [this.uvRenderer.field1];\r\n else\r\n return undefined;\r\n }\r\n\r\n public constructor(renderer: EsriUniqueValueRenderer, defaultSymbol: EsriSymbol) {\r\n super(renderer, defaultSymbol);\r\n\r\n this.uvRenderer = (this.renderer as EsriUniqueValueRenderer);\r\n if (this.uvRenderer.defaultSymbol) {\r\n this._defaultSymbol = this.uvRenderer.defaultSymbol;\r\n this._symbol = this.defaultSymbol;\r\n }\r\n }\r\n\r\n public setActiveFeatureAttributes(attributes: { [key: string]: any }) {\r\n this._activeFeatureAttributes = attributes;\r\n\r\n let newSymbolApplied = false;\r\n if (this._activeFeatureAttributes) {\r\n if (this.uvRenderer.field1 && Object.keys(this._activeFeatureAttributes).includes(this.uvRenderer.field1)) {\r\n\r\n const queryValue = this._activeFeatureAttributes[this.uvRenderer.field1];\r\n\r\n for (const uvi of this.uvRenderer.uniqueValueInfos) {\r\n // Strangely, ArcGIS documentation says 'value' is a string,\r\n // not too sure if a comparison on other types is possible, or its always forced to string properties?\r\n if (uvi.value === queryValue.toString()) {\r\n this._symbol = uvi.symbol;\r\n newSymbolApplied = true;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Fallback to default symbology to make sure we render something\r\n if (!newSymbolApplied) {\r\n this._symbol = this.defaultSymbol;\r\n }\r\n }\r\n}\r\n"]}
@@ -0,0 +1,152 @@
1
+ import { ColorDef } from "@itwin/core-common";
2
+ /** @internal */
3
+ export type EsriSymbolPropsType = "esriSFS" | "esriPMS" | "esriSLS" | "esriSMS" | "esriTS" | "CIMSymbolReference";
4
+ /** @internal */
5
+ export interface EsriSymbolCommonProps {
6
+ type: EsriSymbolPropsType;
7
+ }
8
+ /** @internal */
9
+ export type EsriSymbolProps = EsriSLSProps | EsriPMSProps | EsriSFSProps;
10
+ /** @internal */
11
+ export declare abstract class EsriSymbol implements EsriSymbolCommonProps {
12
+ abstract readonly type: EsriSymbolPropsType;
13
+ static fromJSON(props: EsriSymbolProps): EsriSFS | EsriSLS | EsriPMS;
14
+ }
15
+ /** @internal */
16
+ export type EsriSLSStyle = "esriSLSDash" | "esriSLSDashDot" | "esriSLSDashDotDot" | "esriSLSDot" | "esriSLSLongDash" | "esriSLSLongDashDot" | "esriSLSNull" | "esriSLSShortDash" | "esriSLSShortDashDot" | "esriSLSShortDashDotDot" | "esriSLSShortDot" | "esriSLSSolid";
17
+ /** @internal */
18
+ export interface EsriSLSProps extends EsriSymbolCommonProps {
19
+ color: number[];
20
+ type: EsriSymbolPropsType;
21
+ width: number;
22
+ style: EsriSLSStyle;
23
+ }
24
+ /** @internal */
25
+ export declare class EsriSLS implements EsriSymbolCommonProps {
26
+ readonly props: EsriSLSProps;
27
+ get color(): ColorDef | undefined;
28
+ get type(): EsriSymbolPropsType;
29
+ get width(): number;
30
+ get style(): EsriSLSStyle;
31
+ constructor(json: EsriSLSProps);
32
+ static fromJSON(json: EsriSLSProps): EsriSLS;
33
+ }
34
+ /** @internal */
35
+ export interface EsriPMSProps extends EsriSymbolCommonProps {
36
+ type: EsriSymbolPropsType;
37
+ url: string;
38
+ imageData: string;
39
+ contentType: string;
40
+ width?: number;
41
+ height?: number;
42
+ xoffset?: number;
43
+ yoffset?: number;
44
+ angle?: number;
45
+ }
46
+ /** @internal */
47
+ export declare class EsriPMS implements EsriSymbolCommonProps {
48
+ readonly props: EsriPMSProps;
49
+ private _image;
50
+ get type(): EsriSymbolPropsType;
51
+ get url(): string;
52
+ get imageData(): string;
53
+ get imageUrl(): string;
54
+ get image(): HTMLImageElement;
55
+ get contentType(): string;
56
+ get width(): number | undefined;
57
+ get height(): number | undefined;
58
+ get xoffset(): number | undefined;
59
+ get yoffset(): number | undefined;
60
+ get angle(): number | undefined;
61
+ loadImage(): Promise<void>;
62
+ private constructor();
63
+ static fromJSON(json: EsriPMSProps): EsriPMS;
64
+ }
65
+ /** @internal */
66
+ export type EsriSFSStyleProps = "esriSFSBackwardDiagonal" | "esriSFSCross" | "esriSFSDiagonalCross" | "esriSFSForwardDiagonal" | "esriSFSHorizontal" | "esriSFSNull" | "esriSFSSolid" | "esriSFSVertical";
67
+ /** @internal */
68
+ export interface EsriSFSProps {
69
+ color?: number[];
70
+ type: EsriSymbolPropsType;
71
+ style: EsriSFSStyleProps;
72
+ outline?: EsriSLSProps;
73
+ }
74
+ /** @internal */
75
+ export declare class EsriSFS implements EsriSymbolCommonProps {
76
+ readonly props: EsriSFSProps;
77
+ private _outline;
78
+ get color(): ColorDef | undefined;
79
+ get type(): EsriSymbolPropsType;
80
+ get style(): EsriSFSStyleProps;
81
+ get outline(): EsriSLS | undefined;
82
+ constructor(json: EsriSFSProps);
83
+ static fromJSON(json: EsriSFSProps): EsriSFS;
84
+ }
85
+ /** @internal */
86
+ export interface EsriUniqueValueInfoProps {
87
+ value: string;
88
+ label?: string;
89
+ description?: string;
90
+ symbol: EsriSymbolProps;
91
+ }
92
+ /** @internal */
93
+ export declare class EsriUniqueValueInfo {
94
+ readonly value: string;
95
+ readonly label: string | undefined;
96
+ readonly description: string | undefined;
97
+ readonly symbol: EsriSymbol;
98
+ private constructor();
99
+ static fromJSON(json: EsriUniqueValueInfoProps): EsriUniqueValueInfo;
100
+ }
101
+ /** @internal */
102
+ export interface EsriRendererBaseProps {
103
+ type: EsriRendererType;
104
+ }
105
+ /** @internal */
106
+ export interface EsriSimpleRendererProps extends EsriRendererBaseProps {
107
+ symbol: EsriSymbolProps;
108
+ }
109
+ /** @internal */
110
+ export interface EsriUniqueValueRendererProps extends EsriRendererBaseProps {
111
+ symbol?: EsriSymbolProps;
112
+ }
113
+ /** @internal */
114
+ export interface EsriUniqueValueRendererProps extends EsriRendererBaseProps {
115
+ field1?: string;
116
+ field2?: string;
117
+ field3?: string;
118
+ defaultSymbol?: EsriSymbolProps;
119
+ uniqueValueInfos: EsriUniqueValueInfoProps[];
120
+ }
121
+ /** @internal */
122
+ export type EsriRendererType = "simple" | "uniqueValue";
123
+ /** @internal */
124
+ export type EsriRendererProps = EsriSimpleRendererProps | EsriUniqueValueRendererProps;
125
+ /** @internal */
126
+ export declare abstract class EsriRenderer {
127
+ abstract readonly type: EsriRendererType;
128
+ abstract initialize(): Promise<void>;
129
+ static fromJSON(json: EsriRendererProps): EsriRenderer;
130
+ }
131
+ /** @internal */
132
+ export declare class EsriSimpleRenderer extends EsriRenderer {
133
+ readonly type: EsriRendererType;
134
+ readonly symbol: EsriSymbol;
135
+ protected constructor(json: EsriSimpleRendererProps);
136
+ initialize(): Promise<void>;
137
+ static fromJSON(json: EsriSimpleRendererProps): EsriSimpleRenderer;
138
+ }
139
+ /** @internal */
140
+ export declare class EsriUniqueValueRenderer extends EsriRenderer {
141
+ private _props;
142
+ readonly type: EsriRendererType;
143
+ readonly defaultSymbol?: EsriSymbol;
144
+ readonly uniqueValueInfos: EsriUniqueValueInfo[];
145
+ get field1(): string | undefined;
146
+ get field2(): string | undefined;
147
+ get field3(): string | undefined;
148
+ protected constructor(json: EsriUniqueValueRendererProps);
149
+ initialize(): Promise<void>;
150
+ static fromJSON(json: EsriUniqueValueRendererProps): EsriUniqueValueRenderer;
151
+ }
152
+ //# sourceMappingURL=EsriSymbology.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EsriSymbology.d.ts","sourceRoot":"","sources":["../../../src/ArcGisFeature/EsriSymbology.ts"],"names":[],"mappings":"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"}