@itwin/map-layers-formats 5.0.0-dev.41 → 5.0.0-dev.49
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 +11 -1
- package/lib/cjs/ArcGisFeature/ArcGisFeatureFormat.js.map +1 -1
- package/lib/cjs/ArcGisFeature/ArcGisFeatureProvider.js.map +1 -1
- package/lib/cjs/ArcGisFeature/ArcGisFeatureQuery.js.map +1 -1
- package/lib/cjs/ArcGisFeature/ArcGisFeatureReader.js.map +1 -1
- package/lib/cjs/ArcGisFeature/ArcGisFeatureResponse.js.map +1 -1
- package/lib/cjs/ArcGisFeature/ArcGisJsonFeatureReader.js.map +1 -1
- package/lib/cjs/ArcGisFeature/ArcGisPbfFeatureReader.js.map +1 -1
- package/lib/cjs/ArcGisFeature/ArcGisSymbologyRenderer.js.map +1 -1
- package/lib/cjs/ArcGisFeature/EsriSymbology.js.map +1 -1
- package/lib/cjs/ArcGisFeature/esriPBuffer.gen.js.map +1 -1
- package/lib/cjs/Feature/DefaultMarkerIcon.js +9 -9
- package/lib/cjs/Feature/DefaultMarkerIcon.js.map +1 -1
- package/lib/cjs/Feature/FeatureCanvasRenderer.js.map +1 -1
- package/lib/cjs/Feature/FeatureInfoReader.js.map +1 -1
- package/lib/cjs/Feature/FeatureSymbology.js.map +1 -1
- package/lib/cjs/Feature/RandomMapColor.js.map +1 -1
- package/lib/cjs/GeoJSON/GeoJSONGeometry.js.map +1 -1
- package/lib/cjs/GeoJSON/GeoJSONGeometryReader.js.map +1 -1
- package/lib/cjs/Icons/MapInfoIcon.js.map +1 -1
- package/lib/cjs/OgcApiFeatures/OgcApiFeaturesFormat.js.map +1 -1
- package/lib/cjs/OgcApiFeatures/OgcApiFeaturesProvider.js.map +1 -1
- package/lib/cjs/OgcApiFeatures/OgcApiFeaturesReader.js.map +1 -1
- package/lib/cjs/Tools/GeometryTerrainDraper.d.ts +1 -1
- package/lib/cjs/Tools/GeometryTerrainDraper.d.ts.map +1 -1
- package/lib/cjs/Tools/GeometryTerrainDraper.js +1 -1
- package/lib/cjs/Tools/GeometryTerrainDraper.js.map +1 -1
- package/lib/cjs/Tools/MapFeatureInfoDecorator.js +1 -1
- package/lib/cjs/Tools/MapFeatureInfoDecorator.js.map +1 -1
- package/lib/cjs/Tools/MapFeatureInfoTool.js.map +1 -1
- package/lib/cjs/map-layers-formats.js.map +1 -1
- package/lib/cjs/mapLayersFormats.js.map +1 -1
- package/lib/esm/ArcGisFeature/ArcGisFeatureFormat.js.map +1 -1
- package/lib/esm/ArcGisFeature/ArcGisFeatureProvider.js.map +1 -1
- package/lib/esm/ArcGisFeature/ArcGisFeatureQuery.js.map +1 -1
- package/lib/esm/ArcGisFeature/ArcGisFeatureReader.js.map +1 -1
- package/lib/esm/ArcGisFeature/ArcGisFeatureResponse.js.map +1 -1
- package/lib/esm/ArcGisFeature/ArcGisJsonFeatureReader.js.map +1 -1
- package/lib/esm/ArcGisFeature/ArcGisPbfFeatureReader.js.map +1 -1
- package/lib/esm/ArcGisFeature/ArcGisSymbologyRenderer.js.map +1 -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.js +9 -9
- package/lib/esm/Feature/DefaultMarkerIcon.js.map +1 -1
- package/lib/esm/Feature/FeatureCanvasRenderer.js.map +1 -1
- package/lib/esm/Feature/FeatureInfoReader.js.map +1 -1
- package/lib/esm/Feature/FeatureSymbology.js.map +1 -1
- package/lib/esm/Feature/RandomMapColor.js.map +1 -1
- package/lib/esm/GeoJSON/GeoJSONGeometry.js.map +1 -1
- package/lib/esm/GeoJSON/GeoJSONGeometryReader.js.map +1 -1
- package/lib/esm/Icons/MapInfoIcon.js.map +1 -1
- package/lib/esm/OgcApiFeatures/OgcApiFeaturesFormat.js.map +1 -1
- package/lib/esm/OgcApiFeatures/OgcApiFeaturesProvider.js.map +1 -1
- package/lib/esm/OgcApiFeatures/OgcApiFeaturesReader.js.map +1 -1
- package/lib/esm/Tools/GeometryTerrainDraper.d.ts +1 -1
- package/lib/esm/Tools/GeometryTerrainDraper.d.ts.map +1 -1
- package/lib/esm/Tools/GeometryTerrainDraper.js +1 -1
- package/lib/esm/Tools/GeometryTerrainDraper.js.map +1 -1
- package/lib/esm/Tools/MapFeatureInfoDecorator.js +1 -1
- package/lib/esm/Tools/MapFeatureInfoDecorator.js.map +1 -1
- package/lib/esm/Tools/MapFeatureInfoTool.js.map +1 -1
- package/lib/esm/map-layers-formats.js.map +1 -1
- package/lib/esm/mapLayersFormats.js.map +1 -1
- package/lib/public/locales/en/mapLayersFormats.json +18 -18
- package/package.json +12 -12
|
@@ -9,15 +9,15 @@ const core_common_1 = require("@itwin/core-common");
|
|
|
9
9
|
/** @internal */
|
|
10
10
|
class DefaultMarkerIcon {
|
|
11
11
|
static getSvgContent(color = core_common_1.ColorDef.fromString("#00AEEF")) {
|
|
12
|
-
return `<?xml version="1.0" encoding="utf-8"?>
|
|
13
|
-
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
|
14
|
-
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
|
15
|
-
viewBox="0 0 365 560" enable-background="new 0 0 365 560" xml:space="preserve">
|
|
16
|
-
<g>
|
|
17
|
-
<path fill="${color.toHexString()}" d="M182.9,551.7c0,0.1,0.2,0.3,0.2,0.3S358.3,283,358.3,194.6c0-130.1-88.8-186.7-175.4-186.9
|
|
18
|
-
C96.3,7.9,7.5,64.5,7.5,194.6c0,88.4,175.3,357.4,175.3,357.4S182.9,551.7,182.9,551.7z M122.2,187.2c0-33.6,27.2-60.8,60.8-60.8
|
|
19
|
-
c33.6,0,60.8,27.2,60.8,60.8S216.5,248,182.9,248C149.4,248,122.2,220.8,122.2,187.2z"/>
|
|
20
|
-
</g>
|
|
12
|
+
return `<?xml version="1.0" encoding="utf-8"?>
|
|
13
|
+
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
|
14
|
+
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
|
15
|
+
viewBox="0 0 365 560" enable-background="new 0 0 365 560" xml:space="preserve">
|
|
16
|
+
<g>
|
|
17
|
+
<path fill="${color.toHexString()}" d="M182.9,551.7c0,0.1,0.2,0.3,0.2,0.3S358.3,283,358.3,194.6c0-130.1-88.8-186.7-175.4-186.9
|
|
18
|
+
C96.3,7.9,7.5,64.5,7.5,194.6c0,88.4,175.3,357.4,175.3,357.4S182.9,551.7,182.9,551.7z M122.2,187.2c0-33.6,27.2-60.8,60.8-60.8
|
|
19
|
+
c33.6,0,60.8,27.2,60.8,60.8S216.5,248,182.9,248C149.4,248,122.2,220.8,122.2,187.2z"/>
|
|
20
|
+
</g>
|
|
21
21
|
</svg>`;
|
|
22
22
|
}
|
|
23
23
|
static getContent(color) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DefaultMarkerIcon.js","sourceRoot":"","sources":["../../../src/Feature/DefaultMarkerIcon.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F,oDAAmE;AAEnE,gBAAgB;AAChB,MAAa,iBAAiB;IACpB,MAAM,CAAC,aAAa,CAAC,QAAkB,sBAAQ,CAAC,UAAU,CAAC,SAAS,CAAC;QAC3E,OAAO;;;;;oBAKS,KAAK,CAAC,WAAW,EAAE;;;;WAI5B,CAAC;IACV,CAAC;IAEM,MAAM,CAAC,UAAU,CAAC,KAAgB;QACvC,OAAO;YACL,WAAW,EAAE,eAAe;YAC5B,SAAS,EAAE,iCAAmB,CAAC,MAAM,CAAC,iBAAiB,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;SAC9E,CAAC;IACJ,CAAC;CACF;AApBD,8CAoBC","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"DefaultMarkerIcon.js","sourceRoot":"","sources":["../../../src/Feature/DefaultMarkerIcon.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F,oDAAmE;AAEnE,gBAAgB;AAChB,MAAa,iBAAiB;IACpB,MAAM,CAAC,aAAa,CAAC,QAAkB,sBAAQ,CAAC,UAAU,CAAC,SAAS,CAAC;QAC3E,OAAO;;;;;oBAKS,KAAK,CAAC,WAAW,EAAE;;;;WAI5B,CAAC;IACV,CAAC;IAEM,MAAM,CAAC,UAAU,CAAC,KAAgB;QACvC,OAAO;YACL,WAAW,EAAE,eAAe;YAC5B,SAAS,EAAE,iCAAmB,CAAC,MAAM,CAAC,iBAAiB,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;SAC9E,CAAC;IACJ,CAAC;CACF;AApBD,8CAoBC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { Base64EncodedString, ColorDef } from \"@itwin/core-common\";\n\n/** @internal */\nexport class DefaultMarkerIcon {\n private static getSvgContent(color: ColorDef = ColorDef.fromString(\"#00AEEF\")) {\n return `<?xml version=\"1.0\" encoding=\"utf-8\"?>\n <!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n <svg version=\"1.1\" id=\"Layer_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\"\n viewBox=\"0 0 365 560\" enable-background=\"new 0 0 365 560\" xml:space=\"preserve\">\n <g>\n <path fill=\"${color.toHexString()}\" d=\"M182.9,551.7c0,0.1,0.2,0.3,0.2,0.3S358.3,283,358.3,194.6c0-130.1-88.8-186.7-175.4-186.9\n C96.3,7.9,7.5,64.5,7.5,194.6c0,88.4,175.3,357.4,175.3,357.4S182.9,551.7,182.9,551.7z M122.2,187.2c0-33.6,27.2-60.8,60.8-60.8\n c33.6,0,60.8,27.2,60.8,60.8S216.5,248,182.9,248C149.4,248,122.2,220.8,122.2,187.2z\"/>\n </g>\n </svg>`;\n }\n\n public static getContent(color?: ColorDef) {\n return {\n contentType: \"image/svg+xml\",\n imageData: Base64EncodedString.encode(DefaultMarkerIcon.getSvgContent(color)),\n };\n }\n}\n\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FeatureCanvasRenderer.js","sourceRoot":"","sources":["../../../src/Feature/FeatureCanvasRenderer.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAG/F,wDAAwH;AAGxH,gBAAgB;AAChB,MAAa,qBAAsB,SAAQ,2CAA2B;IAIpE,IAAY,cAAc;QACxB,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IACe,oBAAoB,KAAuC,OAAO,IAAI,CAAC,CAAA,CAAC;IAExF,YAAY,OAAiC,EAAE,MAAqC,EAAE,oBAAgC;QACpH,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAC5B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC1B,CAAC;IAES,SAAS;QACjB,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;IAC5B,CAAC;IAES,SAAS;QACjB,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;IAC5B,CAAC;IAES,MAAM,CAAC,CAAS,EAAE,CAAS;QACnC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7B,CAAC;IAES,MAAM,CAAC,CAAS,EAAE,CAAS;QACnC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7B,CAAC;IAES,KAAK,CAAC,IAAI;QAClB,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3C,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;IAES,KAAK,CAAC,MAAM;QACpB,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;IACzB,CAAC;IAES,KAAK,CAAC,YAAY;IAC5B,CAAC;IAES,KAAK,CAAC,SAAS,CAAC,CAAS,EAAE,CAAS;QAC5C,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9C,CAAC;CACF;AA/CD,sDA+CC","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"FeatureCanvasRenderer.js","sourceRoot":"","sources":["../../../src/Feature/FeatureCanvasRenderer.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAG/F,wDAAwH;AAGxH,gBAAgB;AAChB,MAAa,qBAAsB,SAAQ,2CAA2B;IAIpE,IAAY,cAAc;QACxB,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IACe,oBAAoB,KAAuC,OAAO,IAAI,CAAC,CAAA,CAAC;IAExF,YAAY,OAAiC,EAAE,MAAqC,EAAE,oBAAgC;QACpH,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAC5B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC1B,CAAC;IAES,SAAS;QACjB,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;IAC5B,CAAC;IAES,SAAS;QACjB,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;IAC5B,CAAC;IAES,MAAM,CAAC,CAAS,EAAE,CAAS;QACnC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7B,CAAC;IAES,MAAM,CAAC,CAAS,EAAE,CAAS;QACnC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7B,CAAC;IAES,KAAK,CAAC,IAAI;QAClB,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3C,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;IAES,KAAK,CAAC,MAAM;QACpB,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;IACzB,CAAC;IAES,KAAK,CAAC,YAAY;IAC5B,CAAC;IAES,KAAK,CAAC,SAAS,CAAC,CAAS,EAAE,CAAS;QAC5C,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9C,CAAC;CACF;AA/CD,sDA+CC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { Transform } from \"@itwin/core-geometry\";\nimport { FeatureGeometryBaseRenderer, FeatureSymbolizedRenderer, FeatureSymbologyRenderer } from \"@itwin/core-frontend\";\nimport { ArcGisSymbologyCanvasRenderer } from \"../ArcGisFeature/ArcGisSymbologyRenderer\";\n\n/** @internal */\nexport class FeatureCanvasRenderer extends FeatureGeometryBaseRenderer implements FeatureSymbolizedRenderer {\n private _context: CanvasRenderingContext2D;\n private _symbol: ArcGisSymbologyCanvasRenderer;\n\n public get symbolRenderer(): FeatureSymbologyRenderer {\n return this._symbol;\n }\n public override hasSymbologyRenderer(): this is FeatureSymbolizedRenderer {return true;}\n\n constructor(context: CanvasRenderingContext2D, symbol: ArcGisSymbologyCanvasRenderer, world2PixelTransform?: Transform) {\n super(world2PixelTransform);\n this._symbol = symbol;\n this._context = context;\n }\n\n protected beginPath() {\n this._context.beginPath();\n }\n\n protected closePath() {\n this._context.closePath();\n }\n\n protected lineTo(x: number, y: number) {\n this._context.lineTo(x, y);\n }\n\n protected moveTo(x: number, y: number) {\n this._context.moveTo(x, y);\n }\n\n protected async fill() {\n this._symbol.applyFillStyle(this._context);\n this._context.fill();\n }\n\n protected async stroke() {\n this._symbol.applyStrokeStyle(this._context);\n this._context.stroke();\n }\n\n protected async finishPoints() {\n }\n\n protected async drawPoint(x: number, y: number) {\n this._symbol.drawPoint(this._context, x, y);\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FeatureInfoReader.js","sourceRoot":"","sources":["../../../src/Feature/FeatureInfoReader.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F,0DAAsE;AAEtE;;GAEG;AACH,MAAsB,iBAAiB;IAAvC;QAKE,kDAAkD;QAClD,mEAAmE;QAC5D,+BAA0B,GAAG,KAAK,CAAC;QAEhC,0BAAqB,GAAG,CAAC,KAAa,EAAE,EAAE;YAClD,OAAO,CAAC,IAAI,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;QACtG,CAAC,CAAC;QAEQ,oBAAe,GAAG,CAAC,QAA2B,EAAE,KAAiC,EAAE,EAAE;YAC7F,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,OAAQ,EAAE,CAAC;YACb,CAAC;iBAAM,IAAK,QAAQ,KAAK,kCAAiB,CAAC,QAAQ,IAAI,IAAI,CAAC,0BAA0B,EAAE,CAAC;gBACvF,OAAQ,KAAc,CAAC,WAAW,EAAE,CAAC;YACvC,CAAC;iBAAM,CAAC;gBACN,gEAAgE;gBAChE,OAAO,GAAG,KAAK,EAAE,CAAC;YACpB,CAAC;QACH,CAAC,CAAC;IAEJ,CAAC;CAAA;AAxBD,8CAwBC","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"FeatureInfoReader.js","sourceRoot":"","sources":["../../../src/Feature/FeatureInfoReader.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F,0DAAsE;AAEtE;;GAEG;AACH,MAAsB,iBAAiB;IAAvC;QAKE,kDAAkD;QAClD,mEAAmE;QAC5D,+BAA0B,GAAG,KAAK,CAAC;QAEhC,0BAAqB,GAAG,CAAC,KAAa,EAAE,EAAE;YAClD,OAAO,CAAC,IAAI,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;QACtG,CAAC,CAAC;QAEQ,oBAAe,GAAG,CAAC,QAA2B,EAAE,KAAiC,EAAE,EAAE;YAC7F,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,OAAQ,EAAE,CAAC;YACb,CAAC;iBAAM,IAAK,QAAQ,KAAK,kCAAiB,CAAC,QAAQ,IAAI,IAAI,CAAC,0BAA0B,EAAE,CAAC;gBACvF,OAAQ,KAAc,CAAC,WAAW,EAAE,CAAC;YACvC,CAAC;iBAAM,CAAC;gBACN,gEAAgE;gBAChE,OAAO,GAAG,KAAK,EAAE,CAAC;YACpB,CAAC;QACH,CAAC,CAAC;IAEJ,CAAC;CAAA;AAxBD,8CAwBC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { Primitives, StandardTypeNames } from \"@itwin/appui-abstract\";\n\n/** Base feature infos reader\n * @internal\n */\nexport abstract class FeatureInfoReader {\n\n // Optionally you can set the floating precision\n public floatPrecision: number|undefined;\n\n // Force display value of date to ISO 8601 format.\n // Turning this ON, will disable display value in end-user's locale\n public forceDateDisplayValueToIso = false;\n\n protected toFixedWithoutPadding = (value: number) => {\n return (this.floatPrecision === undefined ? value : parseFloat(value.toFixed(this.floatPrecision)));\n };\n\n protected getDisplayValue = (typename: StandardTypeNames, value: Primitives.Value|undefined) => {\n if (value === undefined) {\n return \"\";\n } else if ( typename === StandardTypeNames.DateTime && this.forceDateDisplayValueToIso) {\n return (value as Date).toISOString();\n } else {\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n return `${value}`;\n }\n };\n\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FeatureSymbology.js","sourceRoot":"","sources":["../../../src/Feature/FeatureSymbology.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F,gBAAgB;AAChB,MAAsB,gBAAgB;CAErC;AAFD,4CAEC","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"FeatureSymbology.js","sourceRoot":"","sources":["../../../src/Feature/FeatureSymbology.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F,gBAAgB;AAChB,MAAsB,gBAAgB;CAErC;AAFD,4CAEC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @internal */\nexport abstract class FeatureSymbology {\n\n}\n\n/** @internal */\nexport interface FeatureDefaultSymbology {\n getSymbology: (geometryType: string) => FeatureSymbology;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RandomMapColor.js","sourceRoot":"","sources":["../../../src/Feature/RandomMapColor.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F,oDAA8C;AAE9C,gBAAgB;AAChB,MAAa,cAAc;aACD,uBAAkB,GAAG;QAC3C,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS;QACjG,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS;QACjG,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS;QACjG,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS;QACjG,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS;QACjG,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS;QACjG,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS;QACjG,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS;KAClG,CAAC;IAEK,QAAQ;QACb,OAAO,cAAc,CAAC,kBAAkB,CAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,cAAc,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC;IAClH,CAAC;IAEM,WAAW;QAChB,OAAO,sBAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC9C,CAAC;;AAlBH,wCAmBC","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"RandomMapColor.js","sourceRoot":"","sources":["../../../src/Feature/RandomMapColor.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F,oDAA8C;AAE9C,gBAAgB;AAChB,MAAa,cAAc;aACD,uBAAkB,GAAG;QAC3C,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS;QACjG,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS;QACjG,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS;QACjG,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS;QACjG,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS;QACjG,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS;QACjG,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS;QACjG,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS;KAClG,CAAC;IAEK,QAAQ;QACb,OAAO,cAAc,CAAC,kBAAkB,CAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,cAAc,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC;IAClH,CAAC;IAEM,WAAW;QAChB,OAAO,sBAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC9C,CAAC;;AAlBH,wCAmBC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { ColorDef } from \"@itwin/core-common\";\n\n/** @internal */\nexport class RandomMapColor {\n private static readonly randomColorPalette = [\n \"#8c510a\", \"#bf812d\", \"#dfc27d\", \"#f6e8c3\", \"#f5f5f5\", \"#c7eae5\", \"#80cdc1\", \"#35978f\", \"#01665e\",\n \"#b2182b\", \"#d6604d\", \"#f4a582\", \"#fddbc7\", \"#f7f7f7\", \"#d1e5f0\", \"#92c5de\", \"#4393c3\", \"#2166ac\",\n \"#d73027\", \"#f46d43\", \"#fdae61\", \"#fee090\", \"#ffffbf\", \"#e0f3f8\", \"#abd9e9\", \"#74add1\", \"#4575b4\",\n \"#a6cee3\", \"#1f78b4\", \"#b2df8a\", \"#33a02c\", \"#fb9a99\", \"#e31c2c\", \"#fdbf6f\", \"#ff7f00\", \"#cab2d6\",\n \"#fbb4ae\", \"#e41a1c\", \"#377eb8\", \"#4daf4a\", \"#984ea3\", \"#ff2000\", \"#ffff33\", \"#a65628\", \"#999999\",\n \"#8dd3c7\", \"#ffffb3\", \"#bebada\", \"#fb8072\", \"#80b1d3\", \"#fdb462\", \"#b3de69\", \"#fccde5\", \"#ffa07a\",\n \"#b15928\", \"#6a3d9a\", \"#ffed6f\", \"#9e0142\", \"#5e4fa2\", \"#999900\", \"#1a9850\", \"#4d4d4d\", \"#6baed6\",\n \"#71c671\", \"#388e8e\", \"#7d9ec0\", \"#7171c6\", \"#8e388e\", \"#8e8e38\", \"#00c957\", \"#cc3333\", \"#d1dbdd\",\n ];\n\n public getColor() {\n return RandomMapColor.randomColorPalette[ Math.floor(Math.random() * RandomMapColor.randomColorPalette.length)];\n }\n\n public getColorDef() {\n return ColorDef.fromString(this.getColor());\n }\n}\n\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GeoJSONGeometry.js","sourceRoot":"","sources":["../../../src/GeoJSON/GeoJSONGeometry.ts"],"names":[],"mappings":";;;AAqBA,gBAAgB;AAChB,MAAa,oBAAoB;IACxB,MAAM,CAAC,YAAY,CAAC,IAAsB,IAAG,OAAO,IAAI,CAAC,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,CAAA,CAAC;IAC9K,MAAM,CAAC,QAAQ,CAAC,IAAsB,IAAG,OAAQ,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,CAAA,CAAC;IAC1G,MAAM,CAAC,OAAO,CAAC,IAAsB,IAAG,OAAO,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC,CAAA,CAAC;CAC5G;AAJD,oDAIC","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"GeoJSONGeometry.js","sourceRoot":"","sources":["../../../src/GeoJSON/GeoJSONGeometry.ts"],"names":[],"mappings":";;;AAqBA,gBAAgB;AAChB,MAAa,oBAAoB;IACxB,MAAM,CAAC,YAAY,CAAC,IAAsB,IAAG,OAAO,IAAI,CAAC,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,CAAA,CAAC;IAC9K,MAAM,CAAC,QAAQ,CAAC,IAAsB,IAAG,OAAQ,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,CAAA,CAAC;IAC1G,MAAM,CAAC,OAAO,CAAC,IAAsB,IAAG,OAAO,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC,CAAA,CAAC;CAC5G;AAJD,oDAIC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport * as GeoJson from \"geojson\";\n\n/** @internal */\nexport type Coord = number[];\n\n/** @internal */ // Array of 2 or 3 numbers\nexport type RingCoords = Coord[];\n\n/** @internal */\nexport type MultiRingCoords = RingCoords[];\n\n/** @internal */\nexport interface MultiPath {\n lengths: number[];\n coords: number[];\n}\n\n/** @internal */\nexport class GeoJSONGeometryUtils {\n public static isRingOrPath(geom: GeoJson.Geometry) {return geom.type === \"LineString\" || geom.type === \"MultiLineString\" || geom.type === \"Polygon\" || geom.type === \"MultiPolygon\";}\n public static isFilled(geom: GeoJson.Geometry) {return geom.type === \"Polygon\" || geom.type === \"MultiPolygon\";}\n public static isPoint(geom: GeoJson.Geometry) {return geom.type === \"Point\" || geom.type === \"MultiPoint\";}\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GeoJSONGeometryReader.js","sourceRoot":"","sources":["../../../src/GeoJSON/GeoJSONGeometryReader.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"GeoJSONGeometryReader.js","sourceRoot":"","sources":["../../../src/GeoJSON/GeoJSONGeometryReader.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { Logger } from \"@itwin/core-bentley\";\nimport { deflateCoordinates, FeatureGeometryRenderer } from \"@itwin/core-frontend\";\nimport { Coord, GeoJSONGeometryUtils, MultiPath, MultiRingCoords, RingCoords } from \"./GeoJSONGeometry\";\nimport * as GeoJson from \"geojson\";\n\nconst loggerCategory = \"MapLayersFormats.GeoJSONGeometryReader\";\n\n/** @internal */\nexport class GeoJSONGeometryReader {\n private _renderer: FeatureGeometryRenderer;\n\n public constructor(renderer: FeatureGeometryRenderer) {\n this._renderer = renderer;\n }\n\n public async readGeometry(geometry: GeoJson.Geometry) {\n\n if (GeoJSONGeometryUtils.isRingOrPath(geometry)) {\n await this.readRingsAndPaths(geometry, this._renderer, GeoJSONGeometryUtils.isFilled(geometry), false /* relativeCoords*/);\n } else if (GeoJSONGeometryUtils.isPoint(geometry)) {\n await this.readPoints(geometry, this._renderer, false/* relativeCoords*/);\n } else {\n Logger.logError(loggerCategory, `GeoJSONGeometryReader:readGeometry - Unknown geometry type '${geometry.type}'`);\n }\n }\n\n private async readRingsAndPaths(geometry: GeoJson.Geometry, renderer: FeatureGeometryRenderer, fill: boolean, relativeCoords: boolean) {\n const multiPath: MultiPath = {coords: [], lengths: []};\n let polys: MultiPath[] | undefined;\n\n const readPath = (ring: RingCoords, offset: number, result: MultiPath) => {\n const newOffset = deflateCoordinates(ring, result.coords, 2, offset);\n result.lengths.push(ring.length);\n return newOffset;\n };\n\n const readMultiPath = (multiRings: MultiRingCoords, result: MultiPath) => {\n let offset = 0;\n for (const ring of multiRings) {\n offset = readPath(ring, offset, result);\n }\n };\n\n if (geometry.type === \"LineString\") {\n readPath(geometry.coordinates, 0, multiPath);\n } else if (geometry.type === \"MultiLineString\" || geometry.type === \"Polygon\") {\n readMultiPath(geometry.coordinates, multiPath);\n } else if (geometry.type === \"MultiPolygon\") {\n polys = [];\n for (const poly of geometry.coordinates) {\n const tmpMultiPath: MultiPath = {coords: [], lengths: [] };\n readMultiPath(poly, tmpMultiPath);\n polys.push(tmpMultiPath);\n }\n }\n\n if (polys) {\n for (const poly of polys) {\n await renderer.renderPath(poly.lengths, poly.coords, fill, 2, relativeCoords);\n }\n } else {\n await renderer.renderPath(multiPath.lengths, multiPath.coords, fill, 2, relativeCoords);\n }\n\n }\n\n private async readPoints(geom: GeoJson.Geometry, renderer: FeatureGeometryRenderer, relativeCoords: boolean) {\n\n const lengths: Coord = [];\n const coords: Coord = [];\n const readPoint = (coord: Coord) => {\n lengths.push(1);\n coords.push(coord[0]);\n coords.push(coord[1]);\n };\n\n if (geom.type === \"MultiPoint\") {\n geom.coordinates.forEach(readPoint);\n } else if (geom.type === \"Point\") {\n readPoint(geom.coordinates);\n }\n\n await renderer.renderPoint(lengths, coords, 2, relativeCoords);\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MapInfoIcon.js","sourceRoot":"","sources":["../../../src/Icons/MapInfoIcon.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F,gBAAgB;AACH,QAAA,WAAW,GAAG;IACzB,OAAO,EAAE,goCAAgoC;CACjoC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"MapInfoIcon.js","sourceRoot":"","sources":["../../../src/Icons/MapInfoIcon.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F,gBAAgB;AACH,QAAA,WAAW,GAAG;IACzB,OAAO,EAAE,goCAAgoC;CACjoC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @internal */\nexport const mapInfoIcon = {\n dataUri: \"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiI+PHBhdGggZD0iTTUuODYyIDUuMTYyYTEuNDg4IDEuNDg4IDAgMSAxLTIuOTc1IDAgMS40ODggMS40ODggMCAwIDEgMi45NzUgMFpNMTIgN2MuNzEyIDAgMS4zODcuMTU0IDIgLjQyMlYwaC0xLjA1bC0yLjI3OCA3LjIwMUE0Ljk1IDQuOTUgMCAwIDEgMTIgN1ptLTQuNzkyIDYuMzQ5TDcgMTRIMFYwaDExLjQ2M0w4Ljg3MiA4LjEyOUM3LjczOSA5LjA0NSA3IDEwLjQyOSA3IDEyYzAgLjQ3LjA4Ni45MTcuMjA4IDEuMzQ5Wm0tLjAzMy04LjE4N1Y1LjA5YTIuNzY0IDIuNzY0IDAgMCAwLTIuODcyLTIuNzI4IDIuNzY0IDIuNzY0IDAgMCAwLTIuNzI4IDIuOEE2LjkwMyA2LjkwMyAwIDAgMCAyLjggOC4zMTJjLjQ3NC44NzcgMSAxLjcyNCAxLjU3NSAyLjUzOCAwIDAgLjk2My0xLjQ4OCAxLjU3NS0yLjUzN2E2LjkwMyA2LjkwMyAwIDAgMCAxLjIyNS0zLjE1Wk0xNiAxMmE0IDQgMCAxIDEtOCAwIDQgNCAwIDAgMSA4IDBabS00LjA1LTEuODVhLjQ2OS40NjkgMCAwIDAgLjUuNS42NTUuNjU1IDAgMCAwIC42NS0uNmwtLjAwMi0uMDMyQS40Ni40NiAwIDAgMCAxMi42IDkuNmEuNjE1LjYxNSAwIDAgMC0uNjUuNTVabTEuMTUgMy40NS0uMTUtLjJhMSAxIDAgMCAxLS41NS4zYy0uMSAwLS4xLS4wNS0uMDUtLjNsLjM1LTEuM2MuMTUtLjUuMS0uOC0uMTUtLjhhMy4yNSAzLjI1IDAgMCAwLTEuNjUuOGwuMS4yNWMuMTk4LS4xMjUuNDItLjIxLjY1LS4yNS4wNSAwIC4wNS4wNSAwIC4yNWwtLjMgMS4yYy0uMi43IDAgLjg1LjI1Ljg1YTIuODg1IDIuODg1IDAgMCAwIDEuNS0uOFoiLz48L3N2Zz4=\",\n} as const;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OgcApiFeaturesFormat.js","sourceRoot":"","sources":["../../../src/OgcApiFeatures/OgcApiFeaturesFormat.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"OgcApiFeaturesFormat.js","sourceRoot":"","sources":["../../../src/OgcApiFeatures/OgcApiFeaturesFormat.ts"],"names":[],"mappings":";;;AAKA,wDAAoM;AACpM,qEAAkE;AAElE,gBAAgB;AAChB,MAAa,4BAA6B,SAAQ,qCAAqB;aAC9C,aAAQ,GAAG,gBAAgB,CAAC;IAC5C,MAAM,CAAU,qBAAqB,CAAC,QAA+B,IAAyC,OAAO,IAAI,+CAAsB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE5J,MAAM,CAAU,KAAK,CAAC,QAAQ,CAAC,IAAwB;QAE5D,MAAM,EAAC,MAAM,EAAC,GAAG,IAAI,CAAC;QACtB,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;QACtC,IAAI,MAAM,GAAG,oCAAoB,CAAC,UAAU,CAAC;QAC7C,IAAI,CAAC;YAEH,IAAI,OAA4B,CAAC;YACjC,IAAI,QAAQ,IAAI,QAAQ,EAAE,CAAC;gBACzB,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;gBACxB,IAAA,qCAAqB,EAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACrD,CAAC;YACD,MAAM,IAAI,GAAgB;gBACxB,MAAM,EAAE,KAAK;gBACb,OAAO;aACR,CAAC;YAEF,IAAI,GAAG,GAAG,IAAA,iCAAiB,EAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC;YACjE,GAAG,GAAG,IAAA,iCAAiB,EAAC,GAAG,EAAE,MAAM,CAAC,kBAAkB,CAAC,CAAC;YACxD,IAAI,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACtC,IAAI,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACjC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO,EAAE,MAAM,EAAE,CAAC;YACpB,CAAC;YAED,MAAM,qBAAqB,GAAG,CAAC,IAAS,EAAE,EAAE;gBAC1C,IAAI,KAAqC,CAAC;gBAC1C,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;oBAC1C,IAAI,UAAU,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;wBACtC,MAAM,aAAa,GAAG;4BACpB,EAAE,EAAE,UAAU,CAAC,EAAE;4BACjB,IAAI,EAAE,UAAU,CAAC,EAAE;4BACnB,KAAK,EAAE,UAAU,CAAC,KAAK;4BACvB,OAAO,EAAE,IAAI;4BACb,MAAM,EAAE,SAAS;4BACjB,QAAQ,EAAE,SAAS;yBACpB,CAAC;wBACF,IAAI,KAAK;4BACP,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;;4BAE1B,KAAK,GAAG,CAAC,aAAa,CAAC,CAAC;oBAC5B,CAAC;gBACH,CAAC;gBACD,OAAO,KAAK,CAAC;YACf,CAAC,CAAC;YAEF,IAAI,SAAyC,CAAC;YAC9C,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;gBACpC,SAAS,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;gBACxC,MAAM,GAAG,oCAAoB,CAAC,KAAK,CAAC;YACtC,CAAC;iBAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;gBAC5E,sCAAsC;gBACtC,6CAA6C;gBAC7C,mDAAmD;gBACnD,SAAS,GAAG,CAAC;wBACX,EAAE,EAAE,IAAI,CAAC,EAAE;wBACX,IAAI,EAAE,IAAI,CAAC,EAAE;wBACb,KAAK,EAAE,IAAI,CAAC,KAAK;wBACjB,OAAO,EAAE,IAAI;wBACb,MAAM,EAAE,SAAS;wBACjB,QAAQ,EAAE,SAAS;qBACpB,CAAC,CAAC;gBACH,MAAM,GAAG,oCAAoB,CAAC,KAAK,CAAC;YACtC,CAAC;iBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACrC,sCAAsC;gBACtC,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAS,EAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,kBAAkB,CAAC,CAAC;gBACrH,IAAI,cAAc,GAAG,IAAA,iCAAiB,EAAC,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC;gBACtF,cAAc,GAAG,IAAA,iCAAiB,EAAC,cAAc,EAAE,MAAM,CAAC,kBAAkB,CAAC,CAAC;gBAC9E,QAAQ,GAAG,MAAM,KAAK,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;gBAC7C,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAC7B,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;oBACpC,SAAS,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;oBACxC,MAAM,GAAG,oCAAoB,CAAC,KAAK,CAAC;gBACtC,CAAC;YAEH,CAAC;YAED,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;QAE/B,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,MAAM,GAAG,oCAAoB,CAAC,UAAU,CAAC;YACzC,IAAI,GAAG,EAAE,MAAM,KAAK,GAAG,EAAE,CAAC;gBACxB,MAAM,GAAG,CAAC,CAAC,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,oCAAoB,CAAC,kBAAkB,CAAC,CAAC,CAAC,oCAAoB,CAAC,WAAW,CAAC,CAAC;YACjH,CAAC;YACD,OAAO,EAAE,MAAM,EAAC,CAAC;QACnB,CAAC;IACH,CAAC;;AA1FH,oEA2FC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { ImageMapLayerSettings, MapSubLayerProps } from \"@itwin/core-common\";\nimport { appendQueryParams, ImageryMapLayerFormat, MapLayerImageryProvider, MapLayerSourceStatus, MapLayerSourceValidation, setBasicAuthorization, ValidateSourceArgs } from \"@itwin/core-frontend\";\nimport { OgcApiFeaturesProvider } from \"./OgcApiFeaturesProvider\";\n\n/** @internal */\nexport class OgcApiFeaturesMapLayerFormat extends ImageryMapLayerFormat {\n public static override formatId = \"OgcApiFeatures\";\n public static override createImageryProvider(settings: ImageMapLayerSettings): MapLayerImageryProvider | undefined { return new OgcApiFeaturesProvider(settings); }\n\n public static override async validate(args: ValidateSourceArgs): Promise<MapLayerSourceValidation> {\n\n const {source} = args;\n const { userName, password } = source;\n let status = MapLayerSourceStatus.InvalidUrl;\n try {\n\n let headers: Headers | undefined;\n if (userName && password) {\n headers = new Headers();\n setBasicAuthorization(headers, userName, password);\n }\n const opts: RequestInit = {\n method: \"GET\",\n headers,\n };\n\n let url = appendQueryParams(source.url, source.savedQueryParams);\n url = appendQueryParams(url, source.unsavedQueryParams);\n let response = await fetch(url, opts);\n let json = await response.json();\n if (!json) {\n return { status };\n }\n\n const createCollectionsList = (data: any) => {\n let array: MapSubLayerProps[] | undefined;\n for (const collection of data.collections) {\n if (collection.itemType === \"feature\") {\n const subLayerProps = {\n id: collection.id,\n name: collection.id,\n title: collection.title,\n visible: true,\n parent: undefined,\n children: undefined,\n };\n if (array)\n array.push(subLayerProps);\n else\n array = [subLayerProps];\n }\n }\n return array;\n };\n\n let subLayers: MapSubLayerProps[] | undefined;\n if (Array.isArray(json.collections)) {\n subLayers = createCollectionsList(json);\n status = MapLayerSourceStatus.Valid;\n } else if (json.itemType === \"feature\" || json.type === \"FeatureCollection\") {\n // We expect one of the following URL:\n // http://server/collections/<collectionName>\n // http://server/collections/<collectionName>/items\n subLayers = [{\n id: json.id,\n name: json.id,\n title: json.title,\n visible: true,\n parent: undefined,\n children: undefined,\n }];\n status = MapLayerSourceStatus.Valid;\n } else if (Array.isArray(json.links)) {\n // This might be the main landing page\n const collectionsLink = json.links.find((link: any)=> link.rel.includes(\"data\") && link.type === \"application/json\");\n let collectionsUrl = appendQueryParams(collectionsLink.href, source.savedQueryParams);\n collectionsUrl = appendQueryParams(collectionsUrl, source.unsavedQueryParams);\n response = await fetch(collectionsUrl, opts);\n json = await response.json();\n if (Array.isArray(json.collections)) {\n subLayers = createCollectionsList(json);\n status = MapLayerSourceStatus.Valid;\n }\n\n }\n\n return { status, subLayers };\n\n } catch (err: any) {\n status = MapLayerSourceStatus.InvalidUrl;\n if (err?.status === 401) {\n status = ((userName && password) ? MapLayerSourceStatus.InvalidCredentials : MapLayerSourceStatus.RequireAuth);\n }\n return { status};\n }\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OgcApiFeaturesProvider.js","sourceRoot":"","sources":["../../../src/OgcApiFeatures/OgcApiFeaturesProvider.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 { FeatureGraphicsRenderer, HitDetail, ImageryMapTileTree, MapCartoRectangle, MapFeatureInfoOptions, MapLayerFeatureInfo, MapLayerImageryProvider, QuadId, WGS84Extent } from \"@itwin/core-frontend\";\r\nimport { EsriPMS, EsriPMSProps, EsriRenderer, EsriSFS, EsriSFSProps, EsriSLS, EsriSLSProps, EsriSymbol } from \"../ArcGisFeature/EsriSymbology\";\r\nimport { Cartographic, ColorDef, ImageMapLayerSettings, ImageSource, ImageSourceFormat, ServerError, SubLayerId } from \"@itwin/core-common\";\r\nimport { Matrix4d, Point3d, Range2d } from \"@itwin/core-geometry\";\r\nimport { ArcGisSymbologyCanvasRenderer } from \"../ArcGisFeature/ArcGisSymbologyRenderer\";\r\nimport { FeatureCanvasRenderer } from \"../Feature/FeatureCanvasRenderer\";\r\nimport { base64StringToUint8Array, IModelStatus, Logger } from \"@itwin/core-bentley\";\r\nimport * as Geojson from \"geojson\";\r\nimport { FeatureDefaultSymbology } from \"../Feature/FeatureSymbology\";\r\nimport { OgcApiFeaturesReader } from \"./OgcApiFeaturesReader\";\r\nimport { RandomMapColor } from \"../Feature/RandomMapColor\";\r\nimport { DefaultMarkerIcon } from \"../Feature/DefaultMarkerIcon\";\r\n\r\nconst loggerCategory = \"MapLayersFormats.OgcApiFeatures\";\r\nconst dataUrlHeaderToken = \"base64,\";\r\n\r\n/** Provide tiles from a ESRI ArcGIS Feature service\r\n* @internal\r\n*/\r\nexport class DefaultOgcSymbology implements FeatureDefaultSymbology {\r\n\r\n private static readonly _defaultPMSProps: Omit<EsriPMSProps, \"imageData\" | \"contentType\"> = {\r\n type: \"esriPMS\",\r\n url: \"\",\r\n width: 16,\r\n height: 24,\r\n // We want the anchor point to be the bottom of the push pin, so apply offset on the y-axis (anchor point is already in the center of the icon)\r\n xoffset: 0,\r\n yoffset: -12,\r\n };\r\n private _defaultPMS: EsriPMS;\r\n\r\n private static readonly _defaultSLSProps: EsriSLSProps = {\r\n type: \"esriSLS\",\r\n color: [0, 0, 255, 255],\r\n width: 1,\r\n style: \"esriSLSSolid\",\r\n };\r\n private _defaultSLS: EsriSLS;\r\n\r\n private static readonly _defaultSFSProps: EsriSFSProps = {\r\n type: \"esriSFS\",\r\n color: [0, 0, 255, 255], // blue fill\r\n style: \"esriSFSSolid\",\r\n outline: DefaultOgcSymbology._defaultSLSProps,\r\n };\r\n private _defaultSFS = EsriSFS.fromJSON(DefaultOgcSymbology._defaultSFSProps);\r\n\r\n public constructor(randomColor?: RandomMapColor) {\r\n const color = randomColor ? randomColor.getColorDef() : ColorDef.blue;\r\n this._defaultPMS = EsriPMS.fromJSON( {\r\n ...DefaultMarkerIcon.getContent(color),\r\n type: \"esriPMS\",\r\n url: \"\",\r\n width: 16,\r\n height: 24,\r\n xoffset: 0,\r\n yoffset: -12,\r\n });\r\n\r\n const randomColors = color.colors;\r\n const newSLSProps = {\r\n ...DefaultOgcSymbology._defaultSLSProps,\r\n color: [randomColors.r, randomColors.g, randomColors.b, 255],\r\n };\r\n this._defaultSLS = EsriSLS.fromJSON(newSLSProps);\r\n this._defaultSFS = EsriSFS.fromJSON({\r\n ...DefaultOgcSymbology._defaultSFSProps,\r\n color: [randomColors.r, randomColors.g, randomColors.b, 255],\r\n outline: {\r\n ...DefaultOgcSymbology._defaultSLSProps,\r\n color: [0, 0, 0, 255],\r\n },\r\n });\r\n }\r\n\r\n public async initialize() {\r\n // Marker image need to be loaded upfront;\r\n await this._defaultPMS.loadImage();\r\n }\r\n\r\n public getSymbology(geometryType: string): EsriSymbol {\r\n if (geometryType === \"LineString\"|| geometryType === \"MultiLineString\" )\r\n return this._defaultSLS;\r\n else if (geometryType === \"Polygon\"|| geometryType === \"MultiPolygon\" )\r\n return this._defaultSFS;\r\n else if (geometryType === \"Point\"|| geometryType === \"MultiPoint\" )\r\n return this._defaultPMS;\r\n\r\n throw new Error(`Could not get default symbology for geometry type ${geometryType}`);\r\n }\r\n}\r\n/** @internal */\r\nexport class OgcApiFeaturesProvider extends MapLayerImageryProvider {\r\n\r\n // Debug flags, should always be committed to FALSE !\r\n private readonly _drawDebugInfo = false;\r\n /// ////////////////////////////\r\n\r\n private readonly _limitParamMaxValue = 10000; // This is documented in OGC Features specification; a single items request never returns more than 10 000 items\r\n private readonly _tiledModeMinLod = 14;\r\n private readonly _staticModeFetchTimeout = 10000;\r\n private readonly _tileModeFetchTimeout = 10000;\r\n private readonly _forceTileMode = false;\r\n private _spatialIdx: any;\r\n private _defaultSymbol = new DefaultOgcSymbology(new RandomMapColor());\r\n private _renderer: EsriRenderer|undefined;\r\n private _collectionUrl = \"\";\r\n private _itemsUrl = \"\";\r\n private readonly _itemsCrs = \"http://www.opengis.net/def/crs/OGC/1.3/CRS84\"; // Fixed fow now\r\n private _queryables: any;\r\n\r\n public serviceJson: any;\r\n private _staticData: Geojson.FeatureCollection|undefined;\r\n\r\n constructor(settings: ImageMapLayerSettings) {\r\n super(settings, true);\r\n }\r\n\r\n public override get supportsMapFeatureInfo() { return true;}\r\n public override get minimumZoomLevel(): number { return this.staticMode ? super.minimumZoomLevel : this._tiledModeMinLod; }\r\n public get staticMode(): boolean { return !!(this._spatialIdx && this._staticData && !this._forceTileMode); }\r\n\r\n public override async initialize(): Promise<void> {\r\n\r\n this._collectionUrl = this._settings.url;\r\n let layerId: SubLayerId|undefined;\r\n\r\n // OGC Feature service request can only serve data for a single feature\r\n // so if multiple sub-layer ids are specified, we pick the first one.\r\n if (this._settings.subLayers && this._settings.subLayers.length > 0) {\r\n layerId = this._settings.subLayers[0].id;\r\n }\r\n\r\n const readCollectionsPage = (data: any) => {\r\n const collection = data.collections.find((col: any)=> col.id === layerId);\r\n const collectionLinks = collection?.links;\r\n if (!collectionLinks) {\r\n const msg = `Missing layer id or matching collection could not be found`;\r\n Logger.logError(loggerCategory, msg);\r\n throw new Error(msg);\r\n }\r\n const collectionLink = collectionLinks.find((link: any)=> link.rel.includes(\"collection\") && link.type === \"application/json\",\r\n );\r\n this._collectionUrl = collectionLink.href;\r\n };\r\n\r\n const layerIdMismatch = () => {\r\n const msg = `Collection metadata and sub-layers id mismatch`;\r\n Logger.logError(loggerCategory, msg);\r\n throw new Error(msg);\r\n };\r\n let collectionMetadata: any;\r\n let json = await this.fetchMetadata(this._settings.url);\r\n if (json?.type === \"FeatureCollection\") {\r\n // We landed on the items page, we need to look for the collection metadata url\r\n if (Array.isArray(json.links)) {\r\n const collectionLink = json.links.find((link: any)=> link.rel.includes(\"collection\") && link.type === \"application/json\");\r\n this._collectionUrl = collectionLink.href;\r\n }\r\n } else if (json.itemType === \"feature\") {\r\n // We landed on a specific collection page.\r\n collectionMetadata = json;\r\n\r\n // Check if the collection id matches at least one sub-layer\r\n if (this._settings.subLayers && this._settings.subLayers.length > 0) {\r\n const subLayer = this._settings.subLayers.find((s)=>s.id === collectionMetadata.id);\r\n if (subLayer)\r\n layerId = subLayer.id;\r\n } else {\r\n // No sub-layers were specified, defaults to collection id.\r\n layerId = collectionMetadata.id;\r\n }\r\n\r\n } else if (Array.isArray(json.collections)) {\r\n // We landed in the \"Collections\" page\r\n // Find to find the specified layer id among the available collections\r\n readCollectionsPage(json);\r\n } else if (Array.isArray(json.links)) {\r\n // This might be the main landing page\r\n // We need to find the the \"Collections\" page\r\n const collectionsLink = json.links.find((link: any)=> link.rel.includes(\"data\") && link.type === \"application/json\");\r\n if (!collectionsLink) {\r\n Logger.logError(loggerCategory, \"Could not find collections link\");\r\n throw new ServerError(IModelStatus.ValidationFailed, \"\");\r\n }\r\n\r\n json = await this.fetchMetadata(collectionsLink.href);\r\n if (Array.isArray(json.collections)) {\r\n readCollectionsPage(json);\r\n }\r\n }\r\n\r\n // Read collection metadata\r\n if (!collectionMetadata)\r\n collectionMetadata = await this.fetchMetadata(this._collectionUrl);\r\n\r\n if (layerId !== undefined && layerId !== collectionMetadata.id) {\r\n layerIdMismatch();\r\n }\r\n\r\n // Read cartographic range\r\n if (Array.isArray(collectionMetadata?.extent?.spatial?.bbox)\r\n && collectionMetadata.extent.spatial.bbox.length > 0\r\n && collectionMetadata.extent.spatial.crs === this._itemsCrs\r\n ) {\r\n const firstBbox = collectionMetadata.extent.spatial?.bbox[0];\r\n this.cartoRange = MapCartoRectangle.fromDegrees(firstBbox[0], firstBbox[1], firstBbox[2], firstBbox[3]);\r\n }\r\n\r\n // Read important links\r\n let queryablesHref: string|undefined;\r\n let itemsHref: string|undefined;\r\n if (Array.isArray(collectionMetadata?.links)) {\r\n // Items links (Mandatory)\r\n const itemsLink = collectionMetadata.links.find((link: any)=> link.rel.includes(\"items\") && link.type === \"application/geo+json\");\r\n itemsHref = itemsLink.href;\r\n\r\n // Queryables link (Optional)\r\n const queryablesLink = collectionMetadata.links.find((link: any)=> link.rel.includes(\"queryables\") && link.type === \"application/schema+json\");\r\n queryablesHref = queryablesLink.href;\r\n\r\n }\r\n\r\n if (itemsHref)\r\n this._itemsUrl = itemsHref;\r\n else {\r\n const msg = \"Unable to find items link on collection\";\r\n Logger.logError(loggerCategory, msg);\r\n throw new Error(msg);\r\n }\r\n if (queryablesHref)\r\n this._queryables = await this.fetchMetadata(queryablesHref);\r\n\r\n if (!this._forceTileMode) {\r\n const status = await this.fetchAllItems();\r\n if (status) {\r\n await this.indexStaticData();\r\n }\r\n }\r\n\r\n await this._defaultSymbol.initialize(); // images must be loaded upfront\r\n }\r\n\r\n private async fetchMetadata(url: string): Promise<any> {\r\n const tmpUrl = this.appendCustomParams(url);\r\n const response = await this.makeRequest(tmpUrl);\r\n return response.json();\r\n }\r\n\r\n private async fetchAllItems() {\r\n const urlObj = new URL(this._itemsUrl);\r\n urlObj.searchParams.append(\"limit\", `${this._limitParamMaxValue}`);\r\n const url = this.appendCustomParams(urlObj.toString());\r\n this._staticData = await this.fetchItems(url, this._staticModeFetchTimeout);\r\n return this._staticData ? true : false;\r\n }\r\n\r\n private async fetchItems(url: string, timeout: number) {\r\n let data: any;\r\n let success = true;\r\n try {\r\n const fetchBegin = Date.now();\r\n let tmpUrl = this.appendCustomParams(url);\r\n let response = await this.makeTileRequest(tmpUrl, timeout);\r\n let json = await response.json();\r\n data = json;\r\n // Follow \"next\" link if any\r\n let nextLink = json.links?.find((link: any)=>link.rel === \"next\");\r\n while (nextLink && (Date.now() - fetchBegin) < timeout && success) {\r\n tmpUrl = this.appendCustomParams(nextLink.href);\r\n response = await this.makeTileRequest(tmpUrl, this._staticModeFetchTimeout);\r\n json = await response.json();\r\n if (json?.features)\r\n data!.features = this._staticData?.features ? [...this._staticData.features, ...json.features] : json.features;\r\n else\r\n success = false;\r\n nextLink = json.links?.find((link: any)=>link.rel === \"next\");\r\n }\r\n if (Date.now() - fetchBegin >= this._staticModeFetchTimeout) {\r\n // We ran out of time, let switch to tile mode\r\n success = false;\r\n }\r\n } catch (e) {\r\n success = false;\r\n if (e instanceof DOMException && e.name === \"AbortError\") {\r\n Logger.logInfo(loggerCategory, \"Request to fetch all features time out, switching to tile mode.\");\r\n } else {\r\n Logger.logError(loggerCategory, \"Unknown error occurred when fetching OgcApiFeatures data.\");\r\n }\r\n }\r\n return success ? data : undefined;\r\n }\r\n\r\n // Read features range and build in-memory spatial index\r\n private async indexStaticData() {\r\n // UGLY IMPORT:\r\n // flatbush only provides ECM modules, and since mocha is not very good with ECM modules,\r\n // we need to have this special import, until we replace mocha with something else.\r\n const flatbush = (await import(\"flatbush\")).default;\r\n let success = true;\r\n try {\r\n const datasetRange = new Range2d();\r\n const buildPositionRange = (coords: Geojson.Position, range: Range2d) => range.extendXY(coords[0], coords[1]);\r\n const buildPositionArrayRange = (coords: Geojson.Position[], range: Range2d) => coords.forEach((position) => buildPositionRange(position, range) );\r\n const buildDoublePositionRange = (coords: Geojson.Position[][], range: Range2d) => coords.forEach((position) => buildPositionArrayRange(position, range) );\r\n const buildTriplePositionRange = (coords: Geojson.Position[][][], range: Range2d) => coords.forEach((position) => buildDoublePositionRange(position, range) );\r\n\r\n const readGeomRange = (geom: Geojson.Geometry, range: Range2d) => {\r\n if (geom.type === \"Point\")\r\n buildPositionRange(geom.coordinates, range);\r\n else if (geom.type === \"LineString\" || geom.type === \"MultiPoint\")\r\n buildPositionArrayRange(geom.coordinates, range);\r\n else if (geom.type === \"Polygon\" || geom.type === \"MultiLineString\")\r\n buildDoublePositionRange(geom.coordinates, range);\r\n else if (geom.type === \"MultiPolygon\" )\r\n buildTriplePositionRange(geom.coordinates, range);\r\n };\r\n\r\n if (this._staticData && Array.isArray(this._staticData.features)) {\r\n this._spatialIdx = new flatbush(this._staticData.features.length);\r\n this._staticData.features.forEach((feature: Geojson.Feature) => {\r\n try {\r\n if (feature.geometry.type === \"LineString\"\r\n || feature.geometry.type === \"MultiLineString\"\r\n || feature.geometry.type === \"Point\"\r\n || feature.geometry.type === \"MultiPoint\"\r\n || feature.geometry.type === \"Polygon\"\r\n || feature.geometry.type === \"MultiPolygon\"\r\n ) {\r\n readGeomRange(feature.geometry, datasetRange);\r\n this._spatialIdx?.add(datasetRange.xLow, datasetRange.yLow, datasetRange.xHigh,datasetRange. yHigh);\r\n datasetRange.setNull();\r\n } else if (feature.geometry.type === \"GeometryCollection\") {\r\n feature.geometry.geometries.forEach((geom) => {\r\n readGeomRange(geom, datasetRange);\r\n this._spatialIdx?.add(datasetRange.xLow, datasetRange.yLow, datasetRange.xHigh,datasetRange. yHigh);\r\n });\r\n datasetRange.setNull();\r\n }\r\n } catch (e: any) {\r\n Logger.logInfo(loggerCategory, `Unknown error occurred indexing feature: ${e.message}`);\r\n success = false;\r\n }\r\n });\r\n\r\n if (success) {\r\n this._spatialIdx.finish();\r\n }\r\n }\r\n\r\n } catch {\r\n Logger.logError(loggerCategory, \"Unknown error occurred when index static data\");\r\n success = false;\r\n }\r\n return success;\r\n }\r\n\r\n public override get tileSize(): number { return 512; }\r\n\r\n // We don't use this method inside this provider (see constructFeatureUrl), but since this is an abstract method, we need to define something\r\n public async constructUrl(_row: number, _column: number, _zoomLevel: number): Promise<string> {\r\n return \"\";\r\n }\r\n\r\n public drawTileDebugInfo(row: number, column: number, zoomLevel: number, context: CanvasRenderingContext2D) {\r\n context.fillStyle = \"cyan\";\r\n context.strokeRect(0, 0, this.tileSize, this.tileSize);\r\n context.font = \"30px Arial\";\r\n context.lineWidth = 5;\r\n context.fillText(`${zoomLevel}-${row}-${column}`, 10, 50);\r\n }\r\n\r\n // Compute transform that provides coordinates in the canvas coordinate system (pixels, origin = top-left)\r\n // from coordinate in world\r\n public computeTileWorld2CanvasTransform(row: number, column: number, zoomLevel: number) {\r\n\r\n const tileExtentWorld4326 = this.getEPSG4326Extent(row, column, zoomLevel);\r\n const worldTileWidth = tileExtentWorld4326.longitudeRight - tileExtentWorld4326.longitudeLeft;\r\n const worldTileHeight = tileExtentWorld4326.latitudeTop - tileExtentWorld4326.latitudeBottom;\r\n const canvasTileWidth = this.tileSize;\r\n const canvasTileHeight = this.tileSize;\r\n const world2CanvasRatioX = canvasTileWidth / worldTileWidth;\r\n const world2CanvasRatioY = canvasTileHeight / worldTileHeight;\r\n const worldTileOrigin = Point3d.create(tileExtentWorld4326.longitudeLeft, tileExtentWorld4326.latitudeBottom);\r\n const worldTileExtent = Point3d.create(tileExtentWorld4326.longitudeRight, tileExtentWorld4326.latitudeTop);\r\n const canvasTileOriginOffset = worldTileOrigin.clone();\r\n const canvasTileExtentOffset = worldTileExtent.clone();\r\n canvasTileOriginOffset.x *= world2CanvasRatioX;\r\n canvasTileOriginOffset.y *= world2CanvasRatioY;\r\n canvasTileExtentOffset.x *= world2CanvasRatioX;\r\n canvasTileExtentOffset.y *= world2CanvasRatioY;\r\n const xTranslate = -1 * canvasTileOriginOffset.x;\r\n\r\n // Canvas origin is upper left corner, so we need to flip the y axis\r\n const yTranslate = canvasTileExtentOffset.y; // y-axis flip\r\n const yWorld2CanvasRatio = -1 * world2CanvasRatioY; // y-axis flip\r\n\r\n const matrix = Matrix4d.createTranslationAndScaleXYZ(xTranslate, yTranslate, 0, world2CanvasRatioX, yWorld2CanvasRatio, 1);\r\n return matrix.asTransform;\r\n }\r\n\r\n public override async loadTile(row: number, column: number, zoomLevel: number): Promise<ImageSource | undefined> {\r\n\r\n const extent4326 = this.getEPSG4326Extent(row, column, zoomLevel);\r\n\r\n let data: any;\r\n if (this.staticMode) {\r\n // Static data mode\r\n const filteredData: Geojson.FeatureCollection = {type: \"FeatureCollection\", features: []};\r\n\r\n this._spatialIdx?.search(extent4326.longitudeLeft, extent4326.latitudeBottom, extent4326.longitudeRight, extent4326.latitudeTop,\r\n (index: number) => {\r\n filteredData.features.push(this._staticData!.features[index]);\r\n return true;\r\n });\r\n\r\n data = filteredData;\r\n } else {\r\n // Tiled data mode\r\n const extent4326Str = this.getEPSG4326TileExtentString(row, column, zoomLevel, false);\r\n const urlObj = new URL(this._itemsUrl);\r\n urlObj.searchParams.append(\"bbox\", `${extent4326Str}`);\r\n urlObj.searchParams.append(\"bbox-crs\", this._itemsCrs);\r\n urlObj.searchParams.append(\"limit\", `${this._limitParamMaxValue}`);\r\n const url = this.appendCustomParams(urlObj.toString());\r\n\r\n try {\r\n data = await this.fetchItems(url, this._tileModeFetchTimeout);\r\n } catch {\r\n }\r\n if (!data) {\r\n Logger.logError(loggerCategory, \"Could not fetch OgcApiFeatures data.\");\r\n }\r\n }\r\n\r\n if (!data || !Array.isArray(data.features) || data.features.length === 0) {\r\n Logger.logInfo(loggerCategory, `No data to render for tile (${zoomLevel}/${row}/${column}).`);\r\n }\r\n\r\n // Rendering starts here\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = this.tileSize;\r\n canvas.height = this.tileSize;\r\n const ctx = canvas.getContext(\"2d\");\r\n if (ctx == null) {\r\n Logger.logError(loggerCategory, \"No canvas context available for loading tile.\");\r\n return undefined;\r\n }\r\n\r\n try {\r\n // Compute transform if CoordinatesQuantization is not supported by service\r\n const transfo = this.computeTileWorld2CanvasTransform(row, column, zoomLevel);\r\n if (!transfo) {\r\n Logger.logError(loggerCategory, `Could not compute data transformation for tile (${zoomLevel}/${row}/${column})`);\r\n }\r\n\r\n // Create the renderer\r\n\r\n // Instead of passing a Transform oject to the render, it should be possible\r\n // instead to set the Transform directly on the Canvas, when I tried the display was incorrect, floating point issue?\r\n // const transfoRow = transfo!.toRows();\r\n // ctx.setTransform(transfoRow[0][0], transfoRow[1][0], transfoRow[0][1], transfoRow[1][1], transfoRow[0][3], transfoRow[1][3]);\r\n const symbRenderer = ArcGisSymbologyCanvasRenderer.create(this._renderer, this._defaultSymbol);\r\n const renderer = new FeatureCanvasRenderer(ctx, symbRenderer, transfo);\r\n\r\n const featureReader = new OgcApiFeaturesReader();\r\n\r\n await featureReader.readAndRender(data, renderer);\r\n if (this._drawDebugInfo)\r\n this.drawTileDebugInfo(row, column, zoomLevel, ctx);\r\n } catch (e) {\r\n Logger.logError(loggerCategory, `Exception occurred while loading tile (${zoomLevel}/${row}/${column}) : ${e}`);\r\n }\r\n\r\n try {\r\n return this.createImageSourceFromDataURL(canvas.toDataURL(\"image/png\"), ImageSourceFormat.Png);\r\n } catch (e) {\r\n Logger.logError(loggerCategory, `Exception occurred while rendering tile (${zoomLevel}/${row}/${column}) : ${e}.`);\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n private createImageSourceFromDataURL(dataUrl: string, format: ImageSourceFormat) {\r\n if (!dataUrl)\r\n return undefined;\r\n\r\n const dataStartPos = dataUrl.indexOf(dataUrlHeaderToken) + dataUrlHeaderToken.length;\r\n\r\n if (dataStartPos < 0)\r\n return undefined;\r\n\r\n const base64Png = dataUrl.substring(dataStartPos);\r\n return new ImageSource(base64StringToUint8Array(base64Png), format);\r\n }\r\n\r\n public override async getFeatureInfo(featureInfos: MapLayerFeatureInfo[], quadId: QuadId, carto: Cartographic, _tree: ImageryMapTileTree, hit: HitDetail, options?: MapFeatureInfoOptions): Promise<void> {\r\n const tileExtent = this.getEPSG4326Extent(quadId.row, quadId.column, quadId.level);\r\n const tilePixelSizeX = (tileExtent.longitudeRight - tileExtent.longitudeLeft) / this.tileSize;\r\n const tilePixelSizeY = (tileExtent.latitudeTop - tileExtent.latitudeBottom) / this.tileSize;\r\n const tolerancePixel = options?.tolerance ?? 7;\r\n const toleranceWorldX = tilePixelSizeX * tolerancePixel;\r\n const toleranceWorldY = tilePixelSizeY * tolerancePixel;\r\n\r\n // Note: We used to pass a single point as the query 'geometry' and leverage the 'distance' parameter, turns\r\n // out that approach was a lot slower on some server compared to using a single envelope.\r\n const bbox: WGS84Extent = {\r\n longitudeLeft: carto.longitudeDegrees - toleranceWorldX, latitudeBottom: carto.latitudeDegrees - toleranceWorldY,\r\n longitudeRight: carto.longitudeDegrees + toleranceWorldX, latitudeTop: carto.latitudeDegrees + toleranceWorldY,\r\n };\r\n\r\n const bboxStr = this.getEPSG4326ExtentString(bbox, false);\r\n const urlObj = new URL(this._itemsUrl);\r\n urlObj.searchParams.append(\"bbox\", `${bboxStr}`);\r\n urlObj.searchParams.append(\"bbox-crs\", this._itemsCrs);\r\n urlObj.searchParams.append(\"limit\", `${this._limitParamMaxValue}`);\r\n const url = this.appendCustomParams(urlObj.toString());\r\n\r\n let data: any;\r\n try {\r\n data = await this.fetchItems(url, this._tileModeFetchTimeout);\r\n } catch {\r\n }\r\n if (!data) {\r\n Logger.logError(loggerCategory, \"Could not fetch OgcApiFeatures data.\");\r\n }\r\n\r\n const featureReader = new OgcApiFeaturesReader();\r\n await featureReader.readFeatureInfo({\r\n collection:data,\r\n layerSettings: this._settings,\r\n queryables: this._queryables,\r\n geomRenderer: new FeatureGraphicsRenderer({viewport: hit.viewport, crs: \"wgs84\"})},\r\n featureInfos );\r\n }\r\n}\r\n\r\n"]}
|
|
1
|
+
{"version":3,"file":"OgcApiFeaturesProvider.js","sourceRoot":"","sources":["../../../src/OgcApiFeatures/OgcApiFeaturesProvider.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { FeatureGraphicsRenderer, HitDetail, ImageryMapTileTree, MapCartoRectangle, MapFeatureInfoOptions, MapLayerFeatureInfo, MapLayerImageryProvider, QuadId, WGS84Extent } from \"@itwin/core-frontend\";\nimport { EsriPMS, EsriPMSProps, EsriRenderer, EsriSFS, EsriSFSProps, EsriSLS, EsriSLSProps, EsriSymbol } from \"../ArcGisFeature/EsriSymbology\";\nimport { Cartographic, ColorDef, ImageMapLayerSettings, ImageSource, ImageSourceFormat, ServerError, SubLayerId } from \"@itwin/core-common\";\nimport { Matrix4d, Point3d, Range2d } from \"@itwin/core-geometry\";\nimport { ArcGisSymbologyCanvasRenderer } from \"../ArcGisFeature/ArcGisSymbologyRenderer\";\nimport { FeatureCanvasRenderer } from \"../Feature/FeatureCanvasRenderer\";\nimport { base64StringToUint8Array, IModelStatus, Logger } from \"@itwin/core-bentley\";\nimport * as Geojson from \"geojson\";\nimport { FeatureDefaultSymbology } from \"../Feature/FeatureSymbology\";\nimport { OgcApiFeaturesReader } from \"./OgcApiFeaturesReader\";\nimport { RandomMapColor } from \"../Feature/RandomMapColor\";\nimport { DefaultMarkerIcon } from \"../Feature/DefaultMarkerIcon\";\n\nconst loggerCategory = \"MapLayersFormats.OgcApiFeatures\";\nconst dataUrlHeaderToken = \"base64,\";\n\n/** Provide tiles from a ESRI ArcGIS Feature service\n* @internal\n*/\nexport class DefaultOgcSymbology implements FeatureDefaultSymbology {\n\n private static readonly _defaultPMSProps: Omit<EsriPMSProps, \"imageData\" | \"contentType\"> = {\n type: \"esriPMS\",\n url: \"\",\n width: 16,\n height: 24,\n // We want the anchor point to be the bottom of the push pin, so apply offset on the y-axis (anchor point is already in the center of the icon)\n xoffset: 0,\n yoffset: -12,\n };\n private _defaultPMS: EsriPMS;\n\n private static readonly _defaultSLSProps: EsriSLSProps = {\n type: \"esriSLS\",\n color: [0, 0, 255, 255],\n width: 1,\n style: \"esriSLSSolid\",\n };\n private _defaultSLS: EsriSLS;\n\n private static readonly _defaultSFSProps: EsriSFSProps = {\n type: \"esriSFS\",\n color: [0, 0, 255, 255], // blue fill\n style: \"esriSFSSolid\",\n outline: DefaultOgcSymbology._defaultSLSProps,\n };\n private _defaultSFS = EsriSFS.fromJSON(DefaultOgcSymbology._defaultSFSProps);\n\n public constructor(randomColor?: RandomMapColor) {\n const color = randomColor ? randomColor.getColorDef() : ColorDef.blue;\n this._defaultPMS = EsriPMS.fromJSON( {\n ...DefaultMarkerIcon.getContent(color),\n type: \"esriPMS\",\n url: \"\",\n width: 16,\n height: 24,\n xoffset: 0,\n yoffset: -12,\n });\n\n const randomColors = color.colors;\n const newSLSProps = {\n ...DefaultOgcSymbology._defaultSLSProps,\n color: [randomColors.r, randomColors.g, randomColors.b, 255],\n };\n this._defaultSLS = EsriSLS.fromJSON(newSLSProps);\n this._defaultSFS = EsriSFS.fromJSON({\n ...DefaultOgcSymbology._defaultSFSProps,\n color: [randomColors.r, randomColors.g, randomColors.b, 255],\n outline: {\n ...DefaultOgcSymbology._defaultSLSProps,\n color: [0, 0, 0, 255],\n },\n });\n }\n\n public async initialize() {\n // Marker image need to be loaded upfront;\n await this._defaultPMS.loadImage();\n }\n\n public getSymbology(geometryType: string): EsriSymbol {\n if (geometryType === \"LineString\"|| geometryType === \"MultiLineString\" )\n return this._defaultSLS;\n else if (geometryType === \"Polygon\"|| geometryType === \"MultiPolygon\" )\n return this._defaultSFS;\n else if (geometryType === \"Point\"|| geometryType === \"MultiPoint\" )\n return this._defaultPMS;\n\n throw new Error(`Could not get default symbology for geometry type ${geometryType}`);\n }\n}\n/** @internal */\nexport class OgcApiFeaturesProvider extends MapLayerImageryProvider {\n\n // Debug flags, should always be committed to FALSE !\n private readonly _drawDebugInfo = false;\n /// ////////////////////////////\n\n private readonly _limitParamMaxValue = 10000; // This is documented in OGC Features specification; a single items request never returns more than 10 000 items\n private readonly _tiledModeMinLod = 14;\n private readonly _staticModeFetchTimeout = 10000;\n private readonly _tileModeFetchTimeout = 10000;\n private readonly _forceTileMode = false;\n private _spatialIdx: any;\n private _defaultSymbol = new DefaultOgcSymbology(new RandomMapColor());\n private _renderer: EsriRenderer|undefined;\n private _collectionUrl = \"\";\n private _itemsUrl = \"\";\n private readonly _itemsCrs = \"http://www.opengis.net/def/crs/OGC/1.3/CRS84\"; // Fixed fow now\n private _queryables: any;\n\n public serviceJson: any;\n private _staticData: Geojson.FeatureCollection|undefined;\n\n constructor(settings: ImageMapLayerSettings) {\n super(settings, true);\n }\n\n public override get supportsMapFeatureInfo() { return true;}\n public override get minimumZoomLevel(): number { return this.staticMode ? super.minimumZoomLevel : this._tiledModeMinLod; }\n public get staticMode(): boolean { return !!(this._spatialIdx && this._staticData && !this._forceTileMode); }\n\n public override async initialize(): Promise<void> {\n\n this._collectionUrl = this._settings.url;\n let layerId: SubLayerId|undefined;\n\n // OGC Feature service request can only serve data for a single feature\n // so if multiple sub-layer ids are specified, we pick the first one.\n if (this._settings.subLayers && this._settings.subLayers.length > 0) {\n layerId = this._settings.subLayers[0].id;\n }\n\n const readCollectionsPage = (data: any) => {\n const collection = data.collections.find((col: any)=> col.id === layerId);\n const collectionLinks = collection?.links;\n if (!collectionLinks) {\n const msg = `Missing layer id or matching collection could not be found`;\n Logger.logError(loggerCategory, msg);\n throw new Error(msg);\n }\n const collectionLink = collectionLinks.find((link: any)=> link.rel.includes(\"collection\") && link.type === \"application/json\",\n );\n this._collectionUrl = collectionLink.href;\n };\n\n const layerIdMismatch = () => {\n const msg = `Collection metadata and sub-layers id mismatch`;\n Logger.logError(loggerCategory, msg);\n throw new Error(msg);\n };\n let collectionMetadata: any;\n let json = await this.fetchMetadata(this._settings.url);\n if (json?.type === \"FeatureCollection\") {\n // We landed on the items page, we need to look for the collection metadata url\n if (Array.isArray(json.links)) {\n const collectionLink = json.links.find((link: any)=> link.rel.includes(\"collection\") && link.type === \"application/json\");\n this._collectionUrl = collectionLink.href;\n }\n } else if (json.itemType === \"feature\") {\n // We landed on a specific collection page.\n collectionMetadata = json;\n\n // Check if the collection id matches at least one sub-layer\n if (this._settings.subLayers && this._settings.subLayers.length > 0) {\n const subLayer = this._settings.subLayers.find((s)=>s.id === collectionMetadata.id);\n if (subLayer)\n layerId = subLayer.id;\n } else {\n // No sub-layers were specified, defaults to collection id.\n layerId = collectionMetadata.id;\n }\n\n } else if (Array.isArray(json.collections)) {\n // We landed in the \"Collections\" page\n // Find to find the specified layer id among the available collections\n readCollectionsPage(json);\n } else if (Array.isArray(json.links)) {\n // This might be the main landing page\n // We need to find the the \"Collections\" page\n const collectionsLink = json.links.find((link: any)=> link.rel.includes(\"data\") && link.type === \"application/json\");\n if (!collectionsLink) {\n Logger.logError(loggerCategory, \"Could not find collections link\");\n throw new ServerError(IModelStatus.ValidationFailed, \"\");\n }\n\n json = await this.fetchMetadata(collectionsLink.href);\n if (Array.isArray(json.collections)) {\n readCollectionsPage(json);\n }\n }\n\n // Read collection metadata\n if (!collectionMetadata)\n collectionMetadata = await this.fetchMetadata(this._collectionUrl);\n\n if (layerId !== undefined && layerId !== collectionMetadata.id) {\n layerIdMismatch();\n }\n\n // Read cartographic range\n if (Array.isArray(collectionMetadata?.extent?.spatial?.bbox)\n && collectionMetadata.extent.spatial.bbox.length > 0\n && collectionMetadata.extent.spatial.crs === this._itemsCrs\n ) {\n const firstBbox = collectionMetadata.extent.spatial?.bbox[0];\n this.cartoRange = MapCartoRectangle.fromDegrees(firstBbox[0], firstBbox[1], firstBbox[2], firstBbox[3]);\n }\n\n // Read important links\n let queryablesHref: string|undefined;\n let itemsHref: string|undefined;\n if (Array.isArray(collectionMetadata?.links)) {\n // Items links (Mandatory)\n const itemsLink = collectionMetadata.links.find((link: any)=> link.rel.includes(\"items\") && link.type === \"application/geo+json\");\n itemsHref = itemsLink.href;\n\n // Queryables link (Optional)\n const queryablesLink = collectionMetadata.links.find((link: any)=> link.rel.includes(\"queryables\") && link.type === \"application/schema+json\");\n queryablesHref = queryablesLink.href;\n\n }\n\n if (itemsHref)\n this._itemsUrl = itemsHref;\n else {\n const msg = \"Unable to find items link on collection\";\n Logger.logError(loggerCategory, msg);\n throw new Error(msg);\n }\n if (queryablesHref)\n this._queryables = await this.fetchMetadata(queryablesHref);\n\n if (!this._forceTileMode) {\n const status = await this.fetchAllItems();\n if (status) {\n await this.indexStaticData();\n }\n }\n\n await this._defaultSymbol.initialize(); // images must be loaded upfront\n }\n\n private async fetchMetadata(url: string): Promise<any> {\n const tmpUrl = this.appendCustomParams(url);\n const response = await this.makeRequest(tmpUrl);\n return response.json();\n }\n\n private async fetchAllItems() {\n const urlObj = new URL(this._itemsUrl);\n urlObj.searchParams.append(\"limit\", `${this._limitParamMaxValue}`);\n const url = this.appendCustomParams(urlObj.toString());\n this._staticData = await this.fetchItems(url, this._staticModeFetchTimeout);\n return this._staticData ? true : false;\n }\n\n private async fetchItems(url: string, timeout: number) {\n let data: any;\n let success = true;\n try {\n const fetchBegin = Date.now();\n let tmpUrl = this.appendCustomParams(url);\n let response = await this.makeTileRequest(tmpUrl, timeout);\n let json = await response.json();\n data = json;\n // Follow \"next\" link if any\n let nextLink = json.links?.find((link: any)=>link.rel === \"next\");\n while (nextLink && (Date.now() - fetchBegin) < timeout && success) {\n tmpUrl = this.appendCustomParams(nextLink.href);\n response = await this.makeTileRequest(tmpUrl, this._staticModeFetchTimeout);\n json = await response.json();\n if (json?.features)\n data!.features = this._staticData?.features ? [...this._staticData.features, ...json.features] : json.features;\n else\n success = false;\n nextLink = json.links?.find((link: any)=>link.rel === \"next\");\n }\n if (Date.now() - fetchBegin >= this._staticModeFetchTimeout) {\n // We ran out of time, let switch to tile mode\n success = false;\n }\n } catch (e) {\n success = false;\n if (e instanceof DOMException && e.name === \"AbortError\") {\n Logger.logInfo(loggerCategory, \"Request to fetch all features time out, switching to tile mode.\");\n } else {\n Logger.logError(loggerCategory, \"Unknown error occurred when fetching OgcApiFeatures data.\");\n }\n }\n return success ? data : undefined;\n }\n\n // Read features range and build in-memory spatial index\n private async indexStaticData() {\n // UGLY IMPORT:\n // flatbush only provides ECM modules, and since mocha is not very good with ECM modules,\n // we need to have this special import, until we replace mocha with something else.\n const flatbush = (await import(\"flatbush\")).default;\n let success = true;\n try {\n const datasetRange = new Range2d();\n const buildPositionRange = (coords: Geojson.Position, range: Range2d) => range.extendXY(coords[0], coords[1]);\n const buildPositionArrayRange = (coords: Geojson.Position[], range: Range2d) => coords.forEach((position) => buildPositionRange(position, range) );\n const buildDoublePositionRange = (coords: Geojson.Position[][], range: Range2d) => coords.forEach((position) => buildPositionArrayRange(position, range) );\n const buildTriplePositionRange = (coords: Geojson.Position[][][], range: Range2d) => coords.forEach((position) => buildDoublePositionRange(position, range) );\n\n const readGeomRange = (geom: Geojson.Geometry, range: Range2d) => {\n if (geom.type === \"Point\")\n buildPositionRange(geom.coordinates, range);\n else if (geom.type === \"LineString\" || geom.type === \"MultiPoint\")\n buildPositionArrayRange(geom.coordinates, range);\n else if (geom.type === \"Polygon\" || geom.type === \"MultiLineString\")\n buildDoublePositionRange(geom.coordinates, range);\n else if (geom.type === \"MultiPolygon\" )\n buildTriplePositionRange(geom.coordinates, range);\n };\n\n if (this._staticData && Array.isArray(this._staticData.features)) {\n this._spatialIdx = new flatbush(this._staticData.features.length);\n this._staticData.features.forEach((feature: Geojson.Feature) => {\n try {\n if (feature.geometry.type === \"LineString\"\n || feature.geometry.type === \"MultiLineString\"\n || feature.geometry.type === \"Point\"\n || feature.geometry.type === \"MultiPoint\"\n || feature.geometry.type === \"Polygon\"\n || feature.geometry.type === \"MultiPolygon\"\n ) {\n readGeomRange(feature.geometry, datasetRange);\n this._spatialIdx?.add(datasetRange.xLow, datasetRange.yLow, datasetRange.xHigh,datasetRange. yHigh);\n datasetRange.setNull();\n } else if (feature.geometry.type === \"GeometryCollection\") {\n feature.geometry.geometries.forEach((geom) => {\n readGeomRange(geom, datasetRange);\n this._spatialIdx?.add(datasetRange.xLow, datasetRange.yLow, datasetRange.xHigh,datasetRange. yHigh);\n });\n datasetRange.setNull();\n }\n } catch (e: any) {\n Logger.logInfo(loggerCategory, `Unknown error occurred indexing feature: ${e.message}`);\n success = false;\n }\n });\n\n if (success) {\n this._spatialIdx.finish();\n }\n }\n\n } catch {\n Logger.logError(loggerCategory, \"Unknown error occurred when index static data\");\n success = false;\n }\n return success;\n }\n\n public override get tileSize(): number { return 512; }\n\n // We don't use this method inside this provider (see constructFeatureUrl), but since this is an abstract method, we need to define something\n public async constructUrl(_row: number, _column: number, _zoomLevel: number): Promise<string> {\n return \"\";\n }\n\n public drawTileDebugInfo(row: number, column: number, zoomLevel: number, context: CanvasRenderingContext2D) {\n context.fillStyle = \"cyan\";\n context.strokeRect(0, 0, this.tileSize, this.tileSize);\n context.font = \"30px Arial\";\n context.lineWidth = 5;\n context.fillText(`${zoomLevel}-${row}-${column}`, 10, 50);\n }\n\n // Compute transform that provides coordinates in the canvas coordinate system (pixels, origin = top-left)\n // from coordinate in world\n public computeTileWorld2CanvasTransform(row: number, column: number, zoomLevel: number) {\n\n const tileExtentWorld4326 = this.getEPSG4326Extent(row, column, zoomLevel);\n const worldTileWidth = tileExtentWorld4326.longitudeRight - tileExtentWorld4326.longitudeLeft;\n const worldTileHeight = tileExtentWorld4326.latitudeTop - tileExtentWorld4326.latitudeBottom;\n const canvasTileWidth = this.tileSize;\n const canvasTileHeight = this.tileSize;\n const world2CanvasRatioX = canvasTileWidth / worldTileWidth;\n const world2CanvasRatioY = canvasTileHeight / worldTileHeight;\n const worldTileOrigin = Point3d.create(tileExtentWorld4326.longitudeLeft, tileExtentWorld4326.latitudeBottom);\n const worldTileExtent = Point3d.create(tileExtentWorld4326.longitudeRight, tileExtentWorld4326.latitudeTop);\n const canvasTileOriginOffset = worldTileOrigin.clone();\n const canvasTileExtentOffset = worldTileExtent.clone();\n canvasTileOriginOffset.x *= world2CanvasRatioX;\n canvasTileOriginOffset.y *= world2CanvasRatioY;\n canvasTileExtentOffset.x *= world2CanvasRatioX;\n canvasTileExtentOffset.y *= world2CanvasRatioY;\n const xTranslate = -1 * canvasTileOriginOffset.x;\n\n // Canvas origin is upper left corner, so we need to flip the y axis\n const yTranslate = canvasTileExtentOffset.y; // y-axis flip\n const yWorld2CanvasRatio = -1 * world2CanvasRatioY; // y-axis flip\n\n const matrix = Matrix4d.createTranslationAndScaleXYZ(xTranslate, yTranslate, 0, world2CanvasRatioX, yWorld2CanvasRatio, 1);\n return matrix.asTransform;\n }\n\n public override async loadTile(row: number, column: number, zoomLevel: number): Promise<ImageSource | undefined> {\n\n const extent4326 = this.getEPSG4326Extent(row, column, zoomLevel);\n\n let data: any;\n if (this.staticMode) {\n // Static data mode\n const filteredData: Geojson.FeatureCollection = {type: \"FeatureCollection\", features: []};\n\n this._spatialIdx?.search(extent4326.longitudeLeft, extent4326.latitudeBottom, extent4326.longitudeRight, extent4326.latitudeTop,\n (index: number) => {\n filteredData.features.push(this._staticData!.features[index]);\n return true;\n });\n\n data = filteredData;\n } else {\n // Tiled data mode\n const extent4326Str = this.getEPSG4326TileExtentString(row, column, zoomLevel, false);\n const urlObj = new URL(this._itemsUrl);\n urlObj.searchParams.append(\"bbox\", `${extent4326Str}`);\n urlObj.searchParams.append(\"bbox-crs\", this._itemsCrs);\n urlObj.searchParams.append(\"limit\", `${this._limitParamMaxValue}`);\n const url = this.appendCustomParams(urlObj.toString());\n\n try {\n data = await this.fetchItems(url, this._tileModeFetchTimeout);\n } catch {\n }\n if (!data) {\n Logger.logError(loggerCategory, \"Could not fetch OgcApiFeatures data.\");\n }\n }\n\n if (!data || !Array.isArray(data.features) || data.features.length === 0) {\n Logger.logInfo(loggerCategory, `No data to render for tile (${zoomLevel}/${row}/${column}).`);\n }\n\n // Rendering starts here\n const canvas = document.createElement(\"canvas\");\n canvas.width = this.tileSize;\n canvas.height = this.tileSize;\n const ctx = canvas.getContext(\"2d\");\n if (ctx == null) {\n Logger.logError(loggerCategory, \"No canvas context available for loading tile.\");\n return undefined;\n }\n\n try {\n // Compute transform if CoordinatesQuantization is not supported by service\n const transfo = this.computeTileWorld2CanvasTransform(row, column, zoomLevel);\n if (!transfo) {\n Logger.logError(loggerCategory, `Could not compute data transformation for tile (${zoomLevel}/${row}/${column})`);\n }\n\n // Create the renderer\n\n // Instead of passing a Transform oject to the render, it should be possible\n // instead to set the Transform directly on the Canvas, when I tried the display was incorrect, floating point issue?\n // const transfoRow = transfo!.toRows();\n // ctx.setTransform(transfoRow[0][0], transfoRow[1][0], transfoRow[0][1], transfoRow[1][1], transfoRow[0][3], transfoRow[1][3]);\n const symbRenderer = ArcGisSymbologyCanvasRenderer.create(this._renderer, this._defaultSymbol);\n const renderer = new FeatureCanvasRenderer(ctx, symbRenderer, transfo);\n\n const featureReader = new OgcApiFeaturesReader();\n\n await featureReader.readAndRender(data, renderer);\n if (this._drawDebugInfo)\n this.drawTileDebugInfo(row, column, zoomLevel, ctx);\n } catch (e) {\n Logger.logError(loggerCategory, `Exception occurred while loading tile (${zoomLevel}/${row}/${column}) : ${e}`);\n }\n\n try {\n return this.createImageSourceFromDataURL(canvas.toDataURL(\"image/png\"), ImageSourceFormat.Png);\n } catch (e) {\n Logger.logError(loggerCategory, `Exception occurred while rendering tile (${zoomLevel}/${row}/${column}) : ${e}.`);\n }\n\n return undefined;\n }\n\n private createImageSourceFromDataURL(dataUrl: string, format: ImageSourceFormat) {\n if (!dataUrl)\n return undefined;\n\n const dataStartPos = dataUrl.indexOf(dataUrlHeaderToken) + dataUrlHeaderToken.length;\n\n if (dataStartPos < 0)\n return undefined;\n\n const base64Png = dataUrl.substring(dataStartPos);\n return new ImageSource(base64StringToUint8Array(base64Png), format);\n }\n\n public override async getFeatureInfo(featureInfos: MapLayerFeatureInfo[], quadId: QuadId, carto: Cartographic, _tree: ImageryMapTileTree, hit: HitDetail, options?: MapFeatureInfoOptions): Promise<void> {\n const tileExtent = this.getEPSG4326Extent(quadId.row, quadId.column, quadId.level);\n const tilePixelSizeX = (tileExtent.longitudeRight - tileExtent.longitudeLeft) / this.tileSize;\n const tilePixelSizeY = (tileExtent.latitudeTop - tileExtent.latitudeBottom) / this.tileSize;\n const tolerancePixel = options?.tolerance ?? 7;\n const toleranceWorldX = tilePixelSizeX * tolerancePixel;\n const toleranceWorldY = tilePixelSizeY * tolerancePixel;\n\n // Note: We used to pass a single point as the query 'geometry' and leverage the 'distance' parameter, turns\n // out that approach was a lot slower on some server compared to using a single envelope.\n const bbox: WGS84Extent = {\n longitudeLeft: carto.longitudeDegrees - toleranceWorldX, latitudeBottom: carto.latitudeDegrees - toleranceWorldY,\n longitudeRight: carto.longitudeDegrees + toleranceWorldX, latitudeTop: carto.latitudeDegrees + toleranceWorldY,\n };\n\n const bboxStr = this.getEPSG4326ExtentString(bbox, false);\n const urlObj = new URL(this._itemsUrl);\n urlObj.searchParams.append(\"bbox\", `${bboxStr}`);\n urlObj.searchParams.append(\"bbox-crs\", this._itemsCrs);\n urlObj.searchParams.append(\"limit\", `${this._limitParamMaxValue}`);\n const url = this.appendCustomParams(urlObj.toString());\n\n let data: any;\n try {\n data = await this.fetchItems(url, this._tileModeFetchTimeout);\n } catch {\n }\n if (!data) {\n Logger.logError(loggerCategory, \"Could not fetch OgcApiFeatures data.\");\n }\n\n const featureReader = new OgcApiFeaturesReader();\n await featureReader.readFeatureInfo({\n collection:data,\n layerSettings: this._settings,\n queryables: this._queryables,\n geomRenderer: new FeatureGraphicsRenderer({viewport: hit.viewport, crs: \"wgs84\"})},\n featureInfos );\n }\n}\n\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OgcApiFeaturesReader.js","sourceRoot":"","sources":["../../../src/OgcApiFeatures/OgcApiFeaturesReader.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 { Transform } from \"@itwin/core-geometry\";\r\nimport { GeoJSONGeometryReader } from \"../GeoJSON/GeoJSONGeometryReader\";\r\nimport * as Geojson from \"geojson\";\r\nimport { PrimitiveValue, PropertyValueFormat, StandardTypeNames } from \"@itwin/appui-abstract\";\r\nimport { ImageMapLayerSettings } from \"@itwin/core-common\";\r\nimport { FeatureInfoReader } from \"../Feature/FeatureInfoReader\";\r\nimport { FeatureAttributeDrivenSymbology, FeatureGeometryRenderer, GraphicPrimitive, GraphicsGeometryRenderer, MapLayerFeature, MapLayerFeatureAttribute, MapLayerFeatureInfo, MapSubLayerFeatureInfo } from \"@itwin/core-frontend\";\r\n\r\n/** @internal */\r\nexport type OgcFeaturePropertyType = \"string\" | \"number\" | \"integer\" | \"datetime\" | \"geometry\" | \"boolean\";\r\n\r\n/** @internal */\r\nexport interface ReadOgcApiFeaturesInfoOptions {\r\n collection: Geojson.FeatureCollection;\r\n layerSettings: ImageMapLayerSettings;\r\n queryables?: any;\r\n geomRenderer?: GraphicsGeometryRenderer;\r\n}\r\n\r\n/** @internal */\r\nexport class OgcApiFeaturesReader extends FeatureInfoReader {\r\n public transform: Transform | undefined;\r\n\r\n public constructor() {\r\n super();\r\n }\r\n\r\n private applySymbologyAttributes(attrSymbology: FeatureAttributeDrivenSymbology, feature: any) {\r\n if (attrSymbology && feature) {\r\n const symbolFields = attrSymbology.rendererFields;\r\n if (symbolFields && symbolFields.length > 0 && feature.properties) {\r\n const featureAttr: {[key: string]: any} = {};\r\n for (const [attrKey, attrValue] of Object.entries(feature.properties))\r\n if (symbolFields.includes(attrKey)) {\r\n featureAttr[attrKey] = attrValue;\r\n }\r\n attrSymbology.setActiveFeatureAttributes(featureAttr);\r\n }\r\n }\r\n }\r\n\r\n public async readAndRender(data: Geojson.FeatureCollection, renderer: FeatureGeometryRenderer) {\r\n const responseObj = data;\r\n if (responseObj.type === \"FeatureCollection\") {\r\n\r\n const geomReader = new GeoJSONGeometryReader(renderer);\r\n\r\n for (const feature of responseObj.features) {\r\n // Each feature has potentially a different geometry type, so we need to inform the geometry renderer\r\n if (renderer.hasSymbologyRenderer()) {\r\n renderer.symbolRenderer.activeGeometryType = feature.geometry.type;\r\n // Read attributes if needed (attribute driven symbology)\r\n if (renderer.symbolRenderer.isAttributeDriven()) {\r\n this.applySymbologyAttributes(renderer.symbolRenderer, feature);\r\n }\r\n }\r\n\r\n await geomReader.readGeometry(feature.geometry);\r\n }\r\n }\r\n }\r\n\r\n public async readFeatureInfo(opts: ReadOgcApiFeaturesInfoOptions, featureInfos: MapLayerFeatureInfo[]) {\r\n if (!Array.isArray(opts.collection.features))\r\n return;\r\n\r\n const layerInfo: MapLayerFeatureInfo = { layerName: opts.layerSettings.name };\r\n\r\n // Create a signature index for every field name / type.\r\n let fieldsType: { [key: string]: OgcFeaturePropertyType } | undefined;\r\n if (Array.isArray(opts.queryables?.properties)) {\r\n fieldsType = {};\r\n for (const fieldInfo of opts.queryables) {\r\n fieldsType[fieldInfo.name] = fieldInfo.type;\r\n }\r\n }\r\n\r\n const getStandardTypeName = (fieldType: OgcFeaturePropertyType) => {\r\n switch (fieldType) {\r\n case \"number\":\r\n return StandardTypeNames.Double;\r\n case \"integer\":\r\n return StandardTypeNames.Integer;\r\n case \"boolean\":\r\n return StandardTypeNames.Boolean;\r\n case \"datetime\":\r\n return StandardTypeNames.DateTime;\r\n default:\r\n return StandardTypeNames.String;\r\n }\r\n };\r\n\r\n const getRecordInfo = (fieldName: string, value: any): MapLayerFeatureAttribute => {\r\n let typename = StandardTypeNames.String;\r\n const propertyValue: PrimitiveValue = {valueFormat: PropertyValueFormat.Primitive};\r\n\r\n if (value === null) {\r\n value = undefined;\r\n }\r\n\r\n const strValue = `${value}`;\r\n if (fieldsType) {\r\n const fieldType = fieldsType[fieldName];\r\n switch (fieldType) {\r\n case \"integer\":\r\n propertyValue.value = value as number;\r\n break;\r\n case \"number\":\r\n propertyValue.value = this.toFixedWithoutPadding(value);\r\n break;\r\n case \"datetime\":\r\n propertyValue.value = new Date(value);\r\n break;\r\n default:\r\n if (value !== undefined)\r\n propertyValue.value = strValue;\r\n break;\r\n }\r\n typename = getStandardTypeName(fieldType);\r\n propertyValue.displayValue = this.getDisplayValue(typename, propertyValue.value);\r\n } else {\r\n // Queryables are optional with OGC Features, in this case everything is string.\r\n propertyValue.value = strValue;\r\n propertyValue.displayValue = strValue;\r\n }\r\n\r\n return {value: propertyValue, property: { name: fieldName, displayLabel: fieldName, typename }};\r\n };\r\n\r\n let geomReader: GeoJSONGeometryReader|undefined;\r\n if (opts.geomRenderer) {\r\n geomReader = new GeoJSONGeometryReader(opts.geomRenderer);\r\n }\r\n\r\n // Each feature response represent a single sub-layer, no need to check for existing entry.\r\n const subLayerInfo: MapSubLayerFeatureInfo = {\r\n subLayerName: opts.layerSettings.name,\r\n displayFieldName: opts.layerSettings.name,\r\n features: [],\r\n };\r\n\r\n // Read all features attributes / geometries\r\n for (const responseFeature of opts.collection.features) {\r\n const feature: MapLayerFeature = {attributes: []};\r\n\r\n if (responseFeature.properties) {\r\n for (const [key, value] of Object.entries(responseFeature.properties))\r\n feature.attributes?.push(getRecordInfo(key, value));\r\n }\r\n\r\n if (geomReader && opts.geomRenderer) {\r\n await geomReader.readGeometry(responseFeature.geometry as any);\r\n const graphics = opts.geomRenderer.moveGraphics();\r\n feature.geometries = graphics.map((graphic: GraphicPrimitive) => {\r\n return {graphic};\r\n });\r\n }\r\n subLayerInfo.features.push(feature);\r\n }\r\n\r\n if (layerInfo.subLayerInfos === undefined)\r\n layerInfo.subLayerInfos = [];\r\n layerInfo.subLayerInfos.push(subLayerInfo);\r\n\r\n featureInfos.push(layerInfo);\r\n }\r\n\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"OgcApiFeaturesReader.js","sourceRoot":"","sources":["../../../src/OgcApiFeatures/OgcApiFeaturesReader.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { Transform } from \"@itwin/core-geometry\";\nimport { GeoJSONGeometryReader } from \"../GeoJSON/GeoJSONGeometryReader\";\nimport * as Geojson from \"geojson\";\nimport { PrimitiveValue, PropertyValueFormat, StandardTypeNames } from \"@itwin/appui-abstract\";\nimport { ImageMapLayerSettings } from \"@itwin/core-common\";\nimport { FeatureInfoReader } from \"../Feature/FeatureInfoReader\";\nimport { FeatureAttributeDrivenSymbology, FeatureGeometryRenderer, GraphicPrimitive, GraphicsGeometryRenderer, MapLayerFeature, MapLayerFeatureAttribute, MapLayerFeatureInfo, MapSubLayerFeatureInfo } from \"@itwin/core-frontend\";\n\n/** @internal */\nexport type OgcFeaturePropertyType = \"string\" | \"number\" | \"integer\" | \"datetime\" | \"geometry\" | \"boolean\";\n\n/** @internal */\nexport interface ReadOgcApiFeaturesInfoOptions {\n collection: Geojson.FeatureCollection;\n layerSettings: ImageMapLayerSettings;\n queryables?: any;\n geomRenderer?: GraphicsGeometryRenderer;\n}\n\n/** @internal */\nexport class OgcApiFeaturesReader extends FeatureInfoReader {\n public transform: Transform | undefined;\n\n public constructor() {\n super();\n }\n\n private applySymbologyAttributes(attrSymbology: FeatureAttributeDrivenSymbology, feature: any) {\n if (attrSymbology && feature) {\n const symbolFields = attrSymbology.rendererFields;\n if (symbolFields && symbolFields.length > 0 && feature.properties) {\n const featureAttr: {[key: string]: any} = {};\n for (const [attrKey, attrValue] of Object.entries(feature.properties))\n if (symbolFields.includes(attrKey)) {\n featureAttr[attrKey] = attrValue;\n }\n attrSymbology.setActiveFeatureAttributes(featureAttr);\n }\n }\n }\n\n public async readAndRender(data: Geojson.FeatureCollection, renderer: FeatureGeometryRenderer) {\n const responseObj = data;\n if (responseObj.type === \"FeatureCollection\") {\n\n const geomReader = new GeoJSONGeometryReader(renderer);\n\n for (const feature of responseObj.features) {\n // Each feature has potentially a different geometry type, so we need to inform the geometry renderer\n if (renderer.hasSymbologyRenderer()) {\n renderer.symbolRenderer.activeGeometryType = feature.geometry.type;\n // Read attributes if needed (attribute driven symbology)\n if (renderer.symbolRenderer.isAttributeDriven()) {\n this.applySymbologyAttributes(renderer.symbolRenderer, feature);\n }\n }\n\n await geomReader.readGeometry(feature.geometry);\n }\n }\n }\n\n public async readFeatureInfo(opts: ReadOgcApiFeaturesInfoOptions, featureInfos: MapLayerFeatureInfo[]) {\n if (!Array.isArray(opts.collection.features))\n return;\n\n const layerInfo: MapLayerFeatureInfo = { layerName: opts.layerSettings.name };\n\n // Create a signature index for every field name / type.\n let fieldsType: { [key: string]: OgcFeaturePropertyType } | undefined;\n if (Array.isArray(opts.queryables?.properties)) {\n fieldsType = {};\n for (const fieldInfo of opts.queryables) {\n fieldsType[fieldInfo.name] = fieldInfo.type;\n }\n }\n\n const getStandardTypeName = (fieldType: OgcFeaturePropertyType) => {\n switch (fieldType) {\n case \"number\":\n return StandardTypeNames.Double;\n case \"integer\":\n return StandardTypeNames.Integer;\n case \"boolean\":\n return StandardTypeNames.Boolean;\n case \"datetime\":\n return StandardTypeNames.DateTime;\n default:\n return StandardTypeNames.String;\n }\n };\n\n const getRecordInfo = (fieldName: string, value: any): MapLayerFeatureAttribute => {\n let typename = StandardTypeNames.String;\n const propertyValue: PrimitiveValue = {valueFormat: PropertyValueFormat.Primitive};\n\n if (value === null) {\n value = undefined;\n }\n\n const strValue = `${value}`;\n if (fieldsType) {\n const fieldType = fieldsType[fieldName];\n switch (fieldType) {\n case \"integer\":\n propertyValue.value = value as number;\n break;\n case \"number\":\n propertyValue.value = this.toFixedWithoutPadding(value);\n break;\n case \"datetime\":\n propertyValue.value = new Date(value);\n break;\n default:\n if (value !== undefined)\n propertyValue.value = strValue;\n break;\n }\n typename = getStandardTypeName(fieldType);\n propertyValue.displayValue = this.getDisplayValue(typename, propertyValue.value);\n } else {\n // Queryables are optional with OGC Features, in this case everything is string.\n propertyValue.value = strValue;\n propertyValue.displayValue = strValue;\n }\n\n return {value: propertyValue, property: { name: fieldName, displayLabel: fieldName, typename }};\n };\n\n let geomReader: GeoJSONGeometryReader|undefined;\n if (opts.geomRenderer) {\n geomReader = new GeoJSONGeometryReader(opts.geomRenderer);\n }\n\n // Each feature response represent a single sub-layer, no need to check for existing entry.\n const subLayerInfo: MapSubLayerFeatureInfo = {\n subLayerName: opts.layerSettings.name,\n displayFieldName: opts.layerSettings.name,\n features: [],\n };\n\n // Read all features attributes / geometries\n for (const responseFeature of opts.collection.features) {\n const feature: MapLayerFeature = {attributes: []};\n\n if (responseFeature.properties) {\n for (const [key, value] of Object.entries(responseFeature.properties))\n feature.attributes?.push(getRecordInfo(key, value));\n }\n\n if (geomReader && opts.geomRenderer) {\n await geomReader.readGeometry(responseFeature.geometry as any);\n const graphics = opts.geomRenderer.moveGraphics();\n feature.geometries = graphics.map((graphic: GraphicPrimitive) => {\n return {graphic};\n });\n }\n subLayerInfo.features.push(feature);\n }\n\n if (layerInfo.subLayerInfos === undefined)\n layerInfo.subLayerInfos = [];\n layerInfo.subLayerInfos.push(subLayerInfo);\n\n featureInfos.push(layerInfo);\n }\n\n}\n"]}
|
|
@@ -8,7 +8,7 @@ export declare class GeometryTerrainDraper implements TileUser {
|
|
|
8
8
|
readonly maxDistanceZ = 100000;
|
|
9
9
|
readonly tileUserId: number;
|
|
10
10
|
constructor(viewport: Viewport, treeRef: GeometryTileTreeReference);
|
|
11
|
-
dispose(): void;
|
|
11
|
+
[Symbol.dispose](): void;
|
|
12
12
|
get iModel(): import("@itwin/core-frontend").IModelConnection;
|
|
13
13
|
onRequestStateChanged(): void;
|
|
14
14
|
discloseTileTrees(trees: DisclosedTileTreeSet): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GeometryTerrainDraper.d.ts","sourceRoot":"","sources":["../../../src/Tools/GeometryTerrainDraper.ts"],"names":[],"mappings":"AAIA,OAAO,EACc,oBAAoB,EACvC,yBAAyB,EACI,QAAQ,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"GeometryTerrainDraper.d.ts","sourceRoot":"","sources":["../../../src/Tools/GeometryTerrainDraper.ts"],"names":[],"mappings":"AAIA,OAAO,EACc,oBAAoB,EACvC,yBAAyB,EACI,QAAQ,EAAE,QAAQ,EAChD,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,KAAK,EAAsB,cAAc,EAAE,gBAAgB,EAAE,eAAe,EAAE,4BAA4B,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAA2C,OAAO,EAA8D,MAAM,sBAAsB,CAAC;AA6CzR,gBAAgB;AAChB,qBAAa,qBAAsB,YAAW,QAAQ;aASjB,QAAQ,EAAE,QAAQ;aAAkB,OAAO,EAAE,yBAAyB;IALzG,SAAgB,SAAS,QAA6B;IAEtD,SAAgB,YAAY,UAAS;IACrC,SAAgB,UAAU,EAAE,MAAM,CAAC;gBAEA,QAAQ,EAAE,QAAQ,EAAkB,OAAO,EAAE,yBAAyB;IAKlG,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI;IAI/B,IAAW,MAAM,oDAAmC;IAE7C,qBAAqB;IAIrB,iBAAiB,CAAC,KAAK,EAAE,oBAAoB;IAM7C,gBAAgB,CAAC,IAAI,EAAE,eAAe;IAqBtC,eAAe,CAAC,UAAU,EAAE,cAAc,EAAE,EAAE,QAAQ,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,SAAS,GAAG,UAAU;IA8BpI,SAAS,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,SAAS,GAAG,UAAU;IA4BvG,UAAU,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,SAAS,GAAG,UAAU;CAyBrH"}
|
|
@@ -52,7 +52,7 @@ class GeometryTerrainDraper {
|
|
|
52
52
|
this.tileUserId = core_frontend_1.TileUser.generateId();
|
|
53
53
|
core_frontend_1.IModelApp.tileAdmin.registerUser(this);
|
|
54
54
|
}
|
|
55
|
-
dispose() {
|
|
55
|
+
[Symbol.dispose]() {
|
|
56
56
|
core_frontend_1.IModelApp.tileAdmin.forgetUser(this);
|
|
57
57
|
}
|
|
58
58
|
get iModel() { return this.viewport.iModel; }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GeometryTerrainDraper.js","sourceRoot":"","sources":["../../../src/Tools/GeometryTerrainDraper.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 {\r\n CollectTileStatus, DisclosedTileTreeSet,\r\n GeometryTileTreeReference, IModelApp,\r\n Tile, TileGeometryCollector, TileUser, Viewport } from \"@itwin/core-frontend\";\r\nimport { Angle, ConvexClipPlaneSet, CurvePrimitive, GrowableXYZArray, IndexedPolyface, IndexedPolyfaceSubsetVisitor, Loop, Point3d, Polyface, PolyfaceClip, PolyfaceQuery, PolygonOps, Range3d, Ray3d, SweepLineStringToFacetsOptions, Transform, Vector3d } from \"@itwin/core-geometry\";\r\nimport { Logger } from \"@itwin/core-bentley\";\r\n\r\nconst loggerCategory = \"MapLayersFormats.GeometryTerrainDraper\";\r\n\r\n/** A TileGeometryCollector that restricts collection to tiles that overlap a line string.\r\n/* @internal\r\n*/\r\nclass LineSegmentCollector extends TileGeometryCollector {\r\n private _points: GrowableXYZArray;\r\n\r\n constructor(user: TileUser, chordTolerance: number, range: Range3d, transform: Transform, points: GrowableXYZArray) {\r\n super({ user, chordTolerance, range, transform });\r\n this._points = points;\r\n }\r\n\r\n public override addMissingTile(tile: Tile): void {\r\n Logger.logTrace(loggerCategory, `CollectorAdd missing tile: ${tile.contentId}`);\r\n super.addMissingTile(tile);\r\n }\r\n\r\n public override collectTile(tile: Tile): CollectTileStatus {\r\n let status = super.collectTile(tile);\r\n\r\n if (\"reject\" !== status && !this.rangeOverlapsLineString(tile.range)) {\r\n status = \"reject\";\r\n }\r\n\r\n Logger.logTrace(loggerCategory, `collectTile - tile: ${tile.contentId} status: ${status } isReady: ${tile.isReady} status:${tile.loadStatus}`);\r\n return status;\r\n }\r\n\r\n private rangeOverlapsLineString(range: Range3d) {\r\n let inside = false;\r\n const clipper = ConvexClipPlaneSet.createRange3dPlanes(range, true, true, true, true, false, false);\r\n if (this._options.transform)\r\n clipper.transformInPlace(this._options.transform);\r\n\r\n for (let i = 0; i < this._points.length - 1 && !inside; i++)\r\n inside = clipper.announceClippedSegmentIntervals(0, 1, this._points.getPoint3dAtUncheckedPointIndex(i), this._points.getPoint3dAtUncheckedPointIndex(i + 1));\r\n\r\n return inside;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class GeometryTerrainDraper implements TileUser {\r\n // The side angle measures how close the sweep vector is from being parallel to a side face.\r\n // The larger the angle, the more nearly vertical facets are ignored.\r\n // This is an \"empirical\" value that was determined by looking at \"problematic\" polyfaces\r\n public readonly sideAngle = Angle.createDegrees(0.06);\r\n\r\n public readonly maxDistanceZ = 1.0E5; // Expand the Z Range, but not so much that we get opposite side of globe.\r\n public readonly tileUserId: number;\r\n\r\n public constructor(public readonly viewport: Viewport, public readonly treeRef: GeometryTileTreeReference) {\r\n this.tileUserId = TileUser.generateId();\r\n IModelApp.tileAdmin.registerUser(this);\r\n }\r\n\r\n public dispose(): void {\r\n IModelApp.tileAdmin.forgetUser(this);\r\n }\r\n\r\n public get iModel() { return this.viewport.iModel; }\r\n\r\n public onRequestStateChanged() {\r\n this.viewport.invalidateDecorations();\r\n }\r\n\r\n public discloseTileTrees(trees: DisclosedTileTreeSet) {\r\n trees.disclose(this.treeRef);\r\n }\r\n\r\n // Filter out non-top facets:\r\n // For unknown reasons, there are \"perpendicular\" facets appearing in the terrain meshes.\r\n public getMeshTopFacets(mesh: IndexedPolyface) {\r\n // constant inputs\r\n const sweepVector = Vector3d.unitZ();\r\n // i.e., region is horizontal\r\n // create subset visitor from the top facets\r\n const topFacets: number[] = [];\r\n const facetNormal = Vector3d.createZero();\r\n\r\n for (const visitor = mesh.createVisitor(0); visitor.moveToNextFacet(); ) {\r\n if (PolygonOps.unitNormal(visitor.point, facetNormal)) {\r\n const theta = facetNormal.angleFromPerpendicular(sweepVector);\r\n if (!theta.isMagnitudeLessThanOrEqual(this.sideAngle)) { // skip side facet\r\n if (facetNormal.dotProduct(sweepVector) > 0) // this is a top facet\r\n topFacets.push(visitor.currentReadIndex());\r\n }\r\n }\r\n }\r\n\r\n return IndexedPolyfaceSubsetVisitor.createSubsetVisitor(mesh, topFacets, 0);\r\n }\r\n\r\n public drapeLineString(outStrings: CurvePrimitive[], inPoints: GrowableXYZArray, tolerance: number, range: Range3d): \"loading\" | \"complete\" {\r\n const tree = this.treeRef.treeOwner.load();\r\n if (!tree)\r\n return \"loading\";\r\n\r\n const expandedRange = Range3d.createFrom(range);\r\n expandedRange.extendZOnly(-this.maxDistanceZ);\r\n expandedRange.extendZOnly(this.maxDistanceZ);\r\n\r\n const collector = new LineSegmentCollector(this, tolerance, expandedRange, tree.iModelTransform, inPoints);\r\n this.treeRef.collectTileGeometry(collector);\r\n collector.requestMissingTiles();\r\n\r\n if (collector.isAllGeometryLoaded && collector.polyfaces.length > 0) {\r\n\r\n for (const polyface of collector.polyfaces) {\r\n // Use this to serialize (problematic) polyface\r\n // console.log (`const polyface = ${JSON.stringify(IModelJson.Writer.toIModelJson(polyface))}`);\r\n outStrings.push(...PolyfaceQuery.sweepLineStringToFacets(\r\n inPoints,\r\n polyface,\r\n SweepLineStringToFacetsOptions.create(Vector3d.unitZ(), this.sideAngle, true, true, false, false)));\r\n }\r\n\r\n return \"complete\";\r\n }\r\n\r\n return \"loading\";\r\n }\r\n\r\n public drapeLoop(outMeshes: Polyface[], loop: Loop, tolerance: number, range: Range3d): \"loading\" | \"complete\" {\r\n const tree = this.treeRef.treeOwner.load();\r\n if (!tree)\r\n return \"loading\";\r\n\r\n const expandedRange = Range3d.createFrom(range);\r\n expandedRange.extendZOnly(-this.maxDistanceZ);\r\n expandedRange.extendZOnly(this.maxDistanceZ);\r\n\r\n const strokes = loop.getPackedStrokes();\r\n if (!strokes)\r\n return \"complete\";\r\n\r\n const collector = new LineSegmentCollector(this, tolerance, expandedRange, tree.iModelTransform, strokes);\r\n this.treeRef.collectTileGeometry(collector);\r\n collector.requestMissingTiles();\r\n\r\n if (collector.isAllGeometryLoaded && collector.polyfaces.length > 0) {\r\n for (const polyface of collector.polyfaces) {\r\n const topFacets = this.getMeshTopFacets(polyface);\r\n const mesh = PolyfaceClip.drapeRegion(topFacets, loop);\r\n if (mesh)\r\n outMeshes.push(mesh);\r\n }\r\n return \"complete\";\r\n }\r\n return \"loading\";\r\n }\r\n public drapePoint(outPoint: Point3d, point: Point3d, chordTolerance: number, range: Range3d): \"loading\" | \"complete\" {\r\n const tree = this.treeRef.treeOwner.load();\r\n if (!tree)\r\n return \"loading\";\r\n\r\n const expandedRange = Range3d.createFrom(range);\r\n expandedRange.extendZOnly(-this.maxDistanceZ);\r\n expandedRange.extendZOnly(this.maxDistanceZ);\r\n\r\n const collector = new TileGeometryCollector({chordTolerance, range: expandedRange, user: this });\r\n this.treeRef.collectTileGeometry(collector);\r\n collector.requestMissingTiles();\r\n\r\n if (collector.isAllGeometryLoaded && collector.polyfaces.length > 0) {\r\n for (const polyface of collector.polyfaces) {\r\n // Im assuming a single polyface here since we are draping a single point\r\n const facetLocation = PolyfaceQuery.intersectRay3d(polyface, Ray3d.create(point, Vector3d.unitZ() ));\r\n if (!facetLocation)\r\n continue;\r\n outPoint.setFromPoint3d(facetLocation.point);\r\n }\r\n return \"complete\";\r\n }\r\n return \"loading\";\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"GeometryTerrainDraper.js","sourceRoot":"","sources":["../../../src/Tools/GeometryTerrainDraper.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport {\n CollectTileStatus, DisclosedTileTreeSet,\n GeometryTileTreeReference, IModelApp,\n Tile, TileGeometryCollector, TileUser, Viewport\n} from \"@itwin/core-frontend\";\nimport { Angle, ConvexClipPlaneSet, CurvePrimitive, GrowableXYZArray, IndexedPolyface, IndexedPolyfaceSubsetVisitor, Loop, Point3d, Polyface, PolyfaceClip, PolyfaceQuery, PolygonOps, Range3d, Ray3d, SweepLineStringToFacetsOptions, Transform, Vector3d } from \"@itwin/core-geometry\";\nimport { Logger } from \"@itwin/core-bentley\";\n\nconst loggerCategory = \"MapLayersFormats.GeometryTerrainDraper\";\n\n/** A TileGeometryCollector that restricts collection to tiles that overlap a line string.\n/* @internal\n*/\nclass LineSegmentCollector extends TileGeometryCollector {\n private _points: GrowableXYZArray;\n\n constructor(user: TileUser, chordTolerance: number, range: Range3d, transform: Transform, points: GrowableXYZArray) {\n super({ user, chordTolerance, range, transform });\n this._points = points;\n }\n\n public override addMissingTile(tile: Tile): void {\n Logger.logTrace(loggerCategory, `CollectorAdd missing tile: ${tile.contentId}`);\n super.addMissingTile(tile);\n }\n\n public override collectTile(tile: Tile): CollectTileStatus {\n let status = super.collectTile(tile);\n\n if (\"reject\" !== status && !this.rangeOverlapsLineString(tile.range)) {\n status = \"reject\";\n }\n\n Logger.logTrace(loggerCategory, `collectTile - tile: ${tile.contentId} status: ${status} isReady: ${tile.isReady} status:${tile.loadStatus}`);\n return status;\n }\n\n private rangeOverlapsLineString(range: Range3d) {\n let inside = false;\n const clipper = ConvexClipPlaneSet.createRange3dPlanes(range, true, true, true, true, false, false);\n if (this._options.transform)\n clipper.transformInPlace(this._options.transform);\n\n for (let i = 0; i < this._points.length - 1 && !inside; i++)\n inside = clipper.announceClippedSegmentIntervals(0, 1, this._points.getPoint3dAtUncheckedPointIndex(i), this._points.getPoint3dAtUncheckedPointIndex(i + 1));\n\n return inside;\n }\n}\n\n/** @internal */\nexport class GeometryTerrainDraper implements TileUser {\n // The side angle measures how close the sweep vector is from being parallel to a side face.\n // The larger the angle, the more nearly vertical facets are ignored.\n // This is an \"empirical\" value that was determined by looking at \"problematic\" polyfaces\n public readonly sideAngle = Angle.createDegrees(0.06);\n\n public readonly maxDistanceZ = 1.0E5; // Expand the Z Range, but not so much that we get opposite side of globe.\n public readonly tileUserId: number;\n\n public constructor(public readonly viewport: Viewport, public readonly treeRef: GeometryTileTreeReference) {\n this.tileUserId = TileUser.generateId();\n IModelApp.tileAdmin.registerUser(this);\n }\n\n public [Symbol.dispose](): void {\n IModelApp.tileAdmin.forgetUser(this);\n }\n\n public get iModel() { return this.viewport.iModel; }\n\n public onRequestStateChanged() {\n this.viewport.invalidateDecorations();\n }\n\n public discloseTileTrees(trees: DisclosedTileTreeSet) {\n trees.disclose(this.treeRef);\n }\n\n // Filter out non-top facets:\n // For unknown reasons, there are \"perpendicular\" facets appearing in the terrain meshes.\n public getMeshTopFacets(mesh: IndexedPolyface) {\n // constant inputs\n const sweepVector = Vector3d.unitZ();\n // i.e., region is horizontal\n // create subset visitor from the top facets\n const topFacets: number[] = [];\n const facetNormal = Vector3d.createZero();\n\n for (const visitor = mesh.createVisitor(0); visitor.moveToNextFacet();) {\n if (PolygonOps.unitNormal(visitor.point, facetNormal)) {\n const theta = facetNormal.angleFromPerpendicular(sweepVector);\n if (!theta.isMagnitudeLessThanOrEqual(this.sideAngle)) { // skip side facet\n if (facetNormal.dotProduct(sweepVector) > 0) // this is a top facet\n topFacets.push(visitor.currentReadIndex());\n }\n }\n }\n\n return IndexedPolyfaceSubsetVisitor.createSubsetVisitor(mesh, topFacets, 0);\n }\n\n public drapeLineString(outStrings: CurvePrimitive[], inPoints: GrowableXYZArray, tolerance: number, range: Range3d): \"loading\" | \"complete\" {\n const tree = this.treeRef.treeOwner.load();\n if (!tree)\n return \"loading\";\n\n const expandedRange = Range3d.createFrom(range);\n expandedRange.extendZOnly(-this.maxDistanceZ);\n expandedRange.extendZOnly(this.maxDistanceZ);\n\n const collector = new LineSegmentCollector(this, tolerance, expandedRange, tree.iModelTransform, inPoints);\n this.treeRef.collectTileGeometry(collector);\n collector.requestMissingTiles();\n\n if (collector.isAllGeometryLoaded && collector.polyfaces.length > 0) {\n\n for (const polyface of collector.polyfaces) {\n // Use this to serialize (problematic) polyface\n // console.log (`const polyface = ${JSON.stringify(IModelJson.Writer.toIModelJson(polyface))}`);\n outStrings.push(...PolyfaceQuery.sweepLineStringToFacets(\n inPoints,\n polyface,\n SweepLineStringToFacetsOptions.create(Vector3d.unitZ(), this.sideAngle, true, true, false, false)));\n }\n\n return \"complete\";\n }\n\n return \"loading\";\n }\n\n public drapeLoop(outMeshes: Polyface[], loop: Loop, tolerance: number, range: Range3d): \"loading\" | \"complete\" {\n const tree = this.treeRef.treeOwner.load();\n if (!tree)\n return \"loading\";\n\n const expandedRange = Range3d.createFrom(range);\n expandedRange.extendZOnly(-this.maxDistanceZ);\n expandedRange.extendZOnly(this.maxDistanceZ);\n\n const strokes = loop.getPackedStrokes();\n if (!strokes)\n return \"complete\";\n\n const collector = new LineSegmentCollector(this, tolerance, expandedRange, tree.iModelTransform, strokes);\n this.treeRef.collectTileGeometry(collector);\n collector.requestMissingTiles();\n\n if (collector.isAllGeometryLoaded && collector.polyfaces.length > 0) {\n for (const polyface of collector.polyfaces) {\n const topFacets = this.getMeshTopFacets(polyface);\n const mesh = PolyfaceClip.drapeRegion(topFacets, loop);\n if (mesh)\n outMeshes.push(mesh);\n }\n return \"complete\";\n }\n return \"loading\";\n }\n public drapePoint(outPoint: Point3d, point: Point3d, chordTolerance: number, range: Range3d): \"loading\" | \"complete\" {\n const tree = this.treeRef.treeOwner.load();\n if (!tree)\n return \"loading\";\n\n const expandedRange = Range3d.createFrom(range);\n expandedRange.extendZOnly(-this.maxDistanceZ);\n expandedRange.extendZOnly(this.maxDistanceZ);\n\n const collector = new TileGeometryCollector({ chordTolerance, range: expandedRange, user: this });\n this.treeRef.collectTileGeometry(collector);\n collector.requestMissingTiles();\n\n if (collector.isAllGeometryLoaded && collector.polyfaces.length > 0) {\n for (const polyface of collector.polyfaces) {\n // Im assuming a single polyface here since we are draping a single point\n const facetLocation = PolyfaceQuery.intersectRay3d(polyface, Ray3d.create(point, Vector3d.unitZ()));\n if (!facetLocation)\n continue;\n outPoint.setFromPoint3d(facetLocation.point);\n }\n return \"complete\";\n }\n return \"loading\";\n }\n}\n"]}
|