@loaders.gl/i3s 3.4.6 → 4.0.0-alpha.10
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/dist/arcgis-webscene-loader.js +1 -1
- package/dist/dist.min.js +8452 -8866
- package/dist/es5/arcgis-webscene-loader.js +1 -1
- package/dist/es5/arcgis-webscene-loader.js.map +1 -1
- package/dist/es5/i3s-attribute-loader.js +18 -20
- package/dist/es5/i3s-attribute-loader.js.map +1 -1
- package/dist/es5/i3s-building-scene-layer-loader.js +1 -1
- package/dist/es5/i3s-building-scene-layer-loader.js.map +1 -1
- package/dist/es5/i3s-content-loader.js +2 -3
- package/dist/es5/i3s-content-loader.js.map +1 -1
- package/dist/es5/i3s-loader.js +1 -1
- package/dist/es5/i3s-loader.js.map +1 -1
- package/dist/es5/i3s-node-page-loader.js +4 -22
- package/dist/es5/i3s-node-page-loader.js.map +1 -1
- package/dist/es5/i3s-slpk-loader.js +1 -1
- package/dist/es5/i3s-slpk-loader.js.map +1 -1
- package/dist/es5/index.js +8 -1
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/lib/parsers/parse-arcgis-webscene.js.map +1 -1
- package/dist/es5/lib/parsers/parse-i3s-attribute.js +7 -26
- package/dist/es5/lib/parsers/parse-i3s-attribute.js.map +1 -1
- package/dist/es5/lib/parsers/parse-i3s-tile-content.js +2 -2
- package/dist/es5/lib/parsers/parse-i3s-tile-content.js.map +1 -1
- package/dist/es5/lib/parsers/parse-slpk/parse-slpk.js +2 -2
- package/dist/es5/lib/parsers/parse-slpk/parse-slpk.js.map +1 -1
- package/dist/es5/lib/parsers/parse-slpk/slpk-archieve.js +140 -23
- package/dist/es5/lib/parsers/parse-slpk/slpk-archieve.js.map +1 -1
- package/dist/es5/lib/utils/{customizeColors.js → customize-/321/201olors.js} +65 -40
- package/dist/es5/lib/utils/customize-/321/201olors.js.map +1 -0
- package/dist/es5/types.js.map +1 -1
- package/dist/es5/workers/{i3s-content-nodejs-worker.js → i3s-content-worker-node.js} +2 -2
- package/dist/es5/workers/i3s-content-worker-node.js.map +1 -0
- package/dist/esm/arcgis-webscene-loader.js +1 -1
- package/dist/esm/arcgis-webscene-loader.js.map +1 -1
- package/dist/esm/i3s-attribute-loader.js +2 -6
- package/dist/esm/i3s-attribute-loader.js.map +1 -1
- package/dist/esm/i3s-building-scene-layer-loader.js +1 -1
- package/dist/esm/i3s-building-scene-layer-loader.js.map +1 -1
- package/dist/esm/i3s-content-loader.js +2 -3
- package/dist/esm/i3s-content-loader.js.map +1 -1
- package/dist/esm/i3s-loader.js +1 -1
- package/dist/esm/i3s-loader.js.map +1 -1
- package/dist/esm/i3s-node-page-loader.js +3 -7
- package/dist/esm/i3s-node-page-loader.js.map +1 -1
- package/dist/esm/i3s-slpk-loader.js +1 -1
- package/dist/esm/i3s-slpk-loader.js.map +1 -1
- package/dist/esm/index.js +2 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/parsers/parse-arcgis-webscene.js.map +1 -1
- package/dist/esm/lib/parsers/parse-i3s-attribute.js +1 -1
- package/dist/esm/lib/parsers/parse-i3s-attribute.js.map +1 -1
- package/dist/esm/lib/parsers/parse-i3s-tile-content.js +1 -1
- package/dist/esm/lib/parsers/parse-i3s-tile-content.js.map +1 -1
- package/dist/esm/lib/parsers/parse-slpk/parse-slpk.js +2 -2
- package/dist/esm/lib/parsers/parse-slpk/parse-slpk.js.map +1 -1
- package/dist/esm/lib/parsers/parse-slpk/slpk-archieve.js +59 -9
- package/dist/esm/lib/parsers/parse-slpk/slpk-archieve.js.map +1 -1
- package/dist/esm/lib/utils/{customizeColors.js → customize-/321/201olors.js} +9 -3
- package/dist/esm/lib/utils/customize-/321/201olors.js.map +1 -0
- package/dist/esm/types.js.map +1 -1
- package/dist/esm/workers/{i3s-content-nodejs-worker.js → i3s-content-worker-node.js} +2 -2
- package/dist/esm/workers/i3s-content-worker-node.js.map +1 -0
- package/dist/i3s-attribute-loader.d.ts +3 -2
- package/dist/i3s-attribute-loader.d.ts.map +1 -1
- package/dist/i3s-attribute-loader.js +2 -5
- package/dist/i3s-building-scene-layer-loader.js +1 -1
- package/dist/i3s-content-loader.d.ts.map +1 -1
- package/dist/i3s-content-loader.js +2 -3
- package/dist/i3s-content-worker-node.js +197 -0
- package/dist/{i3s-content-nodejs-worker.js.map → i3s-content-worker-node.js.map} +3 -3
- package/dist/i3s-content-worker.js +93 -527
- package/dist/i3s-node-page-loader.d.ts +3 -2
- package/dist/i3s-node-page-loader.d.ts.map +1 -1
- package/dist/i3s-node-page-loader.js +2 -6
- package/dist/i3s-slpk-loader.d.ts +6 -3
- package/dist/i3s-slpk-loader.d.ts.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -3
- package/dist/lib/parsers/parse-arcgis-webscene.js +1 -0
- package/dist/lib/parsers/parse-i3s-attribute.d.ts +6 -4
- package/dist/lib/parsers/parse-i3s-attribute.d.ts.map +1 -1
- package/dist/lib/parsers/parse-i3s-attribute.js +11 -10
- package/dist/lib/parsers/parse-i3s-tile-content.d.ts.map +1 -1
- package/dist/lib/parsers/parse-i3s-tile-content.js +7 -2
- package/dist/lib/parsers/parse-slpk/parse-slpk.d.ts.map +1 -1
- package/dist/lib/parsers/parse-slpk/parse-slpk.js +1 -1
- package/dist/lib/parsers/parse-slpk/slpk-archieve.d.ts +6 -0
- package/dist/lib/parsers/parse-slpk/slpk-archieve.d.ts.map +1 -1
- package/dist/lib/parsers/parse-slpk/slpk-archieve.js +72 -9
- package/dist/lib/utils/{customizeColors.d.ts → customize-/321/201olors.d.ts} +1 -1
- package/dist/lib/utils/customize-/321/201olors.d.ts.map +1 -0
- package/dist/lib/utils/{customizeColors.js → customize-/321/201olors.js} +18 -3
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/workers/i3s-content-worker-node.d.ts +2 -0
- package/dist/workers/i3s-content-worker-node.d.ts.map +1 -0
- package/dist/workers/{i3s-content-nodejs-worker.js → i3s-content-worker-node.js} +2 -1
- package/package.json +13 -13
- package/src/arcgis-webscene-loader.ts +1 -1
- package/src/i3s-attribute-loader.ts +7 -7
- package/src/i3s-building-scene-layer-loader.ts +1 -1
- package/src/i3s-content-loader.ts +2 -3
- package/src/i3s-node-page-loader.ts +6 -10
- package/src/i3s-slpk-loader.ts +5 -3
- package/src/index.ts +13 -7
- package/src/lib/parsers/parse-arcgis-webscene.ts +1 -0
- package/src/lib/parsers/parse-i3s-attribute.ts +21 -14
- package/src/lib/parsers/parse-i3s-tile-content.ts +6 -1
- package/src/lib/parsers/parse-slpk/parse-slpk.ts +4 -1
- package/src/lib/parsers/parse-slpk/slpk-archieve.ts +73 -9
- package/src/lib/utils/{customizeColors.ts → customize-/321/201olors.ts} +18 -3
- package/src/types.ts +1 -0
- package/src/workers/{i3s-content-nodejs-worker.ts → i3s-content-worker-node.ts} +2 -1
- package/dist/es5/lib/utils/customizeColors.js.map +0 -1
- package/dist/es5/workers/i3s-content-nodejs-worker.js.map +0 -1
- package/dist/esm/lib/utils/customizeColors.js.map +0 -1
- package/dist/esm/workers/i3s-content-nodejs-worker.js.map +0 -1
- package/dist/i3s-content-nodejs-worker.js +0 -198
- package/dist/lib/utils/customizeColors.d.ts.map +0 -1
- package/dist/workers/i3s-content-nodejs-worker.d.ts +0 -2
- package/dist/workers/i3s-content-nodejs-worker.d.ts.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@loaders.gl/i3s",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.0.0-alpha.10",
|
|
4
4
|
"description": "i3s .",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"publishConfig": {
|
|
@@ -27,19 +27,19 @@
|
|
|
27
27
|
"README.md"
|
|
28
28
|
],
|
|
29
29
|
"scripts": {
|
|
30
|
-
"pre-build": "npm run build-bundle && npm run build-worker && npm run build-
|
|
30
|
+
"pre-build": "npm run build-bundle && npm run build-worker && npm run build-worker-node",
|
|
31
31
|
"build-bundle": "esbuild src/bundle.ts --bundle --outfile=dist/dist.min.js",
|
|
32
|
-
"build-worker": "esbuild src/workers/i3s-content-worker.ts --
|
|
33
|
-
"build-
|
|
32
|
+
"build-worker": "esbuild src/workers/i3s-content-worker.ts --outfile=dist/i3s-content-worker.js --target=esnext --bundle --define:__VERSION__=\\\"$npm_package_version\\\"",
|
|
33
|
+
"build-worker-node": "esbuild src/workers/i3s-content-worker-node.ts --outfile=dist/i3s-content-worker-node.js --platform=node --target=node16 --minify --bundle --sourcemap --define:__VERSION__=\\\"$npm_package_version\\\""
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@loaders.gl/compression": "
|
|
37
|
-
"@loaders.gl/draco": "
|
|
38
|
-
"@loaders.gl/images": "
|
|
39
|
-
"@loaders.gl/loader-utils": "
|
|
40
|
-
"@loaders.gl/schema": "
|
|
41
|
-
"@loaders.gl/textures": "
|
|
42
|
-
"@loaders.gl/tiles": "
|
|
36
|
+
"@loaders.gl/compression": "4.0.0-alpha.10",
|
|
37
|
+
"@loaders.gl/draco": "4.0.0-alpha.10",
|
|
38
|
+
"@loaders.gl/images": "4.0.0-alpha.10",
|
|
39
|
+
"@loaders.gl/loader-utils": "4.0.0-alpha.10",
|
|
40
|
+
"@loaders.gl/schema": "4.0.0-alpha.10",
|
|
41
|
+
"@loaders.gl/textures": "4.0.0-alpha.10",
|
|
42
|
+
"@loaders.gl/tiles": "4.0.0-alpha.10",
|
|
43
43
|
"@luma.gl/constants": "^8.5.4",
|
|
44
44
|
"@math.gl/core": "^3.5.1",
|
|
45
45
|
"@math.gl/culling": "^3.5.1",
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
"md5": "^2.3.0"
|
|
48
48
|
},
|
|
49
49
|
"peerDependencies": {
|
|
50
|
-
"@loaders.gl/core": "^
|
|
50
|
+
"@loaders.gl/core": "^4.0.0-alpha.8"
|
|
51
51
|
},
|
|
52
|
-
"gitHead": "
|
|
52
|
+
"gitHead": "7efdbe09e02098aad6d985e4d6465d08806e19a9"
|
|
53
53
|
}
|
|
@@ -5,7 +5,7 @@ import {parseWebscene} from './lib/parsers/parse-arcgis-webscene';
|
|
|
5
5
|
|
|
6
6
|
// __VERSION__ is injected by babel-plugin-version-inline
|
|
7
7
|
// @ts-ignore TS2304: Cannot find name '__VERSION__'.
|
|
8
|
-
const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : '
|
|
8
|
+
const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'beta';
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* Loader for ArcGis WebScene
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import type {LoaderWithParser} from '@loaders.gl/loader-utils';
|
|
1
|
+
import type {LoaderOptions, LoaderWithParser} from '@loaders.gl/loader-utils';
|
|
2
2
|
import {load} from '@loaders.gl/core';
|
|
3
|
+
import type {I3STileAttributes} from './lib/parsers/parse-i3s-attribute';
|
|
3
4
|
import {parseI3STileAttribute} from './lib/parsers/parse-i3s-attribute';
|
|
4
5
|
import {getUrlWithToken} from './lib/utils/url-utils';
|
|
5
6
|
|
|
@@ -8,25 +9,24 @@ import {getUrlWithToken} from './lib/utils/url-utils';
|
|
|
8
9
|
const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';
|
|
9
10
|
const EMPTY_VALUE = '';
|
|
10
11
|
const REJECTED_STATUS = 'rejected';
|
|
12
|
+
|
|
11
13
|
/**
|
|
12
14
|
* Loader for I3S attributes
|
|
13
15
|
*/
|
|
14
|
-
export const I3SAttributeLoader: LoaderWithParser = {
|
|
16
|
+
export const I3SAttributeLoader: LoaderWithParser<I3STileAttributes, never, LoaderOptions> = {
|
|
15
17
|
name: 'I3S Attribute',
|
|
16
18
|
id: 'i3s-attribute',
|
|
17
19
|
module: 'i3s',
|
|
18
20
|
version: VERSION,
|
|
19
21
|
mimeTypes: ['application/binary'],
|
|
20
|
-
parse,
|
|
22
|
+
parse: async (arrayBuffer: ArrayBuffer, options?: LoaderOptions) => parseI3STileAttribute(arrayBuffer, options),
|
|
21
23
|
extensions: ['bin'],
|
|
22
24
|
options: {},
|
|
23
25
|
binary: true
|
|
24
26
|
};
|
|
25
27
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
return data;
|
|
29
|
-
}
|
|
28
|
+
|
|
29
|
+
// TODO - these seem to use the loader rather than being part of the loader. Move to different file...
|
|
30
30
|
|
|
31
31
|
/**
|
|
32
32
|
* Load attributes based on feature id
|
|
@@ -6,7 +6,7 @@ import {parseBuildingSceneLayer} from './lib/parsers/parse-i3s-building-scene-la
|
|
|
6
6
|
// __VERSION__ is injected by babel-plugin-version-inline
|
|
7
7
|
// @ts-ignore TS2304: Cannot find name '__VERSION__'.
|
|
8
8
|
|
|
9
|
-
const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : '
|
|
9
|
+
const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'beta';
|
|
10
10
|
/**
|
|
11
11
|
* Loader for I3S - Building Scene Layer
|
|
12
12
|
*/
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import {isBrowser} from '@loaders.gl/worker-utils';
|
|
2
1
|
import type {LoaderWithParser, LoaderContext} from '@loaders.gl/loader-utils';
|
|
3
2
|
import type {I3SLoaderOptions} from './i3s-loader';
|
|
4
3
|
import {parseI3STileContent} from './lib/parsers/parse-i3s-tile-content';
|
|
@@ -7,13 +6,13 @@ import {I3STileOptions, I3STilesetOptions} from './types';
|
|
|
7
6
|
// __VERSION__ is injected by babel-plugin-version-inline
|
|
8
7
|
// @ts-ignore TS2304: Cannot find name '__VERSION__'.
|
|
9
8
|
|
|
10
|
-
const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : '
|
|
9
|
+
const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'beta';
|
|
11
10
|
/**
|
|
12
11
|
* Loader for I3S - Indexed 3D Scene Layer
|
|
13
12
|
*/
|
|
14
13
|
export const I3SContentLoader: LoaderWithParser = {
|
|
15
14
|
name: 'I3S Content (Indexed Scene Layers)',
|
|
16
|
-
id:
|
|
15
|
+
id: 'i3s-content',
|
|
17
16
|
module: 'i3s',
|
|
18
17
|
worker: true,
|
|
19
18
|
version: VERSION,
|
|
@@ -1,28 +1,24 @@
|
|
|
1
|
-
import type {LoaderWithParser} from '@loaders.gl/loader-utils';
|
|
1
|
+
import type {LoaderOptions, LoaderWithParser} from '@loaders.gl/loader-utils';
|
|
2
|
+
import type {NodePage} from './types';
|
|
2
3
|
|
|
3
4
|
// __VERSION__ is injected by babel-plugin-version-inline
|
|
4
5
|
// @ts-ignore TS2304: Cannot find name '__VERSION__'.
|
|
5
6
|
const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';
|
|
6
7
|
|
|
7
|
-
async function parseNodePage(data) {
|
|
8
|
-
return JSON.parse(new TextDecoder().decode(data));
|
|
8
|
+
async function parseNodePage(data: ArrayBuffer, options?: LoaderOptions): Promise<NodePage> {
|
|
9
|
+
return JSON.parse(new TextDecoder().decode(data)) as NodePage;
|
|
9
10
|
}
|
|
10
11
|
|
|
11
12
|
/**
|
|
12
13
|
* Loader for I3S node pages
|
|
13
14
|
*/
|
|
14
|
-
export const I3SNodePageLoader: LoaderWithParser = {
|
|
15
|
+
export const I3SNodePageLoader: LoaderWithParser<NodePage, never, LoaderOptions> = {
|
|
15
16
|
name: 'I3S Node Page',
|
|
16
17
|
id: 'i3s-node-page',
|
|
17
18
|
module: 'i3s',
|
|
18
19
|
version: VERSION,
|
|
19
20
|
mimeTypes: ['application/json'],
|
|
20
|
-
parse,
|
|
21
|
+
parse: parseNodePage,
|
|
21
22
|
extensions: ['json'],
|
|
22
23
|
options: {}
|
|
23
24
|
};
|
|
24
|
-
|
|
25
|
-
async function parse(data) {
|
|
26
|
-
data = parseNodePage(data);
|
|
27
|
-
return data;
|
|
28
|
-
}
|
package/src/i3s-slpk-loader.ts
CHANGED
|
@@ -6,14 +6,16 @@ import {parseSLPK} from './lib/parsers/parse-slpk/parse-slpk';
|
|
|
6
6
|
const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';
|
|
7
7
|
|
|
8
8
|
export type SLPKLoaderOptions = LoaderOptions & {
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
slpk?: {
|
|
10
|
+
path?: string;
|
|
11
|
+
pathMode?: 'http' | 'raw';
|
|
12
|
+
};
|
|
11
13
|
};
|
|
12
14
|
|
|
13
15
|
/**
|
|
14
16
|
* Loader for SLPK - Scene Layer Package
|
|
15
17
|
*/
|
|
16
|
-
export const SLPKLoader: LoaderWithParser = {
|
|
18
|
+
export const SLPKLoader: LoaderWithParser<Buffer, never, SLPKLoaderOptions> = {
|
|
17
19
|
name: 'I3S SLPK (Scene Layer Package)',
|
|
18
20
|
id: 'slpk',
|
|
19
21
|
module: 'i3s',
|
package/src/index.ts
CHANGED
|
@@ -1,9 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
export {I3SContentLoader} from './i3s-content-loader';
|
|
4
|
-
export {I3SAttributeLoader, loadFeatureAttributes} from './i3s-attribute-loader';
|
|
5
|
-
export {I3SBuildingSceneLayerLoader} from './i3s-building-scene-layer-loader';
|
|
6
|
-
export {ArcGisWebSceneLoader} from './arcgis-webscene-loader';
|
|
1
|
+
// loaders.gl, MIT license
|
|
2
|
+
|
|
7
3
|
export type {
|
|
8
4
|
BoundingVolumes,
|
|
9
5
|
Mbs,
|
|
@@ -34,6 +30,16 @@ export type {
|
|
|
34
30
|
ValueCount,
|
|
35
31
|
BuildingSceneSublayer,
|
|
36
32
|
DATA_TYPE,
|
|
37
|
-
OperationalLayer
|
|
33
|
+
OperationalLayer,
|
|
34
|
+
TextureSetDefinitionFormats
|
|
38
35
|
} from './types';
|
|
36
|
+
|
|
39
37
|
export {COORDINATE_SYSTEM} from './lib/parsers/constants';
|
|
38
|
+
|
|
39
|
+
export {I3SLoader} from './i3s-loader';
|
|
40
|
+
export {SLPKLoader} from './i3s-slpk-loader';
|
|
41
|
+
export {I3SContentLoader} from './i3s-content-loader';
|
|
42
|
+
export {I3SAttributeLoader, loadFeatureAttributes} from './i3s-attribute-loader';
|
|
43
|
+
export {I3SBuildingSceneLayerLoader} from './i3s-building-scene-layer-loader';
|
|
44
|
+
export {I3SNodePageLoader} from './i3s-node-page-loader';
|
|
45
|
+
export {ArcGisWebSceneLoader} from './arcgis-webscene-loader';
|
|
@@ -90,6 +90,7 @@ async function parseOperationalLayers(
|
|
|
90
90
|
async function checkSupportedIndexCRS(layer: OperationalLayer) {
|
|
91
91
|
try {
|
|
92
92
|
const layerJson = await load(layer.url, JSONLoader);
|
|
93
|
+
// @ts-expect-error
|
|
93
94
|
const wkid = layerJson?.spatialReference?.wkid;
|
|
94
95
|
|
|
95
96
|
if (wkid !== SUPPORTED_WKID) {
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
// loaders.gl, MIT license
|
|
2
|
+
|
|
3
|
+
import {TypedArray} from '@loaders.gl/schema';
|
|
4
|
+
|
|
1
5
|
import {
|
|
2
6
|
STRING_ATTRIBUTE_TYPE,
|
|
3
7
|
OBJECT_ID_ATTRIBUTE_TYPE,
|
|
@@ -5,13 +9,16 @@ import {
|
|
|
5
9
|
INT_16_ATTRIBUTE_TYPE
|
|
6
10
|
} from './constants';
|
|
7
11
|
|
|
12
|
+
type Attribute = string[] | TypedArray | null;
|
|
13
|
+
export type I3STileAttributes = Record<string, Attribute>;
|
|
14
|
+
|
|
8
15
|
/**
|
|
9
16
|
* Get particular tile and creates attribute object inside.
|
|
10
|
-
* @param
|
|
17
|
+
* @param arrayBuffer
|
|
11
18
|
* @param {Object} options
|
|
12
19
|
* @returns {Promise<object>}
|
|
13
20
|
*/
|
|
14
|
-
export
|
|
21
|
+
export function parseI3STileAttribute(arrayBuffer: ArrayBuffer, options): I3STileAttributes {
|
|
15
22
|
const {attributeName, attributeType} = options;
|
|
16
23
|
|
|
17
24
|
if (!attributeName) {
|
|
@@ -25,10 +32,10 @@ export async function parseI3STileAttribute(arrayBuffer, options) {
|
|
|
25
32
|
/**
|
|
26
33
|
* Parse attributes based on attribute type.
|
|
27
34
|
* @param {String} attributeType
|
|
28
|
-
* @param
|
|
29
|
-
* @returns
|
|
35
|
+
* @param arrayBuffer
|
|
36
|
+
* @returns
|
|
30
37
|
*/
|
|
31
|
-
function parseAttribute(attributeType, arrayBuffer) {
|
|
38
|
+
function parseAttribute(attributeType, arrayBuffer: ArrayBuffer): Attribute {
|
|
32
39
|
switch (attributeType) {
|
|
33
40
|
case STRING_ATTRIBUTE_TYPE:
|
|
34
41
|
return parseStringsAttribute(arrayBuffer);
|
|
@@ -46,10 +53,10 @@ function parseAttribute(attributeType, arrayBuffer) {
|
|
|
46
53
|
/**
|
|
47
54
|
* Parse short number attribute.
|
|
48
55
|
* Short Integer spec - https://github.com/Esri/i3s-spec/blob/master/docs/1.7/attributeStorageInfo.cmn.md
|
|
49
|
-
* @param
|
|
50
|
-
* @returns
|
|
56
|
+
* @param arrayBuffer
|
|
57
|
+
* @returns
|
|
51
58
|
*/
|
|
52
|
-
function parseShortNumberAttribute(arrayBuffer) {
|
|
59
|
+
function parseShortNumberAttribute(arrayBuffer: ArrayBuffer): Uint32Array {
|
|
53
60
|
const countOffset = 4;
|
|
54
61
|
return new Uint32Array(arrayBuffer, countOffset);
|
|
55
62
|
}
|
|
@@ -57,10 +64,10 @@ function parseShortNumberAttribute(arrayBuffer) {
|
|
|
57
64
|
/**
|
|
58
65
|
* Parse Int16 short number attribute.
|
|
59
66
|
* Parsing of such data is not documented. Added to handle Building Scene Layer Tileset attributes data.
|
|
60
|
-
* @param
|
|
61
|
-
* @returns
|
|
67
|
+
* @param arrayBuffer
|
|
68
|
+
* @returns
|
|
62
69
|
*/
|
|
63
|
-
function parseInt16ShortNumberAttribute(arrayBuffer) {
|
|
70
|
+
function parseInt16ShortNumberAttribute(arrayBuffer: ArrayBuffer): Int16Array {
|
|
64
71
|
const countOffset = 4;
|
|
65
72
|
return new Int16Array(arrayBuffer, countOffset);
|
|
66
73
|
}
|
|
@@ -68,10 +75,10 @@ function parseInt16ShortNumberAttribute(arrayBuffer) {
|
|
|
68
75
|
/**
|
|
69
76
|
* Parse float attribute.
|
|
70
77
|
* Double Spec - https://github.com/Esri/i3s-spec/blob/master/docs/1.7/attributeStorageInfo.cmn.md
|
|
71
|
-
* @param
|
|
72
|
-
* @returns
|
|
78
|
+
* @param arrayBuffer
|
|
79
|
+
* @returns
|
|
73
80
|
*/
|
|
74
|
-
function parseFloatAttribute(arrayBuffer) {
|
|
81
|
+
function parseFloatAttribute(arrayBuffer: ArrayBuffer): Float64Array {
|
|
75
82
|
const countOffset = 8;
|
|
76
83
|
return new Float64Array(arrayBuffer, countOffset);
|
|
77
84
|
}
|
|
@@ -23,7 +23,7 @@ import {getUrlWithToken} from '../utils/url-utils';
|
|
|
23
23
|
|
|
24
24
|
import {GL_TYPE_MAP, getConstructorForDataFormat, sizeOf, COORDINATE_SYSTEM} from './constants';
|
|
25
25
|
import {I3SLoaderOptions} from '../../i3s-loader';
|
|
26
|
-
import {customizeColors} from '../utils/
|
|
26
|
+
import {customizeColors} from '../utils/customize-сolors';
|
|
27
27
|
|
|
28
28
|
const scratchVector = new Vector3([0, 0, 0]);
|
|
29
29
|
|
|
@@ -80,18 +80,23 @@ export async function parseI3STileContent(
|
|
|
80
80
|
} catch (e) {
|
|
81
81
|
// context object is different between worker and node.js conversion script.
|
|
82
82
|
// To prevent error we parse data in ordinary way if it is not parsed by using context.
|
|
83
|
+
// @ts-expect-error
|
|
83
84
|
content.texture = await parse(arrayBuffer, loader, options);
|
|
84
85
|
}
|
|
85
86
|
} else if (loader === CompressedTextureLoader || loader === BasisLoader) {
|
|
86
87
|
let texture = await load(arrayBuffer, loader, tileOptions.textureLoaderOptions);
|
|
87
88
|
if (loader === BasisLoader) {
|
|
89
|
+
// @ts-expect-error
|
|
88
90
|
texture = texture[0];
|
|
89
91
|
}
|
|
90
92
|
content.texture = {
|
|
91
93
|
compressed: true,
|
|
92
94
|
mipmaps: false,
|
|
95
|
+
// @ts-expect-error
|
|
93
96
|
width: texture[0].width,
|
|
97
|
+
// @ts-expect-error
|
|
94
98
|
height: texture[0].height,
|
|
99
|
+
// @ts-expect-error
|
|
95
100
|
data: texture
|
|
96
101
|
};
|
|
97
102
|
}
|
|
@@ -57,5 +57,8 @@ export async function parseSLPK(data: ArrayBuffer, options: SLPKLoaderOptions =
|
|
|
57
57
|
throw new Error('No hash file in slpk');
|
|
58
58
|
}
|
|
59
59
|
|
|
60
|
-
return await new SLPKArchive(data, hashFile).getFile(
|
|
60
|
+
return await new SLPKArchive(data, hashFile).getFile(
|
|
61
|
+
options.slpk?.path ?? '',
|
|
62
|
+
options.slpk?.pathMode
|
|
63
|
+
);
|
|
61
64
|
}
|
|
@@ -15,6 +15,41 @@ type HashElement = {
|
|
|
15
15
|
offset: number;
|
|
16
16
|
};
|
|
17
17
|
|
|
18
|
+
const PATH_DESCRIPTIONS: {test: RegExp; extensions: string[]}[] = [
|
|
19
|
+
{
|
|
20
|
+
test: /^$/,
|
|
21
|
+
extensions: ['3dSceneLayer.json.gz']
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
test: /^nodepages\/\d+$/,
|
|
25
|
+
extensions: ['.json.gz']
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
test: /^nodes\/\d+$/,
|
|
29
|
+
extensions: ['/3dNodeIndexDocument.json.gz']
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
test: /^nodes\/\d+\/textures\/.+$/,
|
|
33
|
+
extensions: ['.jpg', '.png', '.bin.dds.gz', '.ktx']
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
test: /^nodes\/\d+\/geometries\/\d+$/,
|
|
37
|
+
extensions: ['.bin.gz', '.draco.gz']
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
test: /^nodes\/\d+\/attributes\/f_\d+\/\d+$/,
|
|
41
|
+
extensions: ['.bin.gz']
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
test: /^statistics\/f_\d+\/\d+$/,
|
|
45
|
+
extensions: ['.json.gz']
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
test: /^nodes\/\d+\/shared$/,
|
|
49
|
+
extensions: ['/sharedResource.json.gz']
|
|
50
|
+
}
|
|
51
|
+
];
|
|
52
|
+
|
|
18
53
|
/**
|
|
19
54
|
* Class for handling information about slpk file
|
|
20
55
|
*/
|
|
@@ -60,13 +95,46 @@ export class SLPKArchive {
|
|
|
60
95
|
*/
|
|
61
96
|
async getFile(path: string, mode: 'http' | 'raw' = 'raw'): Promise<Buffer> {
|
|
62
97
|
if (mode === 'http') {
|
|
63
|
-
|
|
98
|
+
const extensions = PATH_DESCRIPTIONS.find((val) => val.test.test(path))?.extensions;
|
|
99
|
+
if (extensions) {
|
|
100
|
+
let data: ArrayBuffer | undefined;
|
|
101
|
+
for (const ext of extensions) {
|
|
102
|
+
data = await this.getDataByPath(`${path}${ext}`);
|
|
103
|
+
if (data) {
|
|
104
|
+
break;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
if (data) {
|
|
108
|
+
return Buffer.from(data);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
if (mode === 'raw') {
|
|
113
|
+
const decompressedFile = await this.getDataByPath(`${path}.gz`);
|
|
114
|
+
if (decompressedFile) {
|
|
115
|
+
return Buffer.from(decompressedFile);
|
|
116
|
+
}
|
|
117
|
+
const fileWithoutCompression = this.getFileBytes(path);
|
|
118
|
+
if (fileWithoutCompression) {
|
|
119
|
+
return Buffer.from(fileWithoutCompression);
|
|
120
|
+
}
|
|
64
121
|
}
|
|
65
122
|
|
|
66
|
-
|
|
123
|
+
throw new Error('No such file in the archieve');
|
|
124
|
+
}
|
|
67
125
|
|
|
68
|
-
|
|
69
|
-
|
|
126
|
+
/**
|
|
127
|
+
* returning uncompressed data for paths that ends with .gz and raw data for all other paths
|
|
128
|
+
* @param path - path inside the archive
|
|
129
|
+
* @returns buffer with the file data
|
|
130
|
+
*/
|
|
131
|
+
private async getDataByPath(path: string): Promise<ArrayBuffer | undefined> {
|
|
132
|
+
const data = this.getFileBytes(path);
|
|
133
|
+
if (!data) {
|
|
134
|
+
return undefined;
|
|
135
|
+
}
|
|
136
|
+
if (/\.gz$/.test(path)) {
|
|
137
|
+
const decompressedData = await processOnWorker(CompressionWorker, data, {
|
|
70
138
|
compression: 'gzip',
|
|
71
139
|
operation: 'decompress',
|
|
72
140
|
_workerType: 'test',
|
|
@@ -74,11 +142,7 @@ export class SLPKArchive {
|
|
|
74
142
|
});
|
|
75
143
|
return decompressedData;
|
|
76
144
|
}
|
|
77
|
-
|
|
78
|
-
if (fileWithoutCompression) {
|
|
79
|
-
return Promise.resolve(Buffer.from(fileWithoutCompression));
|
|
80
|
-
}
|
|
81
|
-
throw new Error('No such file in the archieve');
|
|
145
|
+
return Buffer.from(data);
|
|
82
146
|
}
|
|
83
147
|
|
|
84
148
|
/**
|
|
@@ -4,7 +4,7 @@ import type {COLOR, I3STileOptions, I3STilesetOptions} from '../../types';
|
|
|
4
4
|
import {load} from '@loaders.gl/core';
|
|
5
5
|
import {getAttributeValueType, I3SAttributeLoader} from '../../i3s-attribute-loader';
|
|
6
6
|
import {I3SLoaderOptions} from '../../i3s-loader';
|
|
7
|
-
import {getUrlWithToken} from '
|
|
7
|
+
import {getUrlWithToken} from './url-utils';
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* Modify vertex colors array to visualize 3D objects in a attribute driven way
|
|
@@ -64,8 +64,11 @@ export async function customizeColors(
|
|
|
64
64
|
}
|
|
65
65
|
|
|
66
66
|
const attributeValuesMap: {[key: number]: COLOR} = {};
|
|
67
|
+
// @ts-expect-error
|
|
67
68
|
for (let i = 0; i < objectIdAttributeData[objectIdField.name].length; i++) {
|
|
69
|
+
// @ts-expect-error
|
|
68
70
|
attributeValuesMap[objectIdAttributeData[objectIdField.name][i]] = calculateColorForAttribute(
|
|
71
|
+
// @ts-expect-error
|
|
69
72
|
colorizeAttributeData[colorizeAttributeField.name][i] as number,
|
|
70
73
|
options
|
|
71
74
|
);
|
|
@@ -76,7 +79,17 @@ export async function customizeColors(
|
|
|
76
79
|
if (!color) {
|
|
77
80
|
continue; // eslint-disable-line no-continue
|
|
78
81
|
}
|
|
79
|
-
|
|
82
|
+
|
|
83
|
+
/* eslint max-statements: ["error", 30] */
|
|
84
|
+
/* eslint complexity: ["error", 12] */
|
|
85
|
+
if (options.i3s.colorsByAttribute.mode === 'multiply') {
|
|
86
|
+
// multiplying original mesh and calculated for attribute rgba colors in range 0-255
|
|
87
|
+
color.forEach((colorItem, index) => {
|
|
88
|
+
colors.value[i * 4 + index] = (colors.value[i * 4 + index] * colorItem) / 255;
|
|
89
|
+
});
|
|
90
|
+
} else {
|
|
91
|
+
colors.value.set(color, i * 4);
|
|
92
|
+
}
|
|
80
93
|
}
|
|
81
94
|
|
|
82
95
|
return colors;
|
|
@@ -114,7 +127,7 @@ async function loadFeatureAttributeData(
|
|
|
114
127
|
{attributeUrls}: I3STileOptions,
|
|
115
128
|
{attributeStorageInfo}: I3STilesetOptions,
|
|
116
129
|
options?: I3SLoaderOptions
|
|
117
|
-
): Promise<{[key: string]: string[] | Uint32Array | Uint16Array | Float64Array} | null> {
|
|
130
|
+
): Promise<{[key: string]: string[] | Uint32Array | Uint16Array | Float64Array | null} | null> {
|
|
118
131
|
const attributeIndex = attributeStorageInfo.findIndex(({name}) => attributeName === name);
|
|
119
132
|
if (attributeIndex === -1) {
|
|
120
133
|
return null;
|
|
@@ -125,5 +138,7 @@ async function loadFeatureAttributeData(
|
|
|
125
138
|
attributeName,
|
|
126
139
|
attributeType
|
|
127
140
|
});
|
|
141
|
+
|
|
142
|
+
// @ts-expect-error TODO action engine
|
|
128
143
|
return objectIdAttributeData;
|
|
129
144
|
}
|
package/src/types.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
// Polyfills increases the bundle size significantly. Use it for NodeJS worker only
|
|
2
2
|
import '@loaders.gl/polyfills';
|
|
3
|
+
import {createLoaderWorker} from '@loaders.gl/loader-utils';
|
|
3
4
|
import {I3SContentLoader} from '../i3s-content-loader';
|
|
4
5
|
|
|
5
6
|
createLoaderWorker(I3SContentLoader);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"customizeColors.js","names":["_core","require","_i3sAttributeLoader","_urlUtils","customizeColors","_x","_x2","_x3","_x4","_x5","_customizeColors","apply","arguments","_asyncToGenerator2","default","_regenerator","mark","_callee","colors","featureIds","tileOptions","tilesetOptions","options","_options$i3s2","colorizeAttributeField","colorizeAttributeData","objectIdField","objectIdAttributeData","attributeValuesMap","i","_i","color","wrap","_callee$","_context","prev","next","i3s","colorsByAttribute","abrupt","fields","find","_ref3","_options$i3s3","_options$i3s3$colorsB","name","attributeName","includes","type","loadFeatureAttributeData","sent","_ref4","length","calculateColorForAttribute","value","set","stop","attributeValue","_options$i3s","_options$i3s$colorsBy","minValue","maxValue","minColor","maxColor","rate","Math","round","_x6","_x7","_x8","_x9","_loadFeatureAttributeData","_callee2","_ref","_ref2","_options$i3s4","attributeUrls","attributeStorageInfo","attributeIndex","objectIdAttributeUrl","attributeType","_callee2$","_context2","findIndex","_ref5","getUrlWithToken","token","getAttributeValueType","load","I3SAttributeLoader"],"sources":["../../../../src/lib/utils/customizeColors.ts"],"sourcesContent":["import type {MeshAttribute} from '@loaders.gl/schema';\nimport type {COLOR, I3STileOptions, I3STilesetOptions} from '../../types';\n\nimport {load} from '@loaders.gl/core';\nimport {getAttributeValueType, I3SAttributeLoader} from '../../i3s-attribute-loader';\nimport {I3SLoaderOptions} from '../../i3s-loader';\nimport {getUrlWithToken} from '../utils/url-utils';\n\n/**\n * Modify vertex colors array to visualize 3D objects in a attribute driven way\n * @param colors - vertex colors attribute\n * @param featureIds - feature Ids attribute\n * @param tileOptions - tile - related options\n * @param tilesetOptions - tileset-related options\n * @param options - loader options\n * @returns midified colors attribute\n */\nexport async function customizeColors(\n colors: MeshAttribute,\n featureIds: MeshAttribute,\n tileOptions: I3STileOptions,\n tilesetOptions: I3STilesetOptions,\n options?: I3SLoaderOptions\n): Promise<MeshAttribute> {\n if (!options?.i3s?.colorsByAttribute) {\n return colors;\n }\n\n const colorizeAttributeField = tilesetOptions.fields.find(\n ({name}) => name === options?.i3s?.colorsByAttribute?.attributeName\n );\n if (\n !colorizeAttributeField ||\n !['esriFieldTypeDouble', 'esriFieldTypeInteger', 'esriFieldTypeSmallInteger'].includes(\n colorizeAttributeField.type\n )\n ) {\n return colors;\n }\n\n const colorizeAttributeData = await loadFeatureAttributeData(\n colorizeAttributeField.name,\n tileOptions,\n tilesetOptions,\n options\n );\n if (!colorizeAttributeData) {\n return colors;\n }\n\n const objectIdField = tilesetOptions.fields.find(({type}) => type === 'esriFieldTypeOID');\n if (!objectIdField) {\n return colors;\n }\n\n const objectIdAttributeData = await loadFeatureAttributeData(\n objectIdField.name,\n tileOptions,\n tilesetOptions,\n options\n );\n if (!objectIdAttributeData) {\n return colors;\n }\n\n const attributeValuesMap: {[key: number]: COLOR} = {};\n for (let i = 0; i < objectIdAttributeData[objectIdField.name].length; i++) {\n attributeValuesMap[objectIdAttributeData[objectIdField.name][i]] = calculateColorForAttribute(\n colorizeAttributeData[colorizeAttributeField.name][i] as number,\n options\n );\n }\n\n for (let i = 0; i < featureIds.value.length; i++) {\n const color = attributeValuesMap[featureIds.value[i]];\n if (!color) {\n continue; // eslint-disable-line no-continue\n }\n colors.value.set(color, i * 4);\n }\n\n return colors;\n}\n\n/**\n * Calculate rgba color from the attribute value\n * @param attributeValue - value of the attribute\n * @param options - loader options\n * @returns - color array for a specific attribute value\n */\nfunction calculateColorForAttribute(attributeValue: number, options?: I3SLoaderOptions): COLOR {\n if (!options?.i3s?.colorsByAttribute) {\n return [255, 255, 255, 255];\n }\n const {minValue, maxValue, minColor, maxColor} = options.i3s.colorsByAttribute;\n const rate = (attributeValue - minValue) / (maxValue - minValue);\n const color: COLOR = [255, 255, 255, 255];\n for (let i = 0; i < minColor.length; i++) {\n color[i] = Math.round((maxColor[i] - minColor[i]) * rate + minColor[i]);\n }\n return color;\n}\n\n/**\n * Load feature attribute data from the ArcGIS rest service\n * @param attributeName - attribute name\n * @param tileOptions - tile-related options\n * @param tilesetOptions - tileset-related options\n * @param options - loader options\n * @returns - Array-like list of the attribute values\n */\nasync function loadFeatureAttributeData(\n attributeName: string,\n {attributeUrls}: I3STileOptions,\n {attributeStorageInfo}: I3STilesetOptions,\n options?: I3SLoaderOptions\n): Promise<{[key: string]: string[] | Uint32Array | Uint16Array | Float64Array} | null> {\n const attributeIndex = attributeStorageInfo.findIndex(({name}) => attributeName === name);\n if (attributeIndex === -1) {\n return null;\n }\n const objectIdAttributeUrl = getUrlWithToken(attributeUrls[attributeIndex], options?.i3s?.token);\n const attributeType = getAttributeValueType(attributeStorageInfo[attributeIndex]);\n const objectIdAttributeData = await load(objectIdAttributeUrl, I3SAttributeLoader, {\n attributeName,\n attributeType\n });\n return objectIdAttributeData;\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"i3s-content-nodejs-worker.js","names":["_loaderUtils","require","_i3sContentLoader","createLoaderWorker","I3SContentLoader"],"sources":["../../../src/workers/i3s-content-nodejs-worker.ts"],"sourcesContent":["import {createLoaderWorker} from '@loaders.gl/loader-utils';\nimport '@loaders.gl/polyfills';\nimport {I3SContentLoader} from '../i3s-content-loader';\n\ncreateLoaderWorker(I3SContentLoader);\n"],"mappings":";;AAAA,IAAAA,YAAA,GAAAC,OAAA;AACAA,OAAA;AACA,IAAAC,iBAAA,GAAAD,OAAA;AAEA,IAAAE,+BAAkB,EAACC,kCAAgB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"customizeColors.js","names":["load","getAttributeValueType","I3SAttributeLoader","getUrlWithToken","customizeColors","colors","featureIds","tileOptions","tilesetOptions","options","_options$i3s","i3s","colorsByAttribute","colorizeAttributeField","fields","find","_ref","_options$i3s2","_options$i3s2$colorsB","name","attributeName","includes","type","colorizeAttributeData","loadFeatureAttributeData","objectIdField","_ref2","objectIdAttributeData","attributeValuesMap","i","length","calculateColorForAttribute","value","color","set","attributeValue","_options$i3s3","minValue","maxValue","minColor","maxColor","rate","Math","round","_ref3","_ref4","_options$i3s4","attributeUrls","attributeStorageInfo","attributeIndex","findIndex","_ref5","objectIdAttributeUrl","token","attributeType"],"sources":["../../../../src/lib/utils/customizeColors.ts"],"sourcesContent":["import type {MeshAttribute} from '@loaders.gl/schema';\nimport type {COLOR, I3STileOptions, I3STilesetOptions} from '../../types';\n\nimport {load} from '@loaders.gl/core';\nimport {getAttributeValueType, I3SAttributeLoader} from '../../i3s-attribute-loader';\nimport {I3SLoaderOptions} from '../../i3s-loader';\nimport {getUrlWithToken} from '../utils/url-utils';\n\n/**\n * Modify vertex colors array to visualize 3D objects in a attribute driven way\n * @param colors - vertex colors attribute\n * @param featureIds - feature Ids attribute\n * @param tileOptions - tile - related options\n * @param tilesetOptions - tileset-related options\n * @param options - loader options\n * @returns midified colors attribute\n */\nexport async function customizeColors(\n colors: MeshAttribute,\n featureIds: MeshAttribute,\n tileOptions: I3STileOptions,\n tilesetOptions: I3STilesetOptions,\n options?: I3SLoaderOptions\n): Promise<MeshAttribute> {\n if (!options?.i3s?.colorsByAttribute) {\n return colors;\n }\n\n const colorizeAttributeField = tilesetOptions.fields.find(\n ({name}) => name === options?.i3s?.colorsByAttribute?.attributeName\n );\n if (\n !colorizeAttributeField ||\n !['esriFieldTypeDouble', 'esriFieldTypeInteger', 'esriFieldTypeSmallInteger'].includes(\n colorizeAttributeField.type\n )\n ) {\n return colors;\n }\n\n const colorizeAttributeData = await loadFeatureAttributeData(\n colorizeAttributeField.name,\n tileOptions,\n tilesetOptions,\n options\n );\n if (!colorizeAttributeData) {\n return colors;\n }\n\n const objectIdField = tilesetOptions.fields.find(({type}) => type === 'esriFieldTypeOID');\n if (!objectIdField) {\n return colors;\n }\n\n const objectIdAttributeData = await loadFeatureAttributeData(\n objectIdField.name,\n tileOptions,\n tilesetOptions,\n options\n );\n if (!objectIdAttributeData) {\n return colors;\n }\n\n const attributeValuesMap: {[key: number]: COLOR} = {};\n for (let i = 0; i < objectIdAttributeData[objectIdField.name].length; i++) {\n attributeValuesMap[objectIdAttributeData[objectIdField.name][i]] = calculateColorForAttribute(\n colorizeAttributeData[colorizeAttributeField.name][i] as number,\n options\n );\n }\n\n for (let i = 0; i < featureIds.value.length; i++) {\n const color = attributeValuesMap[featureIds.value[i]];\n if (!color) {\n continue; // eslint-disable-line no-continue\n }\n colors.value.set(color, i * 4);\n }\n\n return colors;\n}\n\n/**\n * Calculate rgba color from the attribute value\n * @param attributeValue - value of the attribute\n * @param options - loader options\n * @returns - color array for a specific attribute value\n */\nfunction calculateColorForAttribute(attributeValue: number, options?: I3SLoaderOptions): COLOR {\n if (!options?.i3s?.colorsByAttribute) {\n return [255, 255, 255, 255];\n }\n const {minValue, maxValue, minColor, maxColor} = options.i3s.colorsByAttribute;\n const rate = (attributeValue - minValue) / (maxValue - minValue);\n const color: COLOR = [255, 255, 255, 255];\n for (let i = 0; i < minColor.length; i++) {\n color[i] = Math.round((maxColor[i] - minColor[i]) * rate + minColor[i]);\n }\n return color;\n}\n\n/**\n * Load feature attribute data from the ArcGIS rest service\n * @param attributeName - attribute name\n * @param tileOptions - tile-related options\n * @param tilesetOptions - tileset-related options\n * @param options - loader options\n * @returns - Array-like list of the attribute values\n */\nasync function loadFeatureAttributeData(\n attributeName: string,\n {attributeUrls}: I3STileOptions,\n {attributeStorageInfo}: I3STilesetOptions,\n options?: I3SLoaderOptions\n): Promise<{[key: string]: string[] | Uint32Array | Uint16Array | Float64Array} | null> {\n const attributeIndex = attributeStorageInfo.findIndex(({name}) => attributeName === name);\n if (attributeIndex === -1) {\n return null;\n }\n const objectIdAttributeUrl = getUrlWithToken(attributeUrls[attributeIndex], options?.i3s?.token);\n const attributeType = getAttributeValueType(attributeStorageInfo[attributeIndex]);\n const objectIdAttributeData = await load(objectIdAttributeUrl, I3SAttributeLoader, {\n attributeName,\n attributeType\n });\n return objectIdAttributeData;\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"i3s-content-nodejs-worker.js","names":["createLoaderWorker","I3SContentLoader"],"sources":["../../../src/workers/i3s-content-nodejs-worker.ts"],"sourcesContent":["import {createLoaderWorker} from '@loaders.gl/loader-utils';\nimport '@loaders.gl/polyfills';\nimport {I3SContentLoader} from '../i3s-content-loader';\n\ncreateLoaderWorker(I3SContentLoader);\n"],"mappings":"AAAA,SAAQA,kBAAkB,QAAO,0BAA0B;AAC3D,OAAO,uBAAuB;AAC9B,SAAQC,gBAAgB,QAAO,uBAAuB;AAEtDD,kBAAkB,CAACC,gBAAgB,CAAC"}
|