@itwin/map-layers-formats 4.6.0-dev.9 → 4.7.0-dev.3
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.
- package/CHANGELOG.md +13 -1
- package/lib/cjs/ArcGisFeature/ArcGisFeatureFormat.js +1 -1
- package/lib/cjs/ArcGisFeature/ArcGisFeatureFormat.js.map +1 -1
- package/lib/cjs/ArcGisFeature/ArcGisFeatureProvider.d.ts +15 -6
- package/lib/cjs/ArcGisFeature/ArcGisFeatureProvider.d.ts.map +1 -1
- package/lib/cjs/ArcGisFeature/ArcGisFeatureProvider.js +64 -54
- package/lib/cjs/ArcGisFeature/ArcGisFeatureProvider.js.map +1 -1
- package/lib/cjs/ArcGisFeature/ArcGisFeatureQuery.js.map +1 -1
- package/lib/cjs/ArcGisFeature/ArcGisFeatureReader.d.ts +7 -11
- package/lib/cjs/ArcGisFeature/ArcGisFeatureReader.d.ts.map +1 -1
- package/lib/cjs/ArcGisFeature/ArcGisFeatureReader.js +3 -19
- package/lib/cjs/ArcGisFeature/ArcGisFeatureReader.js.map +1 -1
- package/lib/cjs/ArcGisFeature/ArcGisFeatureResponse.js.map +1 -1
- package/lib/cjs/ArcGisFeature/ArcGisJsonFeatureReader.d.ts +3 -3
- package/lib/cjs/ArcGisFeature/ArcGisJsonFeatureReader.d.ts.map +1 -1
- package/lib/cjs/ArcGisFeature/ArcGisJsonFeatureReader.js +3 -4
- package/lib/cjs/ArcGisFeature/ArcGisJsonFeatureReader.js.map +1 -1
- package/lib/cjs/ArcGisFeature/ArcGisPbfFeatureReader.d.ts +3 -3
- package/lib/cjs/ArcGisFeature/ArcGisPbfFeatureReader.d.ts.map +1 -1
- package/lib/cjs/ArcGisFeature/ArcGisPbfFeatureReader.js +2 -3
- package/lib/cjs/ArcGisFeature/ArcGisPbfFeatureReader.js.map +1 -1
- package/lib/cjs/ArcGisFeature/ArcGisSymbologyRenderer.d.ts +35 -15
- package/lib/cjs/ArcGisFeature/ArcGisSymbologyRenderer.d.ts.map +1 -1
- package/lib/cjs/ArcGisFeature/ArcGisSymbologyRenderer.js +54 -48
- package/lib/cjs/ArcGisFeature/ArcGisSymbologyRenderer.js.map +1 -1
- package/lib/cjs/ArcGisFeature/EsriSymbology.d.ts +2 -1
- package/lib/cjs/ArcGisFeature/EsriSymbology.d.ts.map +1 -1
- package/lib/cjs/ArcGisFeature/EsriSymbology.js +2 -1
- package/lib/cjs/ArcGisFeature/EsriSymbology.js.map +1 -1
- package/lib/cjs/ArcGisFeature/esriPBuffer.gen.js +1 -1
- package/lib/cjs/ArcGisFeature/esriPBuffer.gen.js.map +1 -1
- package/lib/cjs/Feature/DefaultMarkerIcon.d.ts +10 -0
- package/lib/cjs/Feature/DefaultMarkerIcon.d.ts.map +1 -0
- package/lib/cjs/Feature/DefaultMarkerIcon.js +31 -0
- package/lib/cjs/Feature/DefaultMarkerIcon.js.map +1 -0
- package/lib/cjs/Feature/FeatureCanvasRenderer.d.ts +20 -0
- package/lib/cjs/Feature/FeatureCanvasRenderer.d.ts.map +1 -0
- package/lib/cjs/{ArcGisFeature/ArcGisCanvasRenderer.js → Feature/FeatureCanvasRenderer.js} +7 -6
- package/lib/cjs/Feature/FeatureCanvasRenderer.js.map +1 -0
- package/lib/cjs/Feature/FeatureInfoReader.d.ts +11 -0
- package/lib/cjs/Feature/FeatureInfoReader.d.ts.map +1 -0
- package/lib/cjs/Feature/FeatureInfoReader.js +35 -0
- package/lib/cjs/Feature/FeatureInfoReader.js.map +1 -0
- package/lib/cjs/Feature/FeatureSymbology.d.ts +8 -0
- package/lib/cjs/Feature/FeatureSymbology.d.ts.map +1 -0
- package/lib/cjs/Feature/FeatureSymbology.js +12 -0
- package/lib/cjs/Feature/FeatureSymbology.js.map +1 -0
- package/lib/cjs/Feature/RandomMapColor.d.ts +8 -0
- package/lib/cjs/Feature/RandomMapColor.d.ts.map +1 -0
- package/lib/cjs/Feature/RandomMapColor.js +29 -0
- package/lib/cjs/Feature/RandomMapColor.js.map +1 -0
- package/lib/cjs/GeoJSON/GeoJSONGeometry.d.ts +18 -0
- package/lib/cjs/GeoJSON/GeoJSONGeometry.d.ts.map +1 -0
- package/lib/cjs/GeoJSON/GeoJSONGeometry.js +11 -0
- package/lib/cjs/GeoJSON/GeoJSONGeometry.js.map +1 -0
- package/lib/cjs/GeoJSON/GeoJSONGeometryReader.d.ts +11 -0
- package/lib/cjs/GeoJSON/GeoJSONGeometryReader.d.ts.map +1 -0
- package/lib/cjs/GeoJSON/GeoJSONGeometryReader.js +83 -0
- package/lib/cjs/GeoJSON/GeoJSONGeometryReader.js.map +1 -0
- package/lib/cjs/OgcApiFeatures/OgcApiFeaturesFormat.d.ts +9 -0
- package/lib/cjs/OgcApiFeatures/OgcApiFeaturesFormat.d.ts.map +1 -0
- package/lib/cjs/OgcApiFeatures/OgcApiFeaturesFormat.js +94 -0
- package/lib/cjs/OgcApiFeatures/OgcApiFeaturesFormat.js.map +1 -0
- package/lib/cjs/OgcApiFeatures/OgcApiFeaturesProvider.d.ts +54 -0
- package/lib/cjs/OgcApiFeatures/OgcApiFeaturesProvider.d.ts.map +1 -0
- package/lib/cjs/OgcApiFeatures/OgcApiFeaturesProvider.js +477 -0
- package/lib/cjs/OgcApiFeatures/OgcApiFeaturesProvider.js.map +1 -0
- package/lib/cjs/OgcApiFeatures/OgcApiFeaturesReader.d.ts +23 -0
- package/lib/cjs/OgcApiFeatures/OgcApiFeaturesReader.d.ts.map +1 -0
- package/lib/cjs/OgcApiFeatures/OgcApiFeaturesReader.js +139 -0
- package/lib/cjs/OgcApiFeatures/OgcApiFeaturesReader.js.map +1 -0
- package/lib/cjs/Tools/GeometryTerrainDraper.d.ts +20 -0
- package/lib/cjs/Tools/GeometryTerrainDraper.d.ts.map +1 -0
- package/lib/cjs/Tools/GeometryTerrainDraper.js +153 -0
- package/lib/cjs/Tools/GeometryTerrainDraper.js.map +1 -0
- package/lib/cjs/Tools/MapFeatureInfoDecorator.d.ts +15 -10
- package/lib/cjs/Tools/MapFeatureInfoDecorator.d.ts.map +1 -1
- package/lib/cjs/Tools/MapFeatureInfoDecorator.js +191 -150
- package/lib/cjs/Tools/MapFeatureInfoDecorator.js.map +1 -1
- package/lib/cjs/Tools/MapFeatureInfoTool.d.ts.map +1 -1
- package/lib/cjs/Tools/MapFeatureInfoTool.js +7 -4
- package/lib/cjs/Tools/MapFeatureInfoTool.js.map +1 -1
- package/lib/cjs/mapLayersFormats.d.ts.map +1 -1
- package/lib/cjs/mapLayersFormats.js +5 -2
- package/lib/cjs/mapLayersFormats.js.map +1 -1
- package/lib/esm/ArcGisFeature/ArcGisFeatureFormat.js +1 -2
- package/lib/esm/ArcGisFeature/ArcGisFeatureFormat.js.map +1 -1
- package/lib/esm/ArcGisFeature/ArcGisFeatureProvider.d.ts +15 -6
- package/lib/esm/ArcGisFeature/ArcGisFeatureProvider.d.ts.map +1 -1
- package/lib/esm/ArcGisFeature/ArcGisFeatureProvider.js +63 -55
- package/lib/esm/ArcGisFeature/ArcGisFeatureProvider.js.map +1 -1
- package/lib/esm/ArcGisFeature/ArcGisFeatureQuery.js.map +1 -1
- package/lib/esm/ArcGisFeature/ArcGisFeatureReader.d.ts +7 -11
- package/lib/esm/ArcGisFeature/ArcGisFeatureReader.d.ts.map +1 -1
- package/lib/esm/ArcGisFeature/ArcGisFeatureReader.js +3 -19
- package/lib/esm/ArcGisFeature/ArcGisFeatureReader.js.map +1 -1
- package/lib/esm/ArcGisFeature/ArcGisFeatureResponse.js.map +1 -1
- package/lib/esm/ArcGisFeature/ArcGisJsonFeatureReader.d.ts +3 -3
- package/lib/esm/ArcGisFeature/ArcGisJsonFeatureReader.d.ts.map +1 -1
- package/lib/esm/ArcGisFeature/ArcGisJsonFeatureReader.js +3 -4
- package/lib/esm/ArcGisFeature/ArcGisJsonFeatureReader.js.map +1 -1
- package/lib/esm/ArcGisFeature/ArcGisPbfFeatureReader.d.ts +3 -3
- package/lib/esm/ArcGisFeature/ArcGisPbfFeatureReader.d.ts.map +1 -1
- package/lib/esm/ArcGisFeature/ArcGisPbfFeatureReader.js +2 -3
- package/lib/esm/ArcGisFeature/ArcGisPbfFeatureReader.js.map +1 -1
- package/lib/esm/ArcGisFeature/ArcGisSymbologyRenderer.d.ts +35 -15
- package/lib/esm/ArcGisFeature/ArcGisSymbologyRenderer.d.ts.map +1 -1
- package/lib/esm/ArcGisFeature/ArcGisSymbologyRenderer.js +52 -47
- package/lib/esm/ArcGisFeature/ArcGisSymbologyRenderer.js.map +1 -1
- package/lib/esm/ArcGisFeature/EsriSymbology.d.ts +2 -1
- package/lib/esm/ArcGisFeature/EsriSymbology.d.ts.map +1 -1
- package/lib/esm/ArcGisFeature/EsriSymbology.js +2 -1
- package/lib/esm/ArcGisFeature/EsriSymbology.js.map +1 -1
- package/lib/esm/ArcGisFeature/esriPBuffer.gen.js.map +1 -1
- package/lib/esm/Feature/DefaultMarkerIcon.d.ts +10 -0
- package/lib/esm/Feature/DefaultMarkerIcon.d.ts.map +1 -0
- package/lib/esm/Feature/DefaultMarkerIcon.js +27 -0
- package/lib/esm/Feature/DefaultMarkerIcon.js.map +1 -0
- package/lib/esm/Feature/FeatureCanvasRenderer.d.ts +20 -0
- package/lib/esm/Feature/FeatureCanvasRenderer.d.ts.map +1 -0
- package/lib/esm/{ArcGisFeature/ArcGisCanvasRenderer.js → Feature/FeatureCanvasRenderer.js} +6 -5
- package/lib/esm/Feature/FeatureCanvasRenderer.js.map +1 -0
- package/lib/esm/Feature/FeatureInfoReader.d.ts +11 -0
- package/lib/esm/Feature/FeatureInfoReader.d.ts.map +1 -0
- package/lib/esm/Feature/FeatureInfoReader.js +31 -0
- package/lib/esm/Feature/FeatureInfoReader.js.map +1 -0
- package/lib/esm/Feature/FeatureSymbology.d.ts +8 -0
- package/lib/esm/Feature/FeatureSymbology.d.ts.map +1 -0
- package/lib/esm/Feature/FeatureSymbology.js +8 -0
- package/lib/esm/Feature/FeatureSymbology.js.map +1 -0
- package/lib/esm/Feature/RandomMapColor.d.ts +8 -0
- package/lib/esm/Feature/RandomMapColor.d.ts.map +1 -0
- package/lib/esm/Feature/RandomMapColor.js +25 -0
- package/lib/esm/Feature/RandomMapColor.js.map +1 -0
- package/lib/esm/GeoJSON/GeoJSONGeometry.d.ts +18 -0
- package/lib/esm/GeoJSON/GeoJSONGeometry.d.ts.map +1 -0
- package/lib/esm/GeoJSON/GeoJSONGeometry.js +7 -0
- package/lib/esm/GeoJSON/GeoJSONGeometry.js.map +1 -0
- package/lib/esm/GeoJSON/GeoJSONGeometryReader.d.ts +11 -0
- package/lib/esm/GeoJSON/GeoJSONGeometryReader.d.ts.map +1 -0
- package/lib/esm/GeoJSON/GeoJSONGeometryReader.js +79 -0
- package/lib/esm/GeoJSON/GeoJSONGeometryReader.js.map +1 -0
- package/lib/esm/OgcApiFeatures/OgcApiFeaturesFormat.d.ts +9 -0
- package/lib/esm/OgcApiFeatures/OgcApiFeaturesFormat.d.ts.map +1 -0
- package/lib/esm/OgcApiFeatures/OgcApiFeaturesFormat.js +90 -0
- package/lib/esm/OgcApiFeatures/OgcApiFeaturesFormat.js.map +1 -0
- package/lib/esm/OgcApiFeatures/OgcApiFeaturesProvider.d.ts +54 -0
- package/lib/esm/OgcApiFeatures/OgcApiFeaturesProvider.d.ts.map +1 -0
- package/lib/esm/OgcApiFeatures/OgcApiFeaturesProvider.js +472 -0
- package/lib/esm/OgcApiFeatures/OgcApiFeaturesProvider.js.map +1 -0
- package/lib/esm/OgcApiFeatures/OgcApiFeaturesReader.d.ts +23 -0
- package/lib/esm/OgcApiFeatures/OgcApiFeaturesReader.d.ts.map +1 -0
- package/lib/esm/OgcApiFeatures/OgcApiFeaturesReader.js +135 -0
- package/lib/esm/OgcApiFeatures/OgcApiFeaturesReader.js.map +1 -0
- package/lib/esm/Tools/GeometryTerrainDraper.d.ts +20 -0
- package/lib/esm/Tools/GeometryTerrainDraper.d.ts.map +1 -0
- package/lib/esm/Tools/GeometryTerrainDraper.js +149 -0
- package/lib/esm/Tools/GeometryTerrainDraper.js.map +1 -0
- package/lib/esm/Tools/MapFeatureInfoDecorator.d.ts +15 -10
- package/lib/esm/Tools/MapFeatureInfoDecorator.d.ts.map +1 -1
- package/lib/esm/Tools/MapFeatureInfoDecorator.js +193 -152
- package/lib/esm/Tools/MapFeatureInfoDecorator.js.map +1 -1
- package/lib/esm/Tools/MapFeatureInfoTool.d.ts.map +1 -1
- package/lib/esm/Tools/MapFeatureInfoTool.js +7 -5
- package/lib/esm/Tools/MapFeatureInfoTool.js.map +1 -1
- package/lib/esm/mapLayersFormats.d.ts.map +1 -1
- package/lib/esm/mapLayersFormats.js +5 -3
- package/lib/esm/mapLayersFormats.js.map +1 -1
- package/package.json +18 -15
- package/lib/cjs/ArcGisFeature/ArcGisCanvasRenderer.d.ts +0 -19
- package/lib/cjs/ArcGisFeature/ArcGisCanvasRenderer.d.ts.map +0 -1
- package/lib/cjs/ArcGisFeature/ArcGisCanvasRenderer.js.map +0 -1
- package/lib/esm/ArcGisFeature/ArcGisCanvasRenderer.d.ts +0 -19
- package/lib/esm/ArcGisFeature/ArcGisCanvasRenderer.d.ts.map +0 -1
- package/lib/esm/ArcGisFeature/ArcGisCanvasRenderer.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArcGisPbfFeatureReader.js","sourceRoot":"","sources":["../../../src/ArcGisFeature/ArcGisPbfFeatureReader.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\nimport { esriPBuffer } from \"../ArcGisFeature/esriPBuffer.gen\";\r\nimport { ArcGisAttributeDrivenSymbology, ArcGisGeometryRenderer, ArcGisGraphicsRenderer, MapLayerFeature, MapLayerFeatureAttribute, MapLayerFeatureInfo, MapSubLayerFeatureInfo} from \"@itwin/core-frontend\";\r\nimport { PrimitiveValue, PropertyValueFormat, StandardTypeNames } from \"@itwin/appui-abstract\";\r\nimport { ImageMapLayerSettings } from \"@itwin/core-common\";\r\nimport { ArcGisBaseFeatureReader } from \"./ArcGisFeatureReader\";\r\nimport { ArcGisResponseData } from \"./ArcGisFeatureResponse\";\r\nimport { Logger } from \"@itwin/core-bentley\";\r\nimport { ArcGisFeatureGeometryType } from \"./ArcGisFeatureQuery\";\r\n\r\nconst esriGeometryType = esriPBuffer.FeatureCollectionPBuffer.GeometryType;\r\nconst loggerCategory = \"MapLayersFormats.ArcGISFeature\";\r\n\r\ninterface PbfFieldInfo {\r\n name: string;\r\n type: esriPBuffer.FeatureCollectionPBuffer.FieldType;\r\n}\r\n\r\n/** @internal */\r\nexport class ArcGisPbfFeatureReader extends ArcGisBaseFeatureReader {\r\n public constructor(settings: ImageMapLayerSettings, layerMetadata: any) {\r\n super(settings, layerMetadata);\r\n }\r\n\r\n public static getArcGisFeatureGeometryType(geomType: esriPBuffer.FeatureCollectionPBuffer.GeometryType): ArcGisFeatureGeometryType {\r\n switch (geomType) {\r\n case esriPBuffer.FeatureCollectionPBuffer.GeometryType.esriGeometryTypeMultipatch:\r\n return \"esriGeometryMultiPatch\";\r\n case esriPBuffer.FeatureCollectionPBuffer.GeometryType.esriGeometryTypeMultipoint:\r\n return \"esriGeometryMultipoint\";\r\n case esriPBuffer.FeatureCollectionPBuffer.GeometryType.esriGeometryTypePoint:\r\n return \"esriGeometryPoint\";\r\n case esriPBuffer.FeatureCollectionPBuffer.GeometryType.esriGeometryTypePolygon:\r\n return \"esriGeometryPolygon\";\r\n case esriPBuffer.FeatureCollectionPBuffer.GeometryType.esriGeometryTypePolyline:\r\n return \"esriGeometryPolyline\";\r\n default:\r\n return \"esriGeometryNull\";\r\n }\r\n }\r\n\r\n private getNumericValue(attrValue: esriPBuffer.FeatureCollectionPBuffer.Value) {\r\n const propertyValue: PrimitiveValue = { valueFormat: PropertyValueFormat.Primitive };\r\n let typename = StandardTypeNames.Number;\r\n if (attrValue.has_double_value) {\r\n const value = this.toFixedWithoutPadding(attrValue.double_value);\r\n propertyValue.value = value;\r\n typename = StandardTypeNames.Double;\r\n } else if (attrValue.has_float_value) {\r\n const value = this.toFixedWithoutPadding(attrValue.float_value);\r\n propertyValue.value = value;\r\n typename = StandardTypeNames.Float;\r\n } else if (attrValue.has_int64_value) {\r\n propertyValue.value = attrValue.int64_value;\r\n typename = StandardTypeNames.Integer;\r\n } else if (attrValue.has_sint64_value) {\r\n propertyValue.value = attrValue.sint64_value;\r\n typename = StandardTypeNames.Integer;\r\n } else if (attrValue.has_sint_value) {\r\n propertyValue.value = attrValue.sint_value;\r\n typename = StandardTypeNames.Integer;\r\n } else if (attrValue.has_uint64_value) {\r\n propertyValue.value = attrValue.uint64_value;\r\n typename = StandardTypeNames.Integer;\r\n } else if (attrValue.has_uint_value) {\r\n propertyValue.value = attrValue.uint_value;\r\n typename = StandardTypeNames.Integer;\r\n } else {\r\n propertyValue.value = undefined;\r\n }\r\n\r\n return { propertyValue, typename };\r\n }\r\n\r\n public getFeatureAttribute(fieldInfo: PbfFieldInfo, attrValue: esriPBuffer.FeatureCollectionPBuffer.Value): MapLayerFeatureAttribute|undefined {\r\n let propertyValue: PrimitiveValue = { valueFormat: PropertyValueFormat.Primitive };\r\n\r\n let typename = StandardTypeNames.String;\r\n if (fieldInfo.type === esriPBuffer.FeatureCollectionPBuffer.FieldType.esriFieldTypeDouble\r\n || fieldInfo.type === esriPBuffer.FeatureCollectionPBuffer.FieldType.esriFieldTypeInteger\r\n || fieldInfo.type === esriPBuffer.FeatureCollectionPBuffer.FieldType.esriFieldTypeSmallInteger\r\n || fieldInfo.type === esriPBuffer.FeatureCollectionPBuffer.FieldType.esriFieldTypeOID\r\n || fieldInfo.type === esriPBuffer.FeatureCollectionPBuffer.FieldType.esriFieldTypeSingle\r\n || fieldInfo.type === esriPBuffer.FeatureCollectionPBuffer.FieldType.esriFieldTypeDate\r\n ) {\r\n const value = this.getNumericValue(attrValue);\r\n if (value.propertyValue === undefined) {\r\n Logger.logError(loggerCategory, `Could not read numeric value for field ${fieldInfo.name}`);\r\n return undefined;\r\n }\r\n\r\n if (fieldInfo.type === esriPBuffer.FeatureCollectionPBuffer.FieldType.esriFieldTypeDate) {\r\n const test = (value.propertyValue.value as unknown) as number;\r\n propertyValue.value = new Date(test);\r\n typename = StandardTypeNames.DateTime;\r\n } else {\r\n typename = value.typename;\r\n propertyValue = value.propertyValue;\r\n }\r\n } else if (fieldInfo.type === esriPBuffer.FeatureCollectionPBuffer.FieldType.esriFieldTypeString) {\r\n if (attrValue.has_string_value) {\r\n propertyValue.value = attrValue.string_value;\r\n typename = StandardTypeNames.String;\r\n }\r\n } else if (fieldInfo.type === esriPBuffer.FeatureCollectionPBuffer.FieldType.esriFieldTypeGlobalID) {\r\n if (attrValue.has_string_value) {\r\n propertyValue.value = attrValue.string_value;\r\n typename = StandardTypeNames.String;\r\n } else {\r\n const value = this.getNumericValue(attrValue);\r\n if (value.propertyValue === undefined) {\r\n Logger.logError(loggerCategory, `Could not read GlobalId value for field ${fieldInfo.name}`);\r\n return undefined;\r\n }\r\n }\r\n } else if (attrValue.has_string_value) {\r\n // If we reach this case that probably mean we don't support the field type, simply try to output string value\r\n typename = StandardTypeNames.String;\r\n propertyValue.value = attrValue.string_value;\r\n } else if (attrValue.value_type === \"none\") {\r\n // Sometimes fields are just empty, use an empty string\r\n typename = StandardTypeNames.String;\r\n propertyValue.value = undefined;\r\n } else {\r\n Logger.logError(loggerCategory, `Could not read value for field ${fieldInfo.name}`);\r\n return undefined;\r\n }\r\n\r\n propertyValue.displayValue = this.getDisplayValue(typename, propertyValue.value);\r\n\r\n return {value: propertyValue, property: { name: fieldInfo.name, displayLabel: fieldInfo.name, typename } };\r\n }\r\n\r\n public async readAndRender(response: ArcGisResponseData, renderer: ArcGisGeometryRenderer) {\r\n if (!(response.data instanceof esriPBuffer.FeatureCollectionPBuffer)) {\r\n const msg = \"Response was not in PBF format\";\r\n Logger.logError(loggerCategory, msg);\r\n return;\r\n }\r\n\r\n const collection = response.data;\r\n if (!collection.has_queryResult || !collection.queryResult.has_featureResult || collection?.queryResult?.featureResult?.features === undefined)\r\n return;\r\n\r\n const attrSymbology = renderer.attributeSymbology;\r\n\r\n // Fields metadata is stored outside feature results, create dedicated array first\r\n const fields: PbfFieldInfo[] = [];\r\n for (const field of collection.queryResult.featureResult.fields)\r\n fields.push({name: field.name, type:field.fieldType});\r\n\r\n const geomType = collection.queryResult.featureResult.geometryType;\r\n const stride = (collection.queryResult.featureResult.hasM || collection.queryResult.featureResult.hasZ) ? 3 : 2;\r\n const relativeCoords = renderer.transform === undefined;\r\n for (const feature of collection.queryResult.featureResult.features) {\r\n\r\n // Render geometries\r\n if (renderer && feature?.has_geometry) {\r\n\r\n if (attrSymbology) {\r\n // Read attributes if needed (attribute driven symbology)\r\n this.applySymbologyAttributes(attrSymbology, feature, fields);\r\n }\r\n\r\n if (geomType === esriGeometryType.esriGeometryTypePoint || geomType === esriGeometryType.esriGeometryTypeMultipoint) {\r\n await renderer.renderPoint(feature.geometry.lengths, feature.geometry.coords, stride, relativeCoords);\r\n } else if (geomType === esriGeometryType.esriGeometryTypePolyline || geomType === esriGeometryType.esriGeometryTypePolygon) {\r\n const fill = (geomType === esriGeometryType.esriGeometryTypePolygon);\r\n await renderer.renderPath(feature.geometry.lengths, feature.geometry.coords, fill, stride, relativeCoords);\r\n }\r\n }\r\n\r\n }\r\n }\r\n\r\n private applySymbologyAttributes(attrSymbology: ArcGisAttributeDrivenSymbology, feature: esriPBuffer.FeatureCollectionPBuffer.Feature, fields: PbfFieldInfo[]) {\r\n if (attrSymbology) {\r\n const symbolFields = attrSymbology.rendererFields;\r\n if (symbolFields && symbolFields.length > 0 && feature.attributes) {\r\n let fieldIdx = 0;\r\n const featureAttr: {[key: string]: any} = {};\r\n for (const attrValue of feature.attributes) {\r\n if (fieldIdx > fields.length) {\r\n Logger.logError(loggerCategory, \"Error while read feature info data: fields metadata missing\");\r\n break;\r\n }\r\n const fieldInfo = fields[fieldIdx++];\r\n if (symbolFields.includes(fieldInfo.name)) {\r\n const attr = this.getFeatureAttribute(fieldInfo, attrValue);\r\n if (attr) {\r\n const primitiveValue = attr.value as PrimitiveValue;\r\n featureAttr[fieldInfo.name] = primitiveValue.value;\r\n }\r\n }\r\n\r\n }\r\n attrSymbology.setActiveFeatureAttributes(featureAttr);\r\n }\r\n }\r\n }\r\n\r\n public async readFeatureInfo(response: ArcGisResponseData, featureInfos: MapLayerFeatureInfo[], renderer?: ArcGisGraphicsRenderer) {\r\n if (!(response.data instanceof esriPBuffer.FeatureCollectionPBuffer)) {\r\n\r\n Logger.logError(loggerCategory, \"Response was not in PBF format\");\r\n }\r\n\r\n const collection = response.data as esriPBuffer.FeatureCollectionPBuffer;\r\n if (!collection.has_queryResult || !collection.queryResult.has_featureResult || collection?.queryResult?.featureResult?.features === undefined)\r\n return;\r\n\r\n const layerInfo: MapLayerFeatureInfo = { layerName: this._settings.name, subLayerInfos: [] };\r\n\r\n // Fields metadata is stored outside feature results, create dedicated array first\r\n const fields: PbfFieldInfo[] = [];\r\n for (const field of collection.queryResult.featureResult.fields)\r\n fields.push({name: field.name, type:field.fieldType});\r\n\r\n const geomType = collection.queryResult.featureResult.geometryType;\r\n const stride = (collection.queryResult.featureResult.hasM || collection.queryResult.featureResult.hasZ) ? 3 : 2;\r\n\r\n const subLayerInfo: MapSubLayerFeatureInfo = {\r\n subLayerName: this._layerMetadata.name,\r\n displayFieldName: this._layerMetadata.name,\r\n features: [],\r\n };\r\n\r\n // Read feature values\r\n for (const featureResponse of collection.queryResult.featureResult.features) {\r\n const feature: MapLayerFeature = { attributes: []};\r\n\r\n if (renderer && featureResponse?.has_geometry) {\r\n if (geomType === esriGeometryType.esriGeometryTypePoint || geomType === esriGeometryType.esriGeometryTypeMultipoint) {\r\n await renderer.renderPoint(featureResponse.geometry.lengths, featureResponse.geometry.coords, stride, true);\r\n } else if (geomType === esriGeometryType.esriGeometryTypePolyline || geomType === esriGeometryType.esriGeometryTypePolygon) {\r\n const fill = (geomType === esriGeometryType.esriGeometryTypePolygon);\r\n await renderer.renderPath(featureResponse.geometry.lengths, featureResponse.geometry.coords, fill, stride, true);\r\n }\r\n const graphics = renderer.moveGraphics();\r\n feature.geometries = graphics.map((graphic) => {\r\n return {graphic};\r\n });\r\n }\r\n\r\n let fieldIdx = 0;\r\n for (const attrValue of featureResponse.attributes) {\r\n if (fieldIdx > fields.length) {\r\n Logger.logError(loggerCategory, \"Error while read feature info data: fields metadata missing\");\r\n break;\r\n }\r\n // Convert everything to string for now\r\n const attr = this.getFeatureAttribute(fields[fieldIdx], attrValue);\r\n if (attr) {\r\n feature.attributes?.push(attr);\r\n }\r\n\r\n fieldIdx++;\r\n }\r\n subLayerInfo.features.push(feature);\r\n }\r\n\r\n if (layerInfo.subLayerInfos === undefined) {\r\n layerInfo.subLayerInfos = [];\r\n }\r\n layerInfo.subLayerInfos.push(subLayerInfo);\r\n featureInfos.push(layerInfo);\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"ArcGisPbfFeatureReader.js","sourceRoot":"","sources":["../../../src/ArcGisFeature/ArcGisPbfFeatureReader.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\nimport { esriPBuffer } from \"../ArcGisFeature/esriPBuffer.gen\";\r\nimport { FeatureAttributeDrivenSymbology, FeatureGeometryRenderer, GraphicsGeometryRenderer, MapLayerFeature, MapLayerFeatureAttribute, MapLayerFeatureInfo, MapSubLayerFeatureInfo} from \"@itwin/core-frontend\";\r\nimport { PrimitiveValue, PropertyValueFormat, StandardTypeNames } from \"@itwin/appui-abstract\";\r\nimport { ImageMapLayerSettings } from \"@itwin/core-common\";\r\nimport { ArcGisBaseFeatureReader } from \"./ArcGisFeatureReader\";\r\nimport { ArcGisResponseData } from \"./ArcGisFeatureResponse\";\r\nimport { Logger } from \"@itwin/core-bentley\";\r\nimport { ArcGisFeatureGeometryType } from \"./ArcGisFeatureQuery\";\r\n\r\nconst esriGeometryType = esriPBuffer.FeatureCollectionPBuffer.GeometryType;\r\nconst loggerCategory = \"MapLayersFormats.ArcGISFeature\";\r\n\r\ninterface PbfFieldInfo {\r\n name: string;\r\n type: esriPBuffer.FeatureCollectionPBuffer.FieldType;\r\n}\r\n\r\n/** @internal */\r\nexport class ArcGisPbfFeatureReader extends ArcGisBaseFeatureReader {\r\n public constructor(settings: ImageMapLayerSettings, layerMetadata: any) {\r\n super(settings, layerMetadata);\r\n }\r\n\r\n public static getArcGisFeatureGeometryType(geomType: esriPBuffer.FeatureCollectionPBuffer.GeometryType): ArcGisFeatureGeometryType {\r\n switch (geomType) {\r\n case esriPBuffer.FeatureCollectionPBuffer.GeometryType.esriGeometryTypeMultipatch:\r\n return \"esriGeometryMultiPatch\";\r\n case esriPBuffer.FeatureCollectionPBuffer.GeometryType.esriGeometryTypeMultipoint:\r\n return \"esriGeometryMultipoint\";\r\n case esriPBuffer.FeatureCollectionPBuffer.GeometryType.esriGeometryTypePoint:\r\n return \"esriGeometryPoint\";\r\n case esriPBuffer.FeatureCollectionPBuffer.GeometryType.esriGeometryTypePolygon:\r\n return \"esriGeometryPolygon\";\r\n case esriPBuffer.FeatureCollectionPBuffer.GeometryType.esriGeometryTypePolyline:\r\n return \"esriGeometryPolyline\";\r\n default:\r\n return \"esriGeometryNull\";\r\n }\r\n }\r\n\r\n private getNumericValue(attrValue: esriPBuffer.FeatureCollectionPBuffer.Value) {\r\n const propertyValue: PrimitiveValue = { valueFormat: PropertyValueFormat.Primitive };\r\n let typename = StandardTypeNames.Number;\r\n if (attrValue.has_double_value) {\r\n const value = this.toFixedWithoutPadding(attrValue.double_value);\r\n propertyValue.value = value;\r\n typename = StandardTypeNames.Double;\r\n } else if (attrValue.has_float_value) {\r\n const value = this.toFixedWithoutPadding(attrValue.float_value);\r\n propertyValue.value = value;\r\n typename = StandardTypeNames.Float;\r\n } else if (attrValue.has_int64_value) {\r\n propertyValue.value = attrValue.int64_value;\r\n typename = StandardTypeNames.Integer;\r\n } else if (attrValue.has_sint64_value) {\r\n propertyValue.value = attrValue.sint64_value;\r\n typename = StandardTypeNames.Integer;\r\n } else if (attrValue.has_sint_value) {\r\n propertyValue.value = attrValue.sint_value;\r\n typename = StandardTypeNames.Integer;\r\n } else if (attrValue.has_uint64_value) {\r\n propertyValue.value = attrValue.uint64_value;\r\n typename = StandardTypeNames.Integer;\r\n } else if (attrValue.has_uint_value) {\r\n propertyValue.value = attrValue.uint_value;\r\n typename = StandardTypeNames.Integer;\r\n } else {\r\n propertyValue.value = undefined;\r\n }\r\n\r\n return { propertyValue, typename };\r\n }\r\n\r\n public getFeatureAttribute(fieldInfo: PbfFieldInfo, attrValue: esriPBuffer.FeatureCollectionPBuffer.Value): MapLayerFeatureAttribute|undefined {\r\n let propertyValue: PrimitiveValue = { valueFormat: PropertyValueFormat.Primitive };\r\n\r\n let typename = StandardTypeNames.String;\r\n if (fieldInfo.type === esriPBuffer.FeatureCollectionPBuffer.FieldType.esriFieldTypeDouble\r\n || fieldInfo.type === esriPBuffer.FeatureCollectionPBuffer.FieldType.esriFieldTypeInteger\r\n || fieldInfo.type === esriPBuffer.FeatureCollectionPBuffer.FieldType.esriFieldTypeSmallInteger\r\n || fieldInfo.type === esriPBuffer.FeatureCollectionPBuffer.FieldType.esriFieldTypeOID\r\n || fieldInfo.type === esriPBuffer.FeatureCollectionPBuffer.FieldType.esriFieldTypeSingle\r\n || fieldInfo.type === esriPBuffer.FeatureCollectionPBuffer.FieldType.esriFieldTypeDate\r\n ) {\r\n const value = this.getNumericValue(attrValue);\r\n if (value.propertyValue === undefined) {\r\n Logger.logError(loggerCategory, `Could not read numeric value for field ${fieldInfo.name}`);\r\n return undefined;\r\n }\r\n\r\n if (fieldInfo.type === esriPBuffer.FeatureCollectionPBuffer.FieldType.esriFieldTypeDate) {\r\n const test = (value.propertyValue.value as unknown) as number;\r\n propertyValue.value = new Date(test);\r\n typename = StandardTypeNames.DateTime;\r\n } else {\r\n typename = value.typename;\r\n propertyValue = value.propertyValue;\r\n }\r\n } else if (fieldInfo.type === esriPBuffer.FeatureCollectionPBuffer.FieldType.esriFieldTypeString) {\r\n if (attrValue.has_string_value) {\r\n propertyValue.value = attrValue.string_value;\r\n typename = StandardTypeNames.String;\r\n }\r\n } else if (fieldInfo.type === esriPBuffer.FeatureCollectionPBuffer.FieldType.esriFieldTypeGlobalID) {\r\n if (attrValue.has_string_value) {\r\n propertyValue.value = attrValue.string_value;\r\n typename = StandardTypeNames.String;\r\n } else {\r\n const value = this.getNumericValue(attrValue);\r\n if (value.propertyValue === undefined) {\r\n Logger.logError(loggerCategory, `Could not read GlobalId value for field ${fieldInfo.name}`);\r\n return undefined;\r\n }\r\n }\r\n } else if (attrValue.has_string_value) {\r\n // If we reach this case that probably mean we don't support the field type, simply try to output string value\r\n typename = StandardTypeNames.String;\r\n propertyValue.value = attrValue.string_value;\r\n } else if (attrValue.value_type === \"none\") {\r\n // Sometimes fields are just empty, use an empty string\r\n typename = StandardTypeNames.String;\r\n propertyValue.value = undefined;\r\n } else {\r\n Logger.logError(loggerCategory, `Could not read value for field ${fieldInfo.name}`);\r\n return undefined;\r\n }\r\n\r\n propertyValue.displayValue = this.getDisplayValue(typename, propertyValue.value);\r\n\r\n return {value: propertyValue, property: { name: fieldInfo.name, displayLabel: fieldInfo.name, typename } };\r\n }\r\n\r\n public async readAndRender(response: ArcGisResponseData, renderer: FeatureGeometryRenderer) {\r\n if (!(response.data instanceof esriPBuffer.FeatureCollectionPBuffer)) {\r\n const msg = \"Response was not in PBF format\";\r\n Logger.logError(loggerCategory, msg);\r\n return;\r\n }\r\n\r\n const collection = response.data;\r\n if (!collection.has_queryResult || !collection.queryResult.has_featureResult || collection?.queryResult?.featureResult?.features === undefined)\r\n return;\r\n\r\n // Fields metadata is stored outside feature results, create dedicated array first\r\n const fields: PbfFieldInfo[] = [];\r\n for (const field of collection.queryResult.featureResult.fields)\r\n fields.push({name: field.name, type:field.fieldType});\r\n\r\n const geomType = collection.queryResult.featureResult.geometryType;\r\n\r\n const stride = (collection.queryResult.featureResult.hasM || collection.queryResult.featureResult.hasZ) ? 3 : 2;\r\n const relativeCoords = renderer.transform === undefined;\r\n for (const feature of collection.queryResult.featureResult.features) {\r\n\r\n // Render geometries\r\n if (renderer && feature?.has_geometry) {\r\n\r\n if (renderer.hasSymbologyRenderer() && renderer.symbolRenderer.isAttributeDriven()) {\r\n // Read attributes if needed (attribute driven symbology)\r\n this.applySymbologyAttributes(renderer.symbolRenderer, feature, fields);\r\n }\r\n\r\n if (geomType === esriGeometryType.esriGeometryTypePoint || geomType === esriGeometryType.esriGeometryTypeMultipoint) {\r\n await renderer.renderPoint(feature.geometry.lengths, feature.geometry.coords, stride, relativeCoords);\r\n } else if (geomType === esriGeometryType.esriGeometryTypePolyline || geomType === esriGeometryType.esriGeometryTypePolygon) {\r\n const fill = (geomType === esriGeometryType.esriGeometryTypePolygon);\r\n await renderer.renderPath(feature.geometry.lengths, feature.geometry.coords, fill, stride, relativeCoords);\r\n }\r\n }\r\n\r\n }\r\n }\r\n\r\n private applySymbologyAttributes(attrSymbology: FeatureAttributeDrivenSymbology, feature: esriPBuffer.FeatureCollectionPBuffer.Feature, fields: PbfFieldInfo[]) {\r\n if (attrSymbology) {\r\n const symbolFields = attrSymbology.rendererFields;\r\n if (symbolFields && symbolFields.length > 0 && feature.attributes) {\r\n let fieldIdx = 0;\r\n const featureAttr: {[key: string]: any} = {};\r\n for (const attrValue of feature.attributes) {\r\n if (fieldIdx > fields.length) {\r\n Logger.logError(loggerCategory, \"Error while read feature info data: fields metadata missing\");\r\n break;\r\n }\r\n const fieldInfo = fields[fieldIdx++];\r\n if (symbolFields.includes(fieldInfo.name)) {\r\n const attr = this.getFeatureAttribute(fieldInfo, attrValue);\r\n if (attr) {\r\n const primitiveValue = attr.value as PrimitiveValue;\r\n featureAttr[fieldInfo.name] = primitiveValue.value;\r\n }\r\n }\r\n\r\n }\r\n attrSymbology.setActiveFeatureAttributes(featureAttr);\r\n }\r\n }\r\n }\r\n\r\n public async readFeatureInfo(response: ArcGisResponseData, featureInfos: MapLayerFeatureInfo[], renderer?: GraphicsGeometryRenderer) {\r\n if (!(response.data instanceof esriPBuffer.FeatureCollectionPBuffer)) {\r\n\r\n Logger.logError(loggerCategory, \"Response was not in PBF format\");\r\n }\r\n\r\n const collection = response.data as esriPBuffer.FeatureCollectionPBuffer;\r\n if (!collection.has_queryResult || !collection.queryResult.has_featureResult || collection?.queryResult?.featureResult?.features === undefined)\r\n return;\r\n\r\n const layerInfo: MapLayerFeatureInfo = { layerName: this._settings.name, subLayerInfos: [] };\r\n\r\n // Fields metadata is stored outside feature results, create dedicated array first\r\n const fields: PbfFieldInfo[] = [];\r\n for (const field of collection.queryResult.featureResult.fields)\r\n fields.push({name: field.name, type:field.fieldType});\r\n\r\n const geomType = collection.queryResult.featureResult.geometryType;\r\n const stride = (collection.queryResult.featureResult.hasM || collection.queryResult.featureResult.hasZ) ? 3 : 2;\r\n\r\n const subLayerInfo: MapSubLayerFeatureInfo = {\r\n subLayerName: this._layerMetadata.name,\r\n displayFieldName: this._layerMetadata.name,\r\n features: [],\r\n };\r\n\r\n // Read feature values\r\n for (const featureResponse of collection.queryResult.featureResult.features) {\r\n const feature: MapLayerFeature = { attributes: []};\r\n\r\n if (renderer && featureResponse?.has_geometry) {\r\n if (geomType === esriGeometryType.esriGeometryTypePoint || geomType === esriGeometryType.esriGeometryTypeMultipoint) {\r\n await renderer.renderPoint(featureResponse.geometry.lengths, featureResponse.geometry.coords, stride, true);\r\n } else if (geomType === esriGeometryType.esriGeometryTypePolyline || geomType === esriGeometryType.esriGeometryTypePolygon) {\r\n const fill = (geomType === esriGeometryType.esriGeometryTypePolygon);\r\n await renderer.renderPath(featureResponse.geometry.lengths, featureResponse.geometry.coords, fill, stride, true);\r\n }\r\n const graphics = renderer.moveGraphics();\r\n feature.geometries = graphics.map((graphic) => {\r\n return {graphic};\r\n });\r\n }\r\n\r\n let fieldIdx = 0;\r\n for (const attrValue of featureResponse.attributes) {\r\n if (fieldIdx > fields.length) {\r\n Logger.logError(loggerCategory, \"Error while read feature info data: fields metadata missing\");\r\n break;\r\n }\r\n // Convert everything to string for now\r\n const attr = this.getFeatureAttribute(fields[fieldIdx], attrValue);\r\n if (attr) {\r\n feature.attributes?.push(attr);\r\n }\r\n\r\n fieldIdx++;\r\n }\r\n subLayerInfo.features.push(feature);\r\n }\r\n\r\n if (layerInfo.subLayerInfos === undefined) {\r\n layerInfo.subLayerInfos = [];\r\n }\r\n layerInfo.subLayerInfos.push(subLayerInfo);\r\n featureInfos.push(layerInfo);\r\n }\r\n}\r\n"]}
|
|
@@ -1,14 +1,29 @@
|
|
|
1
1
|
import { EsriClassBreaksRenderer, EsriRenderer, EsriSMS, EsriSymbol, EsriUniqueValueRenderer } from "./EsriSymbology";
|
|
2
|
-
import {
|
|
2
|
+
import { FeatureAttributeDrivenSymbology, FeatureSymbologyRenderer } from "@itwin/core-frontend";
|
|
3
|
+
import { FeatureDefaultSymbology } from "../Feature/FeatureSymbology";
|
|
4
|
+
import { ArcGisFeatureGeometryType } from "./ArcGisFeatureQuery";
|
|
3
5
|
/** @internal */
|
|
4
6
|
export type ArcGisSymbologyRendererType = "simple" | "attributeDriven";
|
|
7
|
+
/** Feature Symbology renderer applicable to an HTML 2D Canvas
|
|
8
|
+
* @internal
|
|
9
|
+
*/
|
|
10
|
+
export interface FeatureSymbologyCanvasRenderer extends FeatureSymbologyRenderer {
|
|
11
|
+
applyFillStyle(context: CanvasRenderingContext2D): void;
|
|
12
|
+
applyStrokeStyle(context: CanvasRenderingContext2D): void;
|
|
13
|
+
drawPoint(context: CanvasRenderingContext2D, ptX: number, ptY: number): void;
|
|
14
|
+
}
|
|
5
15
|
/** @internal */
|
|
6
|
-
export declare abstract class
|
|
7
|
-
abstract
|
|
16
|
+
export declare abstract class ArcGisSymbologyCanvasRenderer implements FeatureSymbologyCanvasRenderer {
|
|
17
|
+
abstract readonly renderer?: EsriRenderer;
|
|
18
|
+
abstract get symbol(): EsriSymbol;
|
|
19
|
+
abstract set symbol(symbol: EsriSymbol | undefined);
|
|
20
|
+
abstract get defaultSymbol(): EsriSymbol;
|
|
21
|
+
activeGeometryType: string;
|
|
22
|
+
abstract isAttributeDriven(): this is FeatureAttributeDrivenSymbology;
|
|
8
23
|
abstract applyFillStyle(context: CanvasRenderingContext2D): void;
|
|
9
24
|
abstract applyStrokeStyle(context: CanvasRenderingContext2D): void;
|
|
10
25
|
abstract drawPoint(context: CanvasRenderingContext2D, ptX: number, ptY: number): void;
|
|
11
|
-
static create(renderer: EsriRenderer | undefined, defaultSymbol:
|
|
26
|
+
static create(renderer: EsriRenderer | undefined, defaultSymbol: FeatureDefaultSymbology, geometryType?: ArcGisFeatureGeometryType): ArcGisSymbologyCanvasRenderer;
|
|
12
27
|
}
|
|
13
28
|
/** @internal */
|
|
14
29
|
export declare class ArcGisDashLineStyle {
|
|
@@ -37,15 +52,16 @@ export declare class ArcGisDashLineStyle {
|
|
|
37
52
|
};
|
|
38
53
|
}
|
|
39
54
|
/** @internal */
|
|
40
|
-
export declare class ArcGisSimpleSymbologyRenderer extends
|
|
41
|
-
|
|
55
|
+
export declare class ArcGisSimpleSymbologyRenderer extends ArcGisSymbologyCanvasRenderer {
|
|
56
|
+
protected _symbol: EsriSymbol | undefined;
|
|
57
|
+
protected _defaultSymbol: FeatureDefaultSymbology;
|
|
58
|
+
isAttributeDriven(): this is FeatureAttributeDrivenSymbology;
|
|
42
59
|
lineWidthScaleFactor: number;
|
|
43
60
|
get symbol(): EsriSymbol;
|
|
61
|
+
set symbol(symbol: EsriSymbol | undefined);
|
|
44
62
|
get defaultSymbol(): EsriSymbol;
|
|
45
|
-
protected _symbol: EsriSymbol;
|
|
46
|
-
protected _defaultSymbol: EsriSymbol;
|
|
47
63
|
readonly renderer?: EsriRenderer;
|
|
48
|
-
constructor(renderer: EsriRenderer | undefined, defaultSymbol:
|
|
64
|
+
constructor(renderer: EsriRenderer | undefined, defaultSymbol: FeatureDefaultSymbology, geometryType?: ArcGisFeatureGeometryType);
|
|
49
65
|
applyFillStyle(context: CanvasRenderingContext2D): void;
|
|
50
66
|
private getFillColor;
|
|
51
67
|
private applyLineDash;
|
|
@@ -61,27 +77,31 @@ export declare class ArcGisSimpleSymbologyRenderer extends ArcGisSymbologyRender
|
|
|
61
77
|
drawPoint(context: CanvasRenderingContext2D, ptX: number, ptY: number): void;
|
|
62
78
|
}
|
|
63
79
|
/** @internal */
|
|
64
|
-
export declare class ArcGisUniqueValueSymbologyRenderer extends ArcGisSimpleSymbologyRenderer implements
|
|
65
|
-
isAttributeDriven(): this is
|
|
80
|
+
export declare class ArcGisUniqueValueSymbologyRenderer extends ArcGisSimpleSymbologyRenderer implements FeatureAttributeDrivenSymbology {
|
|
81
|
+
isAttributeDriven(): this is FeatureAttributeDrivenSymbology;
|
|
66
82
|
protected _activeFeatureAttributes: {
|
|
67
83
|
[key: string]: any;
|
|
68
84
|
} | undefined;
|
|
69
85
|
protected uvRenderer: EsriUniqueValueRenderer;
|
|
86
|
+
private _defaultRenderSymbol;
|
|
87
|
+
get defaultSymbol(): EsriSymbol;
|
|
70
88
|
get rendererFields(): string[] | undefined;
|
|
71
|
-
constructor(renderer: EsriUniqueValueRenderer, defaultSymbol:
|
|
89
|
+
constructor(renderer: EsriUniqueValueRenderer, defaultSymbol: FeatureDefaultSymbology, geometryType?: ArcGisFeatureGeometryType);
|
|
72
90
|
setActiveFeatureAttributes(attributes: {
|
|
73
91
|
[key: string]: any;
|
|
74
92
|
}): void;
|
|
75
93
|
}
|
|
76
94
|
/** @internal */
|
|
77
|
-
export declare class ArcGisClassBreaksSymbologyRenderer extends ArcGisSimpleSymbologyRenderer implements
|
|
78
|
-
isAttributeDriven(): this is
|
|
95
|
+
export declare class ArcGisClassBreaksSymbologyRenderer extends ArcGisSimpleSymbologyRenderer implements FeatureAttributeDrivenSymbology {
|
|
96
|
+
isAttributeDriven(): this is FeatureAttributeDrivenSymbology;
|
|
79
97
|
protected _activeFeatureAttributes: {
|
|
80
98
|
[key: string]: any;
|
|
81
99
|
} | undefined;
|
|
82
100
|
protected cbRenderer: EsriClassBreaksRenderer;
|
|
101
|
+
private _defaultRenderSymbol;
|
|
102
|
+
get defaultSymbol(): EsriSymbol;
|
|
83
103
|
get rendererFields(): string[] | undefined;
|
|
84
|
-
constructor(renderer: EsriClassBreaksRenderer, defaultSymbol:
|
|
104
|
+
constructor(renderer: EsriClassBreaksRenderer, defaultSymbol: FeatureDefaultSymbology, geometryType?: ArcGisFeatureGeometryType);
|
|
85
105
|
setActiveFeatureAttributes(attributes: {
|
|
86
106
|
[key: string]: any;
|
|
87
107
|
}): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArcGisSymbologyRenderer.d.ts","sourceRoot":"","sources":["../../../src/ArcGisFeature/ArcGisSymbologyRenderer.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,uBAAuB,EAAW,YAAY,EAAsD,OAAO,EAAE,UAAU,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AACnL,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"ArcGisSymbologyRenderer.d.ts","sourceRoot":"","sources":["../../../src/ArcGisFeature/ArcGisSymbologyRenderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,21 +8,24 @@ import { Angle } from "@itwin/core-geometry";
|
|
|
8
8
|
/** @internal */
|
|
9
9
|
const loggerCategory = "MapLayersFormats.ArcGISFeature";
|
|
10
10
|
/** @internal */
|
|
11
|
-
export class
|
|
12
|
-
|
|
11
|
+
export class ArcGisSymbologyCanvasRenderer {
|
|
12
|
+
constructor() {
|
|
13
|
+
this.activeGeometryType = "";
|
|
14
|
+
}
|
|
15
|
+
static create(renderer, defaultSymbol, geometryType) {
|
|
13
16
|
if (renderer?.type === "uniqueValue") {
|
|
14
|
-
return new ArcGisUniqueValueSymbologyRenderer(renderer, defaultSymbol);
|
|
17
|
+
return new ArcGisUniqueValueSymbologyRenderer(renderer, defaultSymbol, geometryType);
|
|
15
18
|
}
|
|
16
19
|
else if (renderer?.type === "classBreaks") {
|
|
17
|
-
return new ArcGisClassBreaksSymbologyRenderer(renderer, defaultSymbol);
|
|
20
|
+
return new ArcGisClassBreaksSymbologyRenderer(renderer, defaultSymbol, geometryType);
|
|
18
21
|
}
|
|
19
22
|
else {
|
|
20
|
-
return new ArcGisSimpleSymbologyRenderer(renderer, defaultSymbol);
|
|
23
|
+
return new ArcGisSimpleSymbologyRenderer(renderer, defaultSymbol, geometryType);
|
|
21
24
|
}
|
|
22
25
|
}
|
|
23
26
|
}
|
|
24
27
|
/** @internal */
|
|
25
|
-
class ArcGisDashLineStyle {
|
|
28
|
+
export class ArcGisDashLineStyle {
|
|
26
29
|
}
|
|
27
30
|
_a = ArcGisDashLineStyle;
|
|
28
31
|
// ESRI does not provide any values for their line style definition, those values have been
|
|
@@ -51,23 +54,24 @@ ArcGisDashLineStyle.dashValues = {
|
|
|
51
54
|
esriSLSShortDashDotDot: [_a._dashLineLength, _a._dashShortGapLength, _a._dotLineLength, _a._dashGapLength, _a._dotLineLength, _a._dashShortGapLength],
|
|
52
55
|
esriSLSShortDot: [_a._shortDotLineLength, _a._shortDotGapLength],
|
|
53
56
|
};
|
|
54
|
-
export { ArcGisDashLineStyle };
|
|
55
57
|
/** @internal */
|
|
56
|
-
export class ArcGisSimpleSymbologyRenderer extends
|
|
58
|
+
export class ArcGisSimpleSymbologyRenderer extends ArcGisSymbologyCanvasRenderer {
|
|
57
59
|
isAttributeDriven() { return false; }
|
|
58
|
-
get symbol() { return this._symbol; }
|
|
59
|
-
|
|
60
|
-
|
|
60
|
+
get symbol() { return (this._symbol ?? this.defaultSymbol); }
|
|
61
|
+
set symbol(symbol) { this._symbol = symbol; }
|
|
62
|
+
get defaultSymbol() { return this._defaultSymbol.getSymbology(this.activeGeometryType); }
|
|
63
|
+
constructor(renderer, defaultSymbol, geometryType) {
|
|
61
64
|
super();
|
|
62
65
|
this.lineWidthScaleFactor = 2; // This is value is empirical, this might need to be adjusted
|
|
63
66
|
this._defaultSymbol = defaultSymbol;
|
|
67
|
+
// ArcGIS service normally advertise upfront he geometry of all features. It's always possible to opt-out, but then
|
|
68
|
+
// you will have to set the activeGeometryType before rendering.
|
|
69
|
+
if (geometryType)
|
|
70
|
+
this.activeGeometryType = geometryType;
|
|
64
71
|
this.renderer = renderer;
|
|
65
72
|
if (this.renderer?.type === "simple") {
|
|
66
73
|
this._symbol = this.renderer.symbol;
|
|
67
74
|
}
|
|
68
|
-
else {
|
|
69
|
-
this._symbol = defaultSymbol;
|
|
70
|
-
}
|
|
71
75
|
}
|
|
72
76
|
applyFillStyle(context) {
|
|
73
77
|
if (!context)
|
|
@@ -81,15 +85,16 @@ export class ArcGisSimpleSymbologyRenderer extends ArcGisSymbologyRenderer {
|
|
|
81
85
|
}
|
|
82
86
|
}
|
|
83
87
|
getFillColor() {
|
|
88
|
+
const symbol = this.symbol;
|
|
84
89
|
let fillColor;
|
|
85
|
-
if (
|
|
86
|
-
const sfs =
|
|
90
|
+
if (symbol.type === "esriSFS") {
|
|
91
|
+
const sfs = symbol;
|
|
87
92
|
if (sfs.color) {
|
|
88
93
|
fillColor = sfs.color;
|
|
89
94
|
}
|
|
90
95
|
}
|
|
91
|
-
else if (
|
|
92
|
-
const sms =
|
|
96
|
+
else if (symbol.type === "esriSMS") {
|
|
97
|
+
const sms = symbol;
|
|
93
98
|
if (sms.color) {
|
|
94
99
|
fillColor = sms.color;
|
|
95
100
|
}
|
|
@@ -106,24 +111,25 @@ export class ArcGisSimpleSymbologyRenderer extends ArcGisSymbologyRenderer {
|
|
|
106
111
|
return;
|
|
107
112
|
// Stroke style can be from SFS's outline style or a SLS's color
|
|
108
113
|
let sls;
|
|
109
|
-
|
|
110
|
-
|
|
114
|
+
const symbol = this.symbol;
|
|
115
|
+
if (symbol.type === "esriSFS") {
|
|
116
|
+
const sfs = this.symbol;
|
|
111
117
|
if (sfs.outline) {
|
|
112
118
|
sls = sfs.outline;
|
|
113
119
|
}
|
|
114
120
|
}
|
|
115
|
-
else if (
|
|
116
|
-
sls = this.
|
|
121
|
+
else if (symbol.type === "esriSLS") {
|
|
122
|
+
sls = this.symbol;
|
|
117
123
|
}
|
|
118
|
-
else if (
|
|
119
|
-
const sms = this.
|
|
124
|
+
else if (symbol.type === "esriSMS") {
|
|
125
|
+
const sms = this.symbol;
|
|
120
126
|
if (sms.outline) {
|
|
121
127
|
sls = sms.outline;
|
|
122
128
|
}
|
|
123
129
|
}
|
|
124
130
|
if (sls) {
|
|
125
131
|
context.lineWidth = (sls.width > 0 ? sls.width : 1);
|
|
126
|
-
if (
|
|
132
|
+
if (symbol.type === "esriSLS")
|
|
127
133
|
context.lineWidth *= this.lineWidthScaleFactor;
|
|
128
134
|
if (sls.color) {
|
|
129
135
|
context.strokeStyle = sls.color.toRgbaString();
|
|
@@ -236,12 +242,15 @@ export class ArcGisSimpleSymbologyRenderer extends ArcGisSymbologyRenderer {
|
|
|
236
242
|
drawPoint(context, ptX, ptY) {
|
|
237
243
|
if (!context)
|
|
238
244
|
return;
|
|
239
|
-
|
|
240
|
-
|
|
245
|
+
const symbol = this.symbol;
|
|
246
|
+
if (symbol.type === "esriPMS") {
|
|
247
|
+
const pms = this.symbol;
|
|
241
248
|
const angleDegrees = pms.angle;
|
|
242
249
|
// We scale up a little a bit the size of symbol.
|
|
243
|
-
const width = pms.width === undefined ? pms.width : pms.width * 1.25;
|
|
244
|
-
const height = pms.height === undefined ? pms.height : pms.height * 1.25;
|
|
250
|
+
// const width = pms.width === undefined ? pms.width : pms.width * 1.25;
|
|
251
|
+
// const height = pms.height === undefined ? pms.height : pms.height * 1.25;
|
|
252
|
+
const width = pms.width;
|
|
253
|
+
const height = pms.height;
|
|
245
254
|
let xOffset = 0, yOffset = 0;
|
|
246
255
|
// Center the marker around the anchor point
|
|
247
256
|
if (width)
|
|
@@ -271,8 +280,8 @@ export class ArcGisSimpleSymbologyRenderer extends ArcGisSymbologyRenderer {
|
|
|
271
280
|
if (angleDegrees)
|
|
272
281
|
context.restore();
|
|
273
282
|
}
|
|
274
|
-
else if (
|
|
275
|
-
const sms = this.
|
|
283
|
+
else if (symbol.type === "esriSMS") {
|
|
284
|
+
const sms = this.symbol;
|
|
276
285
|
let xOffset = 0;
|
|
277
286
|
let yOffset = 0;
|
|
278
287
|
if (sms.xoffset)
|
|
@@ -286,19 +295,17 @@ export class ArcGisSimpleSymbologyRenderer extends ArcGisSymbologyRenderer {
|
|
|
286
295
|
/** @internal */
|
|
287
296
|
export class ArcGisUniqueValueSymbologyRenderer extends ArcGisSimpleSymbologyRenderer {
|
|
288
297
|
isAttributeDriven() { return true; }
|
|
298
|
+
get defaultSymbol() { return this._defaultRenderSymbol ?? super.defaultSymbol; }
|
|
289
299
|
get rendererFields() {
|
|
290
300
|
if (this.uvRenderer.field1)
|
|
291
301
|
return [this.uvRenderer.field1];
|
|
292
302
|
else
|
|
293
303
|
return undefined;
|
|
294
304
|
}
|
|
295
|
-
constructor(renderer, defaultSymbol) {
|
|
296
|
-
super(renderer, defaultSymbol);
|
|
305
|
+
constructor(renderer, defaultSymbol, geometryType) {
|
|
306
|
+
super(renderer, defaultSymbol, geometryType);
|
|
297
307
|
this.uvRenderer = this.renderer;
|
|
298
|
-
|
|
299
|
-
this._defaultSymbol = this.uvRenderer.defaultSymbol;
|
|
300
|
-
this._symbol = this.defaultSymbol;
|
|
301
|
-
}
|
|
308
|
+
this._defaultRenderSymbol = this.uvRenderer.defaultSymbol;
|
|
302
309
|
}
|
|
303
310
|
setActiveFeatureAttributes(attributes) {
|
|
304
311
|
this._activeFeatureAttributes = attributes;
|
|
@@ -311,7 +318,7 @@ export class ArcGisUniqueValueSymbologyRenderer extends ArcGisSimpleSymbologyRen
|
|
|
311
318
|
// Strangely, ArcGIS documentation says 'value' is a string,
|
|
312
319
|
// not too sure if a comparison on other types is possible, or its always forced to string properties?
|
|
313
320
|
if (uvi.value === queryValue.toString()) {
|
|
314
|
-
this.
|
|
321
|
+
this.symbol = uvi.symbol;
|
|
315
322
|
newSymbolApplied = true;
|
|
316
323
|
break;
|
|
317
324
|
}
|
|
@@ -321,26 +328,24 @@ export class ArcGisUniqueValueSymbologyRenderer extends ArcGisSimpleSymbologyRen
|
|
|
321
328
|
}
|
|
322
329
|
// Fallback to default symbology to make sure we render something
|
|
323
330
|
if (!newSymbolApplied) {
|
|
324
|
-
this.
|
|
331
|
+
this.symbol = undefined;
|
|
325
332
|
}
|
|
326
333
|
}
|
|
327
334
|
}
|
|
328
335
|
/** @internal */
|
|
329
336
|
export class ArcGisClassBreaksSymbologyRenderer extends ArcGisSimpleSymbologyRenderer {
|
|
330
337
|
isAttributeDriven() { return true; }
|
|
338
|
+
get defaultSymbol() { return this._defaultRenderSymbol ?? super.defaultSymbol; }
|
|
331
339
|
get rendererFields() {
|
|
332
340
|
if (this.cbRenderer)
|
|
333
341
|
return [this.cbRenderer.field];
|
|
334
342
|
else
|
|
335
343
|
return undefined;
|
|
336
344
|
}
|
|
337
|
-
constructor(renderer, defaultSymbol) {
|
|
338
|
-
super(renderer, defaultSymbol);
|
|
345
|
+
constructor(renderer, defaultSymbol, geometryType) {
|
|
346
|
+
super(renderer, defaultSymbol, geometryType);
|
|
339
347
|
this.cbRenderer = this.renderer;
|
|
340
|
-
|
|
341
|
-
this._defaultSymbol = this.cbRenderer.defaultSymbol;
|
|
342
|
-
this._symbol = this.defaultSymbol;
|
|
343
|
-
}
|
|
348
|
+
this._defaultRenderSymbol = this.cbRenderer.defaultSymbol;
|
|
344
349
|
}
|
|
345
350
|
setActiveFeatureAttributes(attributes) {
|
|
346
351
|
this._activeFeatureAttributes = attributes;
|
|
@@ -364,7 +369,7 @@ export class ArcGisClassBreaksSymbologyRenderer extends ArcGisSimpleSymbologyRen
|
|
|
364
369
|
}
|
|
365
370
|
if (queryValue >= currentMinValue
|
|
366
371
|
&& queryValue <= currentClass.classMaxValue) {
|
|
367
|
-
this.
|
|
372
|
+
this.symbol = currentClass.symbol;
|
|
368
373
|
return;
|
|
369
374
|
}
|
|
370
375
|
} while (++currentClassIdx < this.cbRenderer.classBreakInfos.length);
|
|
@@ -372,7 +377,7 @@ export class ArcGisClassBreaksSymbologyRenderer extends ArcGisSimpleSymbologyRen
|
|
|
372
377
|
}
|
|
373
378
|
// Fallback to default symbology to make sure we render something
|
|
374
379
|
if (!newSymbolApplied) {
|
|
375
|
-
this.
|
|
380
|
+
this.symbol = this.defaultSymbol;
|
|
376
381
|
}
|
|
377
382
|
}
|
|
378
383
|
}
|
|
@@ -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 { EsriClassBreaksRenderer, EsriPMS, EsriRenderer, EsriSFS, EsriSimpleRenderer, EsriSLS, EsriSLSStyle, EsriSMS, EsriSymbol, EsriUniqueValueRenderer } from \"./EsriSymbology\";\r\nimport { ArcGisAttributeDrivenSymbology } from \"@itwin/core-frontend\";\r\nimport { Angle } from \"@itwin/core-geometry\";\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 if (renderer?.type === \"classBreaks\") {\r\n return new ArcGisClassBreaksSymbologyRenderer(renderer as EsriClassBreaksRenderer, defaultSymbol);\r\n } else {\r\n return new ArcGisSimpleSymbologyRenderer(renderer, defaultSymbol);\r\n }\r\n }\r\n}\r\n/** @internal */\r\nexport class ArcGisDashLineStyle {\r\n // ESRI does not provide any values for their line style definition, those values have been\r\n // determined by pixel-peeping tiles rendered by ArcGIS servers.\r\n // Available line styles are documented here: https://developers.arcgis.com/web-map-specification/objects/esriSLS_symbol/\r\n private static _dashLineLength = 6;\r\n private static _dashGapLength = 3;\r\n private static _dashShortLineLength = 3;\r\n private static _dashShortGapLength = 3;\r\n private static _dashLongLineLength = 12;\r\n private static _dashLongLineDotDotLength = 18;\r\n private static _dashLongGapLength = 6;\r\n private static _dotLineLength = 2;\r\n private static _dotGapLength = 3;\r\n private static _shortDotLineLength = 1;\r\n private static _shortDotGapLength = 2;\r\n public static dashValues = {\r\n esriSLSDash : [this._dashLineLength, this._dashGapLength],\r\n esriSLSDashDot : [this._dashLineLength, this._dotGapLength, this._dotLineLength, this._dotGapLength],\r\n esriSLSDashDotDot : [this._dashLongLineLength, this._dotGapLength, this._dotLineLength, this._dotGapLength, this._dotLineLength, this._dotGapLength],\r\n esriSLSDot : [this._dashLineLength, this._dotGapLength],\r\n esriSLSLongDash : [this._dashLongLineLength, this._dashLongGapLength],\r\n esriSLSLongDashDot : [this._dashLongLineDotDotLength, this._dashGapLength, this._dotLineLength, this._dashGapLength],\r\n esriSLSShortDash : [this._dashShortLineLength, this._dashShortGapLength],\r\n esriSLSShortDashDot : [this._dashShortLineLength, this._dashShortGapLength, this._dotLineLength, this._dashShortGapLength],\r\n esriSLSShortDashDotDot : [this._dashLineLength, this._dashShortGapLength, this._dotLineLength, this._dashGapLength, this._dotLineLength, this._dashShortGapLength],\r\n esriSLSShortDot : [this._shortDotLineLength, this._shortDotGapLength],\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 } else if (this._symbol.type === \"esriSMS\") {\r\n const sms = this._symbol as EsriSMS;\r\n if (sms.color) {\r\n fillColor = sms.color;\r\n }\r\n }\r\n\r\n return fillColor;\r\n }\r\n\r\n private applyLineDash(context: CanvasRenderingContext2D, slsStyle: EsriSLSStyle) {\r\n if (slsStyle !== \"esriSLSSolid\" && slsStyle !== \"esriSLSNull\") {\r\n context.setLineDash(ArcGisDashLineStyle.dashValues[slsStyle]);\r\n }\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) {\r\n sls = sfs.outline;\r\n }\r\n } else if (this._symbol.type === \"esriSLS\") {\r\n sls = this._symbol as EsriSLS;\r\n } else if (this._symbol.type === \"esriSMS\") {\r\n const sms = this._symbol as EsriSMS;\r\n if (sms.outline) {\r\n sls = sms.outline;\r\n }\r\n }\r\n\r\n if (sls) {\r\n\r\n context.lineWidth = (sls.width > 0 ? sls.width : 1);\r\n if (this._symbol.type === \"esriSLS\")\r\n context.lineWidth *= this.lineWidthScaleFactor;\r\n if (sls.color) {\r\n context.strokeStyle = sls.color.toRgbaString();\r\n }\r\n if (sls.style) {\r\n this.applyLineDash(context, sls.style);\r\n }\r\n } else {\r\n Logger.logTrace(loggerCategory, `Could not apply stroke style`);\r\n }\r\n\r\n }\r\n /**\r\n * Draw a simple marker\r\n * @param x x-axis coordinate in the destination canvas at which to place the center of the marker\r\n * @param y y-axis coordinate in the destination canvas at which to place the center of the marker\r\n * @param size size of the marker\r\n * @public\r\n */\r\n public drawSimpleMarker(context: CanvasRenderingContext2D, sms: EsriSMS, x: number, y: number, size: number) {\r\n const halfSize = sms.size * 0.5;\r\n if (sms.angle) {\r\n context.save();\r\n context.translate(x,y);\r\n const angle = Angle.createDegrees(sms.angle);\r\n context.rotate(angle.radians);\r\n context.translate(-x,-y);\r\n }\r\n\r\n if (sms.style === \"esriSMSSquare\") {\r\n\r\n const dx = x + (-0.5 * size);\r\n const dy = y + (-0.5 * size);\r\n if (sms.color) {\r\n this.applyFillStyle(context);\r\n context.fillRect(dx, dy, size, size);\r\n }\r\n if (sms.outline) {\r\n this.applyStrokeStyle(context);\r\n context.strokeRect(dx, dy, size, size);\r\n }\r\n\r\n } else if (sms.style === \"esriSMSCircle\") {\r\n context.beginPath();\r\n context.arc(x, y, size*0.5, 0, 2*Math.PI);\r\n context.closePath();\r\n if (sms.color) {\r\n this.applyFillStyle(context);\r\n context.fill();\r\n }\r\n if (sms.outline) {\r\n this.applyStrokeStyle(context);\r\n context.stroke();\r\n }\r\n } else if (sms.style === \"esriSMSCross\") {\r\n context.beginPath();\r\n context.moveTo(x-halfSize, y);\r\n context.lineTo(x+halfSize, y);\r\n context.moveTo(x, y-halfSize);\r\n context.lineTo(x, y+halfSize);\r\n if (sms.outline) {\r\n this.applyStrokeStyle(context);\r\n }\r\n context.stroke();\r\n } else if (sms.style === \"esriSMSDiamond\") {\r\n context.beginPath();\r\n\r\n context.moveTo(x, y-halfSize);\r\n context.lineTo(x+halfSize, y);\r\n context.lineTo(x, y+halfSize);\r\n context.lineTo(x-halfSize, y);\r\n context.closePath();\r\n if (sms.color) {\r\n this.applyFillStyle(context);\r\n context.fill();\r\n }\r\n if (sms.outline) {\r\n this.applyStrokeStyle(context);\r\n }\r\n context.stroke();\r\n } else if (sms.style === \"esriSMSTriangle\") {\r\n context.beginPath();\r\n context.moveTo(x, y-halfSize);\r\n context.lineTo(x+halfSize, y+halfSize);\r\n context.lineTo(x-halfSize, y+halfSize);\r\n\r\n context.closePath();\r\n if (sms.color) {\r\n this.applyFillStyle(context);\r\n context.fill();\r\n }\r\n if (sms.outline) {\r\n this.applyStrokeStyle(context);\r\n }\r\n context.stroke();\r\n } else if(sms.style === \"esriSMSX\") {\r\n context.beginPath();\r\n context.moveTo(x-halfSize, y-halfSize);\r\n context.lineTo(x+halfSize, y+halfSize);\r\n context.moveTo(x-halfSize, y+halfSize);\r\n context.lineTo(x+halfSize, y-halfSize);\r\n if (sms.outline) {\r\n this.applyStrokeStyle(context);\r\n }\r\n context.stroke();\r\n }\r\n if (sms.angle)\r\n context.restore();\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 const angleDegrees = pms.angle;\r\n\r\n // We scale up a little a bit the size of symbol.\r\n const width = pms.width === undefined ? pms.width : pms.width * 1.25;\r\n const height = pms.height === undefined ? pms.height : pms.height * 1.25;\r\n\r\n let xOffset = 0, yOffset = 0;\r\n\r\n // Center the marker around the anchor point\r\n if (width)\r\n xOffset = width * -0.5;\r\n if (height)\r\n yOffset = height * -0.5;\r\n\r\n // Add additional offset\r\n if (pms.xoffset)\r\n xOffset += pms.xoffset;\r\n if (pms.yoffset)\r\n yOffset += pms.yoffset;\r\n\r\n const dx = ptX + xOffset;\r\n const dy = ptY + yOffset;\r\n\r\n if (angleDegrees) {\r\n context.save();\r\n context.translate(ptX, ptY);\r\n const angle = Angle.createDegrees(angleDegrees);\r\n context.rotate(angle.radians);\r\n context.translate(-ptX, -ptY);\r\n }\r\n\r\n if (width && height) {\r\n context.drawImage(pms.image, dx, dy, width, height);\r\n } else {\r\n context.drawImage(pms.image, dx, dy);\r\n }\r\n\r\n if (angleDegrees)\r\n context.restore();\r\n\r\n } else if (this._symbol.type === \"esriSMS\") {\r\n const sms = this._symbol as EsriSMS;\r\n\r\n let xOffset = 0;\r\n let yOffset = 0;\r\n\r\n if (sms.xoffset)\r\n xOffset += sms.xoffset;\r\n\r\n if (sms.yoffset)\r\n yOffset += sms.yoffset;\r\n\r\n this.drawSimpleMarker(context, sms, ptX + xOffset, ptY + yOffset, sms.size);\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 if (queryValue !== null && queryValue !== undefined) {\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\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\r\n/** @internal */\r\nexport class ArcGisClassBreaksSymbologyRenderer 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 cbRenderer: EsriClassBreaksRenderer;\r\n\r\n public get rendererFields() {\r\n if (this.cbRenderer)\r\n return [this.cbRenderer.field];\r\n else\r\n return undefined;\r\n }\r\n\r\n public constructor(renderer: EsriClassBreaksRenderer, defaultSymbol: EsriSymbol) {\r\n super(renderer, defaultSymbol);\r\n\r\n this.cbRenderer = (this.renderer as EsriClassBreaksRenderer);\r\n if (this.cbRenderer.defaultSymbol) {\r\n this._defaultSymbol = this.cbRenderer.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 const newSymbolApplied = false;\r\n if (this._activeFeatureAttributes) {\r\n if (Object.keys(this._activeFeatureAttributes).includes(this.cbRenderer.field)) {\r\n\r\n const queryValue = this._activeFeatureAttributes[this.cbRenderer.field];\r\n\r\n if (queryValue !== null && queryValue !== undefined) {\r\n let currentMinValue: number|undefined;\r\n let currentClassIdx = 0;\r\n do {\r\n const currentClass = this.cbRenderer.classBreakInfos[currentClassIdx];\r\n if (currentClass.classMinValue !== undefined) {\r\n currentMinValue = currentClass.classMinValue;\r\n } else if (currentClass.classMinValue === undefined && currentClassIdx > 0) {\r\n currentMinValue = this.cbRenderer.classBreakInfos[currentClassIdx-1].classMaxValue;\r\n } else {\r\n currentMinValue = this.cbRenderer.minValue;\r\n }\r\n\r\n if ( queryValue >= currentMinValue\r\n && queryValue <= currentClass.classMaxValue) {\r\n this._symbol = currentClass.symbol;\r\n return;\r\n }\r\n }\r\n while (++currentClassIdx < this.cbRenderer.classBreakInfos.length);\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}\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 { EsriClassBreaksRenderer, EsriPMS, EsriRenderer, EsriSFS, EsriSimpleRenderer, EsriSLS, EsriSLSStyle, EsriSMS, EsriSymbol, EsriUniqueValueRenderer } from \"./EsriSymbology\";\r\nimport { FeatureAttributeDrivenSymbology, FeatureSymbologyRenderer } from \"@itwin/core-frontend\";\r\nimport { Angle } from \"@itwin/core-geometry\";\r\nimport { FeatureDefaultSymbology } from \"../Feature/FeatureSymbology\";\r\nimport { ArcGisFeatureGeometryType } from \"./ArcGisFeatureQuery\";\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/** Feature Symbology renderer applicable to an HTML 2D Canvas\r\n * @internal\r\n */\r\nexport interface FeatureSymbologyCanvasRenderer extends FeatureSymbologyRenderer {\r\n applyFillStyle(context: CanvasRenderingContext2D): void;\r\n applyStrokeStyle(context: CanvasRenderingContext2D): void;\r\n drawPoint(context: CanvasRenderingContext2D, ptX: number, ptY: number): void;\r\n}\r\n\r\n/** @internal */\r\nexport abstract class ArcGisSymbologyCanvasRenderer implements FeatureSymbologyCanvasRenderer {\r\n\r\n public abstract readonly renderer?: EsriRenderer;\r\n\r\n public abstract get symbol(): EsriSymbol;\r\n public abstract set symbol(symbol: EsriSymbol|undefined);\r\n public abstract get defaultSymbol(): EsriSymbol;\r\n public activeGeometryType: string = \"\";\r\n public abstract isAttributeDriven(): this is FeatureAttributeDrivenSymbology;\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: FeatureDefaultSymbology, geometryType?: ArcGisFeatureGeometryType): ArcGisSymbologyCanvasRenderer {\r\n if (renderer?.type === \"uniqueValue\") {\r\n return new ArcGisUniqueValueSymbologyRenderer(renderer as EsriUniqueValueRenderer, defaultSymbol, geometryType);\r\n } else if (renderer?.type === \"classBreaks\") {\r\n return new ArcGisClassBreaksSymbologyRenderer(renderer as EsriClassBreaksRenderer, defaultSymbol, geometryType);\r\n } else {\r\n return new ArcGisSimpleSymbologyRenderer(renderer, defaultSymbol, geometryType);\r\n }\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class ArcGisDashLineStyle {\r\n // ESRI does not provide any values for their line style definition, those values have been\r\n // determined by pixel-peeping tiles rendered by ArcGIS servers.\r\n // Available line styles are documented here: https://developers.arcgis.com/web-map-specification/objects/esriSLS_symbol/\r\n private static _dashLineLength = 6;\r\n private static _dashGapLength = 3;\r\n private static _dashShortLineLength = 3;\r\n private static _dashShortGapLength = 3;\r\n private static _dashLongLineLength = 12;\r\n private static _dashLongLineDotDotLength = 18;\r\n private static _dashLongGapLength = 6;\r\n private static _dotLineLength = 2;\r\n private static _dotGapLength = 3;\r\n private static _shortDotLineLength = 1;\r\n private static _shortDotGapLength = 2;\r\n public static dashValues = {\r\n esriSLSDash : [this._dashLineLength, this._dashGapLength],\r\n esriSLSDashDot : [this._dashLineLength, this._dotGapLength, this._dotLineLength, this._dotGapLength],\r\n esriSLSDashDotDot : [this._dashLongLineLength, this._dotGapLength, this._dotLineLength, this._dotGapLength, this._dotLineLength, this._dotGapLength],\r\n esriSLSDot : [this._dashLineLength, this._dotGapLength],\r\n esriSLSLongDash : [this._dashLongLineLength, this._dashLongGapLength],\r\n esriSLSLongDashDot : [this._dashLongLineDotDotLength, this._dashGapLength, this._dotLineLength, this._dashGapLength],\r\n esriSLSShortDash : [this._dashShortLineLength, this._dashShortGapLength],\r\n esriSLSShortDashDot : [this._dashShortLineLength, this._dashShortGapLength, this._dotLineLength, this._dashShortGapLength],\r\n esriSLSShortDashDotDot : [this._dashLineLength, this._dashShortGapLength, this._dotLineLength, this._dashGapLength, this._dotLineLength, this._dashShortGapLength],\r\n esriSLSShortDot : [this._shortDotLineLength, this._shortDotGapLength],\r\n };\r\n\r\n}\r\n\r\n/** @internal */\r\nexport class ArcGisSimpleSymbologyRenderer extends ArcGisSymbologyCanvasRenderer {\r\n\r\n protected _symbol: EsriSymbol|undefined;\r\n protected _defaultSymbol: FeatureDefaultSymbology;\r\n\r\n public override isAttributeDriven(): this is FeatureAttributeDrivenSymbology {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(): EsriSymbol {return (this._symbol ?? this.defaultSymbol);}\r\n public set symbol(symbol: EsriSymbol|undefined) {this._symbol = symbol;}\r\n\r\n public get defaultSymbol() {return this._defaultSymbol.getSymbology(this.activeGeometryType) as EsriSymbol;}\r\n public override readonly renderer?: EsriRenderer;\r\n\r\n public constructor(renderer: EsriRenderer|undefined, defaultSymbol: FeatureDefaultSymbology, geometryType?: ArcGisFeatureGeometryType) {\r\n super();\r\n this._defaultSymbol = defaultSymbol;\r\n\r\n // ArcGIS service normally advertise upfront he geometry of all features. It's always possible to opt-out, but then\r\n // you will have to set the activeGeometryType before rendering.\r\n if (geometryType)\r\n this.activeGeometryType = geometryType;\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 }\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 const symbol = this.symbol;\r\n let fillColor: ColorDef | undefined;\r\n if (symbol.type === \"esriSFS\") {\r\n const sfs = symbol as EsriSFS;\r\n if (sfs.color) {\r\n fillColor = sfs.color;\r\n }\r\n } else if (symbol.type === \"esriSMS\") {\r\n const sms = symbol as EsriSMS;\r\n if (sms.color) {\r\n fillColor = sms.color;\r\n }\r\n }\r\n\r\n return fillColor;\r\n }\r\n\r\n private applyLineDash(context: CanvasRenderingContext2D, slsStyle: EsriSLSStyle) {\r\n if (slsStyle !== \"esriSLSSolid\" && slsStyle !== \"esriSLSNull\") {\r\n context.setLineDash(ArcGisDashLineStyle.dashValues[slsStyle]);\r\n }\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 const symbol = this.symbol;\r\n if (symbol.type === \"esriSFS\") {\r\n const sfs = this.symbol as EsriSFS;\r\n if (sfs.outline) {\r\n sls = sfs.outline;\r\n }\r\n } else if (symbol.type === \"esriSLS\") {\r\n sls = this.symbol as EsriSLS;\r\n } else if (symbol.type === \"esriSMS\") {\r\n const sms = this.symbol as EsriSMS;\r\n if (sms.outline) {\r\n sls = sms.outline;\r\n }\r\n }\r\n\r\n if (sls) {\r\n\r\n context.lineWidth = (sls.width > 0 ? sls.width : 1);\r\n if (symbol.type === \"esriSLS\")\r\n context.lineWidth *= this.lineWidthScaleFactor;\r\n if (sls.color) {\r\n context.strokeStyle = sls.color.toRgbaString();\r\n }\r\n if (sls.style) {\r\n this.applyLineDash(context, sls.style);\r\n }\r\n } else {\r\n Logger.logTrace(loggerCategory, `Could not apply stroke style`);\r\n }\r\n\r\n }\r\n /**\r\n * Draw a simple marker\r\n * @param x x-axis coordinate in the destination canvas at which to place the center of the marker\r\n * @param y y-axis coordinate in the destination canvas at which to place the center of the marker\r\n * @param size size of the marker\r\n * @public\r\n */\r\n public drawSimpleMarker(context: CanvasRenderingContext2D, sms: EsriSMS, x: number, y: number, size: number) {\r\n const halfSize = sms.size * 0.5;\r\n if (sms.angle) {\r\n context.save();\r\n context.translate(x,y);\r\n const angle = Angle.createDegrees(sms.angle);\r\n context.rotate(angle.radians);\r\n context.translate(-x,-y);\r\n }\r\n\r\n if (sms.style === \"esriSMSSquare\") {\r\n\r\n const dx = x + (-0.5 * size);\r\n const dy = y + (-0.5 * size);\r\n if (sms.color) {\r\n this.applyFillStyle(context);\r\n context.fillRect(dx, dy, size, size);\r\n }\r\n if (sms.outline) {\r\n this.applyStrokeStyle(context);\r\n context.strokeRect(dx, dy, size, size);\r\n }\r\n\r\n } else if (sms.style === \"esriSMSCircle\") {\r\n context.beginPath();\r\n context.arc(x, y, size*0.5, 0, 2*Math.PI);\r\n context.closePath();\r\n if (sms.color) {\r\n this.applyFillStyle(context);\r\n context.fill();\r\n }\r\n if (sms.outline) {\r\n this.applyStrokeStyle(context);\r\n context.stroke();\r\n }\r\n } else if (sms.style === \"esriSMSCross\") {\r\n context.beginPath();\r\n context.moveTo(x-halfSize, y);\r\n context.lineTo(x+halfSize, y);\r\n context.moveTo(x, y-halfSize);\r\n context.lineTo(x, y+halfSize);\r\n if (sms.outline) {\r\n this.applyStrokeStyle(context);\r\n }\r\n context.stroke();\r\n } else if (sms.style === \"esriSMSDiamond\") {\r\n context.beginPath();\r\n\r\n context.moveTo(x, y-halfSize);\r\n context.lineTo(x+halfSize, y);\r\n context.lineTo(x, y+halfSize);\r\n context.lineTo(x-halfSize, y);\r\n context.closePath();\r\n if (sms.color) {\r\n this.applyFillStyle(context);\r\n context.fill();\r\n }\r\n if (sms.outline) {\r\n this.applyStrokeStyle(context);\r\n }\r\n context.stroke();\r\n } else if (sms.style === \"esriSMSTriangle\") {\r\n context.beginPath();\r\n context.moveTo(x, y-halfSize);\r\n context.lineTo(x+halfSize, y+halfSize);\r\n context.lineTo(x-halfSize, y+halfSize);\r\n\r\n context.closePath();\r\n if (sms.color) {\r\n this.applyFillStyle(context);\r\n context.fill();\r\n }\r\n if (sms.outline) {\r\n this.applyStrokeStyle(context);\r\n }\r\n context.stroke();\r\n } else if(sms.style === \"esriSMSX\") {\r\n context.beginPath();\r\n context.moveTo(x-halfSize, y-halfSize);\r\n context.lineTo(x+halfSize, y+halfSize);\r\n context.moveTo(x-halfSize, y+halfSize);\r\n context.lineTo(x+halfSize, y-halfSize);\r\n if (sms.outline) {\r\n this.applyStrokeStyle(context);\r\n }\r\n context.stroke();\r\n }\r\n if (sms.angle)\r\n context.restore();\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 const symbol = this.symbol;\r\n\r\n if (symbol.type === \"esriPMS\") {\r\n const pms = this.symbol as EsriPMS;\r\n const angleDegrees = pms.angle;\r\n\r\n // We scale up a little a bit the size of symbol.\r\n // const width = pms.width === undefined ? pms.width : pms.width * 1.25;\r\n // const height = pms.height === undefined ? pms.height : pms.height * 1.25;\r\n const width = pms.width;\r\n const height = pms.height;\r\n\r\n let xOffset = 0, yOffset = 0;\r\n\r\n // Center the marker around the anchor point\r\n if (width)\r\n xOffset = width * -0.5;\r\n if (height)\r\n yOffset = height * -0.5;\r\n\r\n // Add additional offset\r\n if (pms.xoffset)\r\n xOffset += pms.xoffset;\r\n if (pms.yoffset)\r\n yOffset += pms.yoffset;\r\n\r\n const dx = ptX + xOffset;\r\n const dy = ptY + yOffset;\r\n\r\n if (angleDegrees) {\r\n context.save();\r\n context.translate(ptX, ptY);\r\n const angle = Angle.createDegrees(angleDegrees);\r\n context.rotate(angle.radians);\r\n context.translate(-ptX, -ptY);\r\n }\r\n\r\n if (width && height) {\r\n context.drawImage(pms.image, dx, dy, width, height);\r\n } else {\r\n context.drawImage(pms.image, dx, dy);\r\n }\r\n\r\n if (angleDegrees)\r\n context.restore();\r\n\r\n } else if (symbol.type === \"esriSMS\") {\r\n const sms = this.symbol as EsriSMS;\r\n\r\n let xOffset = 0;\r\n let yOffset = 0;\r\n\r\n if (sms.xoffset)\r\n xOffset += sms.xoffset;\r\n\r\n if (sms.yoffset)\r\n yOffset += sms.yoffset;\r\n\r\n this.drawSimpleMarker(context, sms, ptX + xOffset, ptY + yOffset, sms.size);\r\n }\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class ArcGisUniqueValueSymbologyRenderer extends ArcGisSimpleSymbologyRenderer implements FeatureAttributeDrivenSymbology {\r\n public override isAttributeDriven(): this is FeatureAttributeDrivenSymbology {return true;}\r\n protected _activeFeatureAttributes: {[key: string]: any} | undefined;\r\n protected uvRenderer: EsriUniqueValueRenderer;\r\n private _defaultRenderSymbol: EsriSymbol|undefined;\r\n\r\n public override get defaultSymbol() {return this._defaultRenderSymbol ?? super.defaultSymbol;}\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: FeatureDefaultSymbology, geometryType?: ArcGisFeatureGeometryType) {\r\n super(renderer, defaultSymbol, geometryType);\r\n\r\n this.uvRenderer = (this.renderer as EsriUniqueValueRenderer);\r\n this._defaultRenderSymbol = this.uvRenderer.defaultSymbol;\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 if (queryValue !== null && queryValue !== undefined) {\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\r\n // Fallback to default symbology to make sure we render something\r\n if (!newSymbolApplied) {\r\n this.symbol = undefined;\r\n }\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class ArcGisClassBreaksSymbologyRenderer extends ArcGisSimpleSymbologyRenderer implements FeatureAttributeDrivenSymbology {\r\n public override isAttributeDriven(): this is FeatureAttributeDrivenSymbology {return true;}\r\n protected _activeFeatureAttributes: {[key: string]: any} | undefined;\r\n protected cbRenderer: EsriClassBreaksRenderer;\r\n private _defaultRenderSymbol: EsriSymbol|undefined;\r\n\r\n public override get defaultSymbol() {return this._defaultRenderSymbol ?? super.defaultSymbol;}\r\n\r\n public get rendererFields() {\r\n if (this.cbRenderer)\r\n return [this.cbRenderer.field];\r\n else\r\n return undefined;\r\n }\r\n\r\n public constructor(renderer: EsriClassBreaksRenderer, defaultSymbol: FeatureDefaultSymbology, geometryType?: ArcGisFeatureGeometryType) {\r\n super(renderer, defaultSymbol, geometryType);\r\n\r\n this.cbRenderer = (this.renderer as EsriClassBreaksRenderer);\r\n this._defaultRenderSymbol = this.cbRenderer.defaultSymbol;\r\n }\r\n\r\n public setActiveFeatureAttributes(attributes: { [key: string]: any }) {\r\n this._activeFeatureAttributes = attributes;\r\n\r\n const newSymbolApplied = false;\r\n if (this._activeFeatureAttributes) {\r\n if (Object.keys(this._activeFeatureAttributes).includes(this.cbRenderer.field)) {\r\n\r\n const queryValue = this._activeFeatureAttributes[this.cbRenderer.field];\r\n\r\n if (queryValue !== null && queryValue !== undefined) {\r\n let currentMinValue: number|undefined;\r\n let currentClassIdx = 0;\r\n do {\r\n const currentClass = this.cbRenderer.classBreakInfos[currentClassIdx];\r\n if (currentClass.classMinValue !== undefined) {\r\n currentMinValue = currentClass.classMinValue;\r\n } else if (currentClass.classMinValue === undefined && currentClassIdx > 0) {\r\n currentMinValue = this.cbRenderer.classBreakInfos[currentClassIdx-1].classMaxValue;\r\n } else {\r\n currentMinValue = this.cbRenderer.minValue;\r\n }\r\n\r\n if ( queryValue >= currentMinValue\r\n && queryValue <= currentClass.classMaxValue) {\r\n this.symbol = currentClass.symbol;\r\n return;\r\n }\r\n }\r\n while (++currentClassIdx < this.cbRenderer.classBreakInfos.length);\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}\r\n"]}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ColorDef } from "@itwin/core-common";
|
|
2
|
+
import { FeatureSymbology } from "../Feature/FeatureSymbology";
|
|
2
3
|
/** @internal */
|
|
3
4
|
export type EsriSymbolPropsType = "esriSFS" | "esriPMS" | "esriSMS" | "esriSLS" | "esriSMS" | "esriTS" | "CIMSymbolReference";
|
|
4
5
|
/** @internal */
|
|
@@ -8,7 +9,7 @@ export interface EsriSymbolCommonProps {
|
|
|
8
9
|
/** @internal */
|
|
9
10
|
export type EsriSymbolProps = EsriSLSProps | EsriPMSProps | EsriSFSProps | EsriSMSProps;
|
|
10
11
|
/** @internal */
|
|
11
|
-
export declare abstract class EsriSymbol implements EsriSymbolCommonProps {
|
|
12
|
+
export declare abstract class EsriSymbol extends FeatureSymbology implements EsriSymbolCommonProps {
|
|
12
13
|
abstract readonly type: EsriSymbolPropsType;
|
|
13
14
|
static fromJSON(props: EsriSymbolProps): EsriSFS | EsriSLS | EsriPMS | EsriSMS;
|
|
14
15
|
}
|