@loaders.gl/i3s 4.0.0-beta.3 → 4.0.0-beta.4
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/dist.dev.js +45 -393
- package/dist/i3s-content-worker-node.js +47 -47
- package/dist/i3s-content-worker-node.js.map +4 -4
- package/dist/i3s-content-worker.js +13 -13
- package/dist/i3s-loader.d.ts.map +1 -1
- package/dist/i3s-loader.js +4 -2
- package/dist/i3s-loader.js.map +1 -1
- package/dist/index.cjs +13 -3
- package/dist/lib/parsers/parse-i3s.js +2 -2
- package/dist/lib/parsers/parse-i3s.js.map +1 -1
- package/dist/lib/utils/url-utils.d.ts +6 -0
- package/dist/lib/utils/url-utils.d.ts.map +1 -1
- package/dist/lib/utils/url-utils.js +8 -0
- package/dist/lib/utils/url-utils.js.map +1 -1
- package/package.json +11 -11
- package/src/i3s-loader.ts +5 -2
- package/src/lib/parsers/parse-i3s.ts +2 -2
- package/src/lib/utils/url-utils.ts +17 -0
|
@@ -102,7 +102,7 @@
|
|
|
102
102
|
);
|
|
103
103
|
globalThis._loadersgl_.version = NPM_TAG;
|
|
104
104
|
} else {
|
|
105
|
-
globalThis._loadersgl_.version = "4.0.0-beta.
|
|
105
|
+
globalThis._loadersgl_.version = "4.0.0-beta.4";
|
|
106
106
|
}
|
|
107
107
|
}
|
|
108
108
|
return globalThis._loadersgl_.version;
|
|
@@ -772,7 +772,7 @@
|
|
|
772
772
|
return void 0 && (void 0)(scriptSource, id);
|
|
773
773
|
}
|
|
774
774
|
if (isWorker) {
|
|
775
|
-
eval.call(
|
|
775
|
+
eval.call(globalThis, scriptSource);
|
|
776
776
|
return null;
|
|
777
777
|
}
|
|
778
778
|
const script = document.createElement("script");
|
|
@@ -1435,7 +1435,7 @@
|
|
|
1435
1435
|
var navigator_ = globalThis.navigator || {};
|
|
1436
1436
|
|
|
1437
1437
|
// ../../node_modules/@probe.gl/log/node_modules/@probe.gl/env/dist/utils/globals.js
|
|
1438
|
-
var VERSION2 = true ? "4.0.0-beta.
|
|
1438
|
+
var VERSION2 = true ? "4.0.0-beta.4" : "untranspiled source";
|
|
1439
1439
|
var isBrowser4 = isBrowser3();
|
|
1440
1440
|
|
|
1441
1441
|
// ../../node_modules/@probe.gl/log/dist/utils/local-storage.js
|
|
@@ -5226,13 +5226,13 @@
|
|
|
5226
5226
|
_defineProperty(Ellipsoid, "WGS84", new Ellipsoid(WGS84_RADIUS_X, WGS84_RADIUS_Y, WGS84_RADIUS_Z));
|
|
5227
5227
|
|
|
5228
5228
|
// ../images/src/lib/utils/version.ts
|
|
5229
|
-
var VERSION3 = true ? "4.0.0-beta.
|
|
5229
|
+
var VERSION3 = true ? "4.0.0-beta.4" : "latest";
|
|
5230
5230
|
|
|
5231
5231
|
// ../images/src/lib/category-api/image-type.ts
|
|
5232
|
-
var
|
|
5232
|
+
var parseImageNode = globalThis.loaders?.parseImageNode;
|
|
5233
5233
|
var IMAGE_SUPPORTED = typeof Image !== "undefined";
|
|
5234
5234
|
var IMAGE_BITMAP_SUPPORTED = typeof ImageBitmap !== "undefined";
|
|
5235
|
-
var NODE_IMAGE_SUPPORTED = Boolean(
|
|
5235
|
+
var NODE_IMAGE_SUPPORTED = Boolean(parseImageNode);
|
|
5236
5236
|
var DATA_SUPPORTED = isBrowser ? true : NODE_IMAGE_SUPPORTED;
|
|
5237
5237
|
function isImageTypeSupported(type) {
|
|
5238
5238
|
switch (type) {
|
|
@@ -5553,9 +5553,9 @@
|
|
|
5553
5553
|
// ../images/src/lib/parsers/parse-to-node-image.ts
|
|
5554
5554
|
async function parseToNodeImage(arrayBuffer, options) {
|
|
5555
5555
|
const { mimeType } = getBinaryImageMetadata(arrayBuffer) || {};
|
|
5556
|
-
const
|
|
5557
|
-
assert(
|
|
5558
|
-
return await
|
|
5556
|
+
const parseImageNode2 = globalThis.loaders?.parseImageNode;
|
|
5557
|
+
assert(parseImageNode2);
|
|
5558
|
+
return await parseImageNode2(arrayBuffer, mimeType);
|
|
5559
5559
|
}
|
|
5560
5560
|
|
|
5561
5561
|
// ../images/src/lib/parsers/parse-image.ts
|
|
@@ -5629,7 +5629,7 @@
|
|
|
5629
5629
|
};
|
|
5630
5630
|
|
|
5631
5631
|
// ../draco/src/lib/utils/version.ts
|
|
5632
|
-
var VERSION4 = true ? "4.0.0-beta.
|
|
5632
|
+
var VERSION4 = true ? "4.0.0-beta.4" : "latest";
|
|
5633
5633
|
|
|
5634
5634
|
// ../draco/src/draco-loader.ts
|
|
5635
5635
|
var DEFAULT_DRACO_OPTIONS = {
|
|
@@ -6310,7 +6310,7 @@
|
|
|
6310
6310
|
}
|
|
6311
6311
|
|
|
6312
6312
|
// ../textures/src/lib/utils/version.ts
|
|
6313
|
-
var VERSION5 = true ? "4.0.0-beta.
|
|
6313
|
+
var VERSION5 = true ? "4.0.0-beta.4" : "beta";
|
|
6314
6314
|
|
|
6315
6315
|
// ../textures/src/lib/parsers/basis-module-loader.ts
|
|
6316
6316
|
var BASIS_EXTERNAL_LIBRARIES = {
|
|
@@ -8095,7 +8095,7 @@
|
|
|
8095
8095
|
}
|
|
8096
8096
|
|
|
8097
8097
|
// src/i3s-attribute-loader.ts
|
|
8098
|
-
var VERSION6 = true ? "4.0.0-beta.
|
|
8098
|
+
var VERSION6 = true ? "4.0.0-beta.4" : "latest";
|
|
8099
8099
|
var I3SAttributeLoader = {
|
|
8100
8100
|
name: "I3S Attribute",
|
|
8101
8101
|
id: "i3s-attribute",
|
|
@@ -8601,7 +8601,7 @@
|
|
|
8601
8601
|
}
|
|
8602
8602
|
|
|
8603
8603
|
// src/i3s-content-loader.ts
|
|
8604
|
-
var VERSION7 = true ? "4.0.0-beta.
|
|
8604
|
+
var VERSION7 = true ? "4.0.0-beta.4" : "beta";
|
|
8605
8605
|
var I3SContentLoader = {
|
|
8606
8606
|
name: "I3S Content (Indexed Scene Layers)",
|
|
8607
8607
|
id: "i3s-content",
|
package/dist/i3s-loader.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i3s-loader.d.ts","sourceRoot":"","sources":["../src/i3s-loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,gBAAgB,EAAE,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAE9E,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,SAAS,CAAC;AAI9C,OAAO,EAAC,eAAe,EAAC,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"i3s-loader.d.ts","sourceRoot":"","sources":["../src/i3s-loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,gBAAgB,EAAE,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAE9E,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,SAAS,CAAC;AAI9C,OAAO,EAAC,eAAe,EAAC,MAAM,SAAS,CAAC;AAYxC,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG;IAC7C,GAAG,CAAC,EAAE,eAAe,CAAC;CACvB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,SAAS,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,KAAK,EAAE,aAAa,CAwB9E,CAAC"}
|
package/dist/i3s-loader.js
CHANGED
|
@@ -2,6 +2,7 @@ import { parse } from '@loaders.gl/core';
|
|
|
2
2
|
import { I3SContentLoader } from "./i3s-content-loader.js";
|
|
3
3
|
import { normalizeTileData, normalizeTilesetData } from "./lib/parsers/parse-i3s.js";
|
|
4
4
|
import { COORDINATE_SYSTEM } from "./lib/parsers/constants.js";
|
|
5
|
+
import { getUrlWithoutParams } from "./lib/utils/url-utils.js";
|
|
5
6
|
const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';
|
|
6
7
|
const TILESET_REGEX = /layers\/[0-9]+$/;
|
|
7
8
|
const TILE_HEADER_REGEX = /nodes\/([0-9-]+|root)$/;
|
|
@@ -41,15 +42,16 @@ async function parseI3S(data) {
|
|
|
41
42
|
if (magicNumber === SLPK_HEX) {
|
|
42
43
|
throw new Error('Files with .slpk extention currently are not supported by I3SLoader');
|
|
43
44
|
}
|
|
45
|
+
const urlWithoutParams = getUrlWithoutParams(url);
|
|
44
46
|
let isTileset;
|
|
45
47
|
if (options.i3s.isTileset === 'auto') {
|
|
46
|
-
isTileset = TILESET_REGEX.test(
|
|
48
|
+
isTileset = TILESET_REGEX.test(urlWithoutParams);
|
|
47
49
|
} else {
|
|
48
50
|
isTileset = options.i3s.isTileset;
|
|
49
51
|
}
|
|
50
52
|
let isTileHeader;
|
|
51
53
|
if (options.isTileHeader === 'auto') {
|
|
52
|
-
isTileHeader = TILE_HEADER_REGEX.test(
|
|
54
|
+
isTileHeader = TILE_HEADER_REGEX.test(urlWithoutParams);
|
|
53
55
|
} else {
|
|
54
56
|
isTileHeader = options.i3s.isTileHeader;
|
|
55
57
|
}
|
package/dist/i3s-loader.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i3s-loader.js","names":["parse","I3SContentLoader","normalizeTileData","normalizeTilesetData","COORDINATE_SYSTEM","VERSION","__VERSION__","TILESET_REGEX","TILE_HEADER_REGEX","SLPK_HEX","POINT_CLOUD","I3SLoader","name","id","module","version","mimeTypes","parseI3S","extensions","options","i3s","token","isTileset","isTileHeader","tile","tileset","_tileOptions","_tilesetOptions","useDracoGeometry","useCompressedTextures","decodeTextures","coordinateSystem","METER_OFFSETS","colorsByAttribute","data","arguments","length","undefined","context","url","magicNumber","getMagicNumber","Error","test","parseTileset","parseTile","parseTileContent","arrayBuffer","tilesetJson","JSON","TextDecoder","decode","layerType","tilesetPostprocessed","ArrayBuffer","Uint8Array","map","value","toString","padStart","join"],"sources":["../src/i3s-loader.ts"],"sourcesContent":["import type {LoaderWithParser, LoaderOptions} from '@loaders.gl/loader-utils';\nimport {parse} from '@loaders.gl/core';\nimport type {I3STilesetHeader} from './types';\nimport {I3SContentLoader} from './i3s-content-loader';\nimport {normalizeTileData, normalizeTilesetData} from './lib/parsers/parse-i3s';\nimport {COORDINATE_SYSTEM} from './lib/parsers/constants';\nimport {I3SParseOptions} from './types';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\nconst TILESET_REGEX = /layers\\/[0-9]+$/;\nconst TILE_HEADER_REGEX = /nodes\\/([0-9-]+|root)$/;\nconst SLPK_HEX = '504b0304';\nconst POINT_CLOUD = 'PointCloud';\n\nexport type I3SLoaderOptions = LoaderOptions & {\n i3s?: I3SParseOptions;\n};\n\n/**\n * Loader for I3S - Indexed 3D Scene Layer\n */\nexport const I3SLoader: LoaderWithParser<I3STilesetHeader, never, LoaderOptions> = {\n name: 'I3S (Indexed Scene Layers)',\n id: 'i3s',\n module: 'i3s',\n version: VERSION,\n mimeTypes: ['application/octet-stream'],\n parse: parseI3S,\n extensions: ['bin'],\n options: {\n i3s: {\n token: null,\n isTileset: 'auto',\n isTileHeader: 'auto',\n tile: null,\n tileset: null,\n _tileOptions: null,\n _tilesetOptions: null,\n useDracoGeometry: true,\n useCompressedTextures: true,\n decodeTextures: true,\n coordinateSystem: COORDINATE_SYSTEM.METER_OFFSETS,\n colorsByAttribute: null\n }\n }\n};\n\nasync function parseI3S(data, options: I3SLoaderOptions = {}, context): Promise<I3STilesetHeader> {\n const url = context.url;\n options.i3s = options.i3s || {};\n const magicNumber = getMagicNumber(data);\n\n // check if file is slpk\n if (magicNumber === SLPK_HEX) {\n throw new Error('Files with .slpk extention currently are not supported by I3SLoader');\n }\n\n // auto detect file type based on url\n let isTileset;\n if (options.i3s.isTileset === 'auto') {\n isTileset = TILESET_REGEX.test(
|
|
1
|
+
{"version":3,"file":"i3s-loader.js","names":["parse","I3SContentLoader","normalizeTileData","normalizeTilesetData","COORDINATE_SYSTEM","getUrlWithoutParams","VERSION","__VERSION__","TILESET_REGEX","TILE_HEADER_REGEX","SLPK_HEX","POINT_CLOUD","I3SLoader","name","id","module","version","mimeTypes","parseI3S","extensions","options","i3s","token","isTileset","isTileHeader","tile","tileset","_tileOptions","_tilesetOptions","useDracoGeometry","useCompressedTextures","decodeTextures","coordinateSystem","METER_OFFSETS","colorsByAttribute","data","arguments","length","undefined","context","url","magicNumber","getMagicNumber","Error","urlWithoutParams","test","parseTileset","parseTile","parseTileContent","arrayBuffer","tilesetJson","JSON","TextDecoder","decode","layerType","tilesetPostprocessed","ArrayBuffer","Uint8Array","map","value","toString","padStart","join"],"sources":["../src/i3s-loader.ts"],"sourcesContent":["import type {LoaderWithParser, LoaderOptions} from '@loaders.gl/loader-utils';\nimport {parse} from '@loaders.gl/core';\nimport type {I3STilesetHeader} from './types';\nimport {I3SContentLoader} from './i3s-content-loader';\nimport {normalizeTileData, normalizeTilesetData} from './lib/parsers/parse-i3s';\nimport {COORDINATE_SYSTEM} from './lib/parsers/constants';\nimport {I3SParseOptions} from './types';\nimport {getUrlWithoutParams} from './lib/utils/url-utils';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\nconst TILESET_REGEX = /layers\\/[0-9]+$/;\nconst TILE_HEADER_REGEX = /nodes\\/([0-9-]+|root)$/;\nconst SLPK_HEX = '504b0304';\nconst POINT_CLOUD = 'PointCloud';\n\nexport type I3SLoaderOptions = LoaderOptions & {\n i3s?: I3SParseOptions;\n};\n\n/**\n * Loader for I3S - Indexed 3D Scene Layer\n */\nexport const I3SLoader: LoaderWithParser<I3STilesetHeader, never, LoaderOptions> = {\n name: 'I3S (Indexed Scene Layers)',\n id: 'i3s',\n module: 'i3s',\n version: VERSION,\n mimeTypes: ['application/octet-stream'],\n parse: parseI3S,\n extensions: ['bin'],\n options: {\n i3s: {\n token: null,\n isTileset: 'auto',\n isTileHeader: 'auto',\n tile: null,\n tileset: null,\n _tileOptions: null,\n _tilesetOptions: null,\n useDracoGeometry: true,\n useCompressedTextures: true,\n decodeTextures: true,\n coordinateSystem: COORDINATE_SYSTEM.METER_OFFSETS,\n colorsByAttribute: null\n }\n }\n};\n\nasync function parseI3S(data, options: I3SLoaderOptions = {}, context): Promise<I3STilesetHeader> {\n const url = context.url;\n options.i3s = options.i3s || {};\n const magicNumber = getMagicNumber(data);\n\n // check if file is slpk\n if (magicNumber === SLPK_HEX) {\n throw new Error('Files with .slpk extention currently are not supported by I3SLoader');\n }\n\n const urlWithoutParams = getUrlWithoutParams(url);\n\n // auto detect file type based on url\n let isTileset;\n if (options.i3s.isTileset === 'auto') {\n isTileset = TILESET_REGEX.test(urlWithoutParams);\n } else {\n isTileset = options.i3s.isTileset;\n }\n\n let isTileHeader;\n if (options.isTileHeader === 'auto') {\n isTileHeader = TILE_HEADER_REGEX.test(urlWithoutParams);\n } else {\n isTileHeader = options.i3s.isTileHeader;\n }\n\n if (isTileset) {\n data = await parseTileset(data, options, context);\n } else if (isTileHeader) {\n data = await parseTile(data, context);\n } else {\n data = await parseTileContent(data, options);\n }\n\n return data;\n}\n\nasync function parseTileContent(arrayBuffer, options: I3SLoaderOptions) {\n return await parse(arrayBuffer, I3SContentLoader, options);\n}\n\nasync function parseTileset(data, options: I3SLoaderOptions, context) {\n const tilesetJson = JSON.parse(new TextDecoder().decode(data));\n\n if (tilesetJson?.layerType === POINT_CLOUD) {\n throw new Error('Point Cloud layers currently are not supported by I3SLoader');\n }\n\n const tilesetPostprocessed = await normalizeTilesetData(tilesetJson, options, context);\n return tilesetPostprocessed;\n}\n\nasync function parseTile(data, context) {\n data = JSON.parse(new TextDecoder().decode(data));\n return normalizeTileData(data, context);\n}\n\nfunction getMagicNumber(data) {\n if (data instanceof ArrayBuffer) {\n // slice binary data (4 bytes from the beginning) and transform it to hexadecimal numeral system\n return [...new Uint8Array(data, 0, 4)]\n .map((value) => value.toString(16).padStart(2, '0'))\n .join('');\n }\n return null;\n}\n"],"mappings":"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"}
|
package/dist/index.cjs
CHANGED
|
@@ -113,6 +113,15 @@ var import_draco = require("@loaders.gl/draco");
|
|
|
113
113
|
var import_textures = require("@loaders.gl/textures");
|
|
114
114
|
|
|
115
115
|
// src/lib/utils/url-utils.ts
|
|
116
|
+
function getUrlWithoutParams(url) {
|
|
117
|
+
let urlWithoutParams;
|
|
118
|
+
try {
|
|
119
|
+
const urlObj = new URL(url);
|
|
120
|
+
urlWithoutParams = `${urlObj.origin}${urlObj.pathname}`;
|
|
121
|
+
} catch (e) {
|
|
122
|
+
}
|
|
123
|
+
return urlWithoutParams || url;
|
|
124
|
+
}
|
|
116
125
|
function getUrlWithToken(url, token = null) {
|
|
117
126
|
return token ? `${url}?token=${token}` : url;
|
|
118
127
|
}
|
|
@@ -1160,7 +1169,7 @@ function normalizeTileNonUrlData(tile) {
|
|
|
1160
1169
|
return { ...tile, mbs, boundingVolume, lodMetricType, lodMetricValue, type, refine };
|
|
1161
1170
|
}
|
|
1162
1171
|
async function normalizeTilesetData(tileset, options, context) {
|
|
1163
|
-
const url = context.url;
|
|
1172
|
+
const url = getUrlWithoutParams(context.url || "");
|
|
1164
1173
|
let nodePagesTile;
|
|
1165
1174
|
let root;
|
|
1166
1175
|
if (tileset.nodePages) {
|
|
@@ -1232,15 +1241,16 @@ async function parseI3S(data, options = {}, context) {
|
|
|
1232
1241
|
if (magicNumber === SLPK_HEX) {
|
|
1233
1242
|
throw new Error("Files with .slpk extention currently are not supported by I3SLoader");
|
|
1234
1243
|
}
|
|
1244
|
+
const urlWithoutParams = getUrlWithoutParams(url);
|
|
1235
1245
|
let isTileset;
|
|
1236
1246
|
if (options.i3s.isTileset === "auto") {
|
|
1237
|
-
isTileset = TILESET_REGEX.test(
|
|
1247
|
+
isTileset = TILESET_REGEX.test(urlWithoutParams);
|
|
1238
1248
|
} else {
|
|
1239
1249
|
isTileset = options.i3s.isTileset;
|
|
1240
1250
|
}
|
|
1241
1251
|
let isTileHeader;
|
|
1242
1252
|
if (options.isTileHeader === "auto") {
|
|
1243
|
-
isTileHeader = TILE_HEADER_REGEX.test(
|
|
1253
|
+
isTileHeader = TILE_HEADER_REGEX.test(urlWithoutParams);
|
|
1244
1254
|
} else {
|
|
1245
1255
|
isTileHeader = options.i3s.isTileHeader;
|
|
1246
1256
|
}
|
|
@@ -3,7 +3,7 @@ import { Ellipsoid } from '@math.gl/geospatial';
|
|
|
3
3
|
import { load } from '@loaders.gl/core';
|
|
4
4
|
import { TILE_TYPE, TILE_REFINEMENT, TILESET_TYPE } from '@loaders.gl/tiles';
|
|
5
5
|
import I3SNodePagesTiles from "../helpers/i3s-nodepages-tiles.js";
|
|
6
|
-
import { generateTileAttributeUrls, getUrlWithToken } from "../utils/url-utils.js";
|
|
6
|
+
import { generateTileAttributeUrls, getUrlWithToken, getUrlWithoutParams } from "../utils/url-utils.js";
|
|
7
7
|
import { I3SLoader } from "../../i3s-loader.js";
|
|
8
8
|
export function normalizeTileData(tile, context) {
|
|
9
9
|
const url = context.url || '';
|
|
@@ -60,7 +60,7 @@ export function normalizeTileNonUrlData(tile) {
|
|
|
60
60
|
};
|
|
61
61
|
}
|
|
62
62
|
export async function normalizeTilesetData(tileset, options, context) {
|
|
63
|
-
const url = context.url;
|
|
63
|
+
const url = getUrlWithoutParams(context.url || '');
|
|
64
64
|
let nodePagesTile;
|
|
65
65
|
let root;
|
|
66
66
|
if (tileset.nodePages) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-i3s.js","names":["OrientedBoundingBox","Ellipsoid","load","TILE_TYPE","TILE_REFINEMENT","TILESET_TYPE","I3SNodePagesTiles","generateTileAttributeUrls","getUrlWithToken","I3SLoader","normalizeTileData","tile","context","url","contentUrl","geometryData","href","textureUrl","textureData","attributeUrls","attributeData","children","normalizeTileNonUrlData","textureFormat","isDracoGeometry","_tile$lodSelection","_tile$lodSelection2","boundingVolume","mbs","sphere","WGS84","cartographicToCartesian","slice","obb","box","center","halfSize","quaternion","fromCenterHalfSizeQuaternion","boundingSphere","getBoundingSphere","radius","lodMetricType","lodSelection","metricType","lodMetricValue","maxError","type","MESH","refine","REPLACE","normalizeTilesetData","tileset","options","nodePagesTile","root","nodePages","formTileFromNodePages","parseOptions","i3s","rootNodeUrl","token","loadContent","isTileHeader","isTileset","loader","basePath","I3S"],"sources":["../../../src/lib/parsers/parse-i3s.ts"],"sourcesContent":["import {OrientedBoundingBox} from '@math.gl/culling';\nimport {Ellipsoid} from '@math.gl/geospatial';\nimport {load} from '@loaders.gl/core';\nimport {TILE_TYPE, TILE_REFINEMENT, TILESET_TYPE} from '@loaders.gl/tiles';\nimport I3SNodePagesTiles from '../helpers/i3s-nodepages-tiles';\nimport {generateTileAttributeUrls, getUrlWithToken} from '../utils/url-utils';\nimport {\n I3STilesetHeader,\n I3STileHeader,\n Mbs,\n I3SMinimalNodeData,\n Node3DIndexDocument,\n SceneLayer3D,\n I3SParseOptions\n} from '../../types';\nimport type {LoaderOptions, LoaderContext} from '@loaders.gl/loader-utils';\nimport { I3SLoader } from '../../i3s-loader';\n\nexport function normalizeTileData(tile : Node3DIndexDocument, context: LoaderContext): I3STileHeader {\n const url: string = context.url || '';\n let contentUrl: string | undefined;\n if (tile.geometryData) {\n contentUrl = `${url}/${tile.geometryData[0].href}`;\n }\n\n let textureUrl: string | undefined;\n if (tile.textureData) {\n textureUrl = `${url}/${tile.textureData[0].href}`;\n }\n\n let attributeUrls: string[] | undefined;\n if (tile.attributeData) {\n attributeUrls = generateTileAttributeUrls(url, tile);\n }\n\n const children = tile.children || [];\n\n return normalizeTileNonUrlData({\n ...tile,\n children,\n url,\n contentUrl,\n textureUrl,\n textureFormat: 'jpg', // `jpg` format will cause `ImageLoader` usage that will be able to handle `png` as well\n attributeUrls,\n isDracoGeometry: false\n });\n}\n\nexport function normalizeTileNonUrlData(tile : I3SMinimalNodeData): I3STileHeader {\n const boundingVolume: {box?: number[]; sphere?: number[]} = {};\n let mbs: Mbs = [0, 0, 0, 1];\n if (tile.mbs) {\n mbs = tile.mbs;\n boundingVolume.sphere = [\n ...Ellipsoid.WGS84.cartographicToCartesian(tile.mbs.slice(0, 3)), // cartesian center of sphere\n tile.mbs[3] // radius of sphere\n ] as Mbs;\n } else if (tile.obb) {\n boundingVolume.box = [\n ...Ellipsoid.WGS84.cartographicToCartesian(tile.obb.center), // cartesian center of box\n ...tile.obb.halfSize, // halfSize\n ...tile.obb.quaternion // quaternion\n ];\n const obb = new OrientedBoundingBox().fromCenterHalfSizeQuaternion(\n boundingVolume.box.slice(0, 3),\n tile.obb.halfSize,\n tile.obb.quaternion\n );\n const boundingSphere = obb.getBoundingSphere();\n boundingVolume.sphere = [...boundingSphere.center , boundingSphere.radius] as Mbs;\n mbs = [...tile.obb.center, boundingSphere.radius] as Mbs;\n }\n\n const lodMetricType = tile.lodSelection?.[0].metricType;\n const lodMetricValue = tile.lodSelection?.[0].maxError;\n const type = TILE_TYPE.MESH;\n /**\n * I3S specification supports only REPLACE\n */\n const refine = TILE_REFINEMENT.REPLACE;\n\n return {...tile, mbs, boundingVolume, lodMetricType, lodMetricValue, type, refine};\n}\n\nexport async function normalizeTilesetData(tileset : SceneLayer3D, options : LoaderOptions, context: LoaderContext): Promise<I3STileHeader | I3STilesetHeader> {\n const url = context.url;\n let nodePagesTile: I3SNodePagesTiles | undefined;\n let root: I3STileHeader | I3STilesetHeader;\n if (tileset.nodePages) {\n nodePagesTile = new I3SNodePagesTiles(tileset, url, options);\n root = await nodePagesTile.formTileFromNodePages(0);\n } else {\n const parseOptions = options.i3s as I3SParseOptions;\n const rootNodeUrl = getUrlWithToken(`${url}/nodes/root`, parseOptions.token);\n // eslint-disable-next-line no-use-before-define\n root = await load(rootNodeUrl, I3SLoader, {\n ...options,\n i3s: {\n // @ts-expect-error options is not properly typed\n ...options.i3s,\n loadContent: false, isTileHeader: true, isTileset: false}\n });\n }\n\n return {\n ...tileset,\n loader: I3SLoader,\n url,\n basePath: url,\n type: TILESET_TYPE.I3S,\n nodePagesTile,\n // @ts-expect-error\n root,\n lodMetricType: root.lodMetricType,\n lodMetricValue: root.lodMetricValue\n }\n}\n"],"mappings":"AAAA,SAAQA,mBAAmB,QAAO,kBAAkB;AACpD,SAAQC,SAAS,QAAO,qBAAqB;AAC7C,SAAQC,IAAI,QAAO,kBAAkB;AACrC,SAAQC,SAAS,EAAEC,eAAe,EAAEC,YAAY,QAAO,mBAAmB;AAAC,OACpEC,iBAAiB;AAAA,SAChBC,yBAAyB,EAAEC,eAAe;AAAA,
|
|
1
|
+
{"version":3,"file":"parse-i3s.js","names":["OrientedBoundingBox","Ellipsoid","load","TILE_TYPE","TILE_REFINEMENT","TILESET_TYPE","I3SNodePagesTiles","generateTileAttributeUrls","getUrlWithToken","getUrlWithoutParams","I3SLoader","normalizeTileData","tile","context","url","contentUrl","geometryData","href","textureUrl","textureData","attributeUrls","attributeData","children","normalizeTileNonUrlData","textureFormat","isDracoGeometry","_tile$lodSelection","_tile$lodSelection2","boundingVolume","mbs","sphere","WGS84","cartographicToCartesian","slice","obb","box","center","halfSize","quaternion","fromCenterHalfSizeQuaternion","boundingSphere","getBoundingSphere","radius","lodMetricType","lodSelection","metricType","lodMetricValue","maxError","type","MESH","refine","REPLACE","normalizeTilesetData","tileset","options","nodePagesTile","root","nodePages","formTileFromNodePages","parseOptions","i3s","rootNodeUrl","token","loadContent","isTileHeader","isTileset","loader","basePath","I3S"],"sources":["../../../src/lib/parsers/parse-i3s.ts"],"sourcesContent":["import {OrientedBoundingBox} from '@math.gl/culling';\nimport {Ellipsoid} from '@math.gl/geospatial';\nimport {load} from '@loaders.gl/core';\nimport {TILE_TYPE, TILE_REFINEMENT, TILESET_TYPE} from '@loaders.gl/tiles';\nimport I3SNodePagesTiles from '../helpers/i3s-nodepages-tiles';\nimport {generateTileAttributeUrls, getUrlWithToken, getUrlWithoutParams} from '../utils/url-utils';\nimport {\n I3STilesetHeader,\n I3STileHeader,\n Mbs,\n I3SMinimalNodeData,\n Node3DIndexDocument,\n SceneLayer3D,\n I3SParseOptions\n} from '../../types';\nimport type {LoaderOptions, LoaderContext} from '@loaders.gl/loader-utils';\nimport { I3SLoader } from '../../i3s-loader';\n\nexport function normalizeTileData(tile : Node3DIndexDocument, context: LoaderContext): I3STileHeader {\n const url: string = context.url || '';\n let contentUrl: string | undefined;\n if (tile.geometryData) {\n contentUrl = `${url}/${tile.geometryData[0].href}`;\n }\n\n let textureUrl: string | undefined;\n if (tile.textureData) {\n textureUrl = `${url}/${tile.textureData[0].href}`;\n }\n\n let attributeUrls: string[] | undefined;\n if (tile.attributeData) {\n attributeUrls = generateTileAttributeUrls(url, tile);\n }\n\n const children = tile.children || [];\n\n return normalizeTileNonUrlData({\n ...tile,\n children,\n url,\n contentUrl,\n textureUrl,\n textureFormat: 'jpg', // `jpg` format will cause `ImageLoader` usage that will be able to handle `png` as well\n attributeUrls,\n isDracoGeometry: false\n });\n}\n\nexport function normalizeTileNonUrlData(tile : I3SMinimalNodeData): I3STileHeader {\n const boundingVolume: {box?: number[]; sphere?: number[]} = {};\n let mbs: Mbs = [0, 0, 0, 1];\n if (tile.mbs) {\n mbs = tile.mbs;\n boundingVolume.sphere = [\n ...Ellipsoid.WGS84.cartographicToCartesian(tile.mbs.slice(0, 3)), // cartesian center of sphere\n tile.mbs[3] // radius of sphere\n ] as Mbs;\n } else if (tile.obb) {\n boundingVolume.box = [\n ...Ellipsoid.WGS84.cartographicToCartesian(tile.obb.center), // cartesian center of box\n ...tile.obb.halfSize, // halfSize\n ...tile.obb.quaternion // quaternion\n ];\n const obb = new OrientedBoundingBox().fromCenterHalfSizeQuaternion(\n boundingVolume.box.slice(0, 3),\n tile.obb.halfSize,\n tile.obb.quaternion\n );\n const boundingSphere = obb.getBoundingSphere();\n boundingVolume.sphere = [...boundingSphere.center , boundingSphere.radius] as Mbs;\n mbs = [...tile.obb.center, boundingSphere.radius] as Mbs;\n }\n\n const lodMetricType = tile.lodSelection?.[0].metricType;\n const lodMetricValue = tile.lodSelection?.[0].maxError;\n const type = TILE_TYPE.MESH;\n /**\n * I3S specification supports only REPLACE\n */\n const refine = TILE_REFINEMENT.REPLACE;\n\n return {...tile, mbs, boundingVolume, lodMetricType, lodMetricValue, type, refine};\n}\n\nexport async function normalizeTilesetData(tileset : SceneLayer3D, options : LoaderOptions, context: LoaderContext): Promise<I3STileHeader | I3STilesetHeader> {\n const url = getUrlWithoutParams(context.url || '');\n let nodePagesTile: I3SNodePagesTiles | undefined;\n let root: I3STileHeader | I3STilesetHeader;\n if (tileset.nodePages) {\n nodePagesTile = new I3SNodePagesTiles(tileset, url, options);\n root = await nodePagesTile.formTileFromNodePages(0);\n } else {\n const parseOptions = options.i3s as I3SParseOptions;\n const rootNodeUrl = getUrlWithToken(`${url}/nodes/root`, parseOptions.token);\n // eslint-disable-next-line no-use-before-define\n root = await load(rootNodeUrl, I3SLoader, {\n ...options,\n i3s: {\n // @ts-expect-error options is not properly typed\n ...options.i3s,\n loadContent: false, isTileHeader: true, isTileset: false}\n });\n }\n\n return {\n ...tileset,\n loader: I3SLoader,\n url,\n basePath: url,\n type: TILESET_TYPE.I3S,\n nodePagesTile,\n // @ts-expect-error\n root,\n lodMetricType: root.lodMetricType,\n lodMetricValue: root.lodMetricValue\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
import { Node3DIndexDocument, SceneLayer3D } from '../../types';
|
|
2
|
+
/**
|
|
3
|
+
* Return URL seperated from search params
|
|
4
|
+
* @param url - URL that might have search params
|
|
5
|
+
* @returns url without search params
|
|
6
|
+
*/
|
|
7
|
+
export declare function getUrlWithoutParams(url: string): string;
|
|
2
8
|
/**
|
|
3
9
|
* Generates url with token if it is exists.
|
|
4
10
|
* @param url
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"url-utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/url-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,mBAAmB,EAAE,YAAY,EAAC,MAAM,aAAa,CAAC;AAE9D;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,MAAM,GAAG,IAAW,GAAG,MAAM,CAEhF;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,GAAG,MAAM,EAAE,CAU1F;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,YAUhG"}
|
|
1
|
+
{"version":3,"file":"url-utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/url-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,mBAAmB,EAAE,YAAY,EAAC,MAAM,aAAa,CAAC;AAE9D;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAUvD;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,MAAM,GAAG,IAAW,GAAG,MAAM,CAEhF;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,GAAG,MAAM,EAAE,CAU1F;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,YAUhG"}
|
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
export function getUrlWithoutParams(url) {
|
|
2
|
+
let urlWithoutParams;
|
|
3
|
+
try {
|
|
4
|
+
const urlObj = new URL(url);
|
|
5
|
+
urlWithoutParams = `${urlObj.origin}${urlObj.pathname}`;
|
|
6
|
+
} catch (e) {}
|
|
7
|
+
return urlWithoutParams || url;
|
|
8
|
+
}
|
|
1
9
|
export function getUrlWithToken(url) {
|
|
2
10
|
let token = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
|
|
3
11
|
return token ? `${url}?token=${token}` : url;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"url-utils.js","names":["
|
|
1
|
+
{"version":3,"file":"url-utils.js","names":["getUrlWithoutParams","url","urlWithoutParams","urlObj","URL","origin","pathname","e","getUrlWithToken","token","arguments","length","undefined","generateTileAttributeUrls","tile","attributeData","attributeUrls","index","attributeUrl","href","replace","push","generateTilesetAttributeUrls","tileset","resource","attributeStorageInfo","fileName","key"],"sources":["../../../src/lib/utils/url-utils.ts"],"sourcesContent":["import {Node3DIndexDocument, SceneLayer3D} from '../../types';\n\n/**\n * Return URL seperated from search params\n * @param url - URL that might have search params\n * @returns url without search params\n */\nexport function getUrlWithoutParams(url: string): string {\n let urlWithoutParams;\n\n try {\n const urlObj = new URL(url);\n urlWithoutParams = `${urlObj.origin}${urlObj.pathname}`;\n } catch (e) {\n // do nothing\n }\n return urlWithoutParams || url;\n}\n\n/**\n * Generates url with token if it is exists.\n * @param url\n * @param token\n * @returns\n */\nexport function getUrlWithToken(url: string, token: string | null = null): string {\n return token ? `${url}?token=${token}` : url;\n}\n\n/**\n * Generates attribute urls for tile.\n * @param tile\n * @returns list of attribute urls\n */\nexport function generateTileAttributeUrls(url: string, tile: Node3DIndexDocument): string[] {\n const {attributeData = []} = tile;\n const attributeUrls: string[] = [];\n\n for (let index = 0; index < attributeData.length; index++) {\n const attributeUrl = attributeData[index].href.replace('./', '');\n attributeUrls.push(`${url}/${attributeUrl}`);\n }\n\n return attributeUrls;\n}\n\n/**\n * Generates attribute urls for tileset based on tileset and resource\n * @param tileset - tileset metadata\n * @param url - tileset base url\n * @param resource - resource id per I3S spec\n * @returns {Array}\n */\nexport function generateTilesetAttributeUrls(tileset: SceneLayer3D, url: string, resource: number) {\n const attributeUrls: string[] = [];\n const {attributeStorageInfo = []} = tileset;\n\n for (let index = 0; index < attributeStorageInfo.length; index++) {\n const fileName = attributeStorageInfo[index].key;\n attributeUrls.push(`${url}/nodes/${resource}/attributes/${fileName}/0`);\n }\n\n return attributeUrls;\n}\n"],"mappings":"AAOA,OAAO,SAASA,mBAAmBA,CAACC,GAAW,EAAU;EACvD,IAAIC,gBAAgB;EAEpB,IAAI;IACF,MAAMC,MAAM,GAAG,IAAIC,GAAG,CAACH,GAAG,CAAC;IAC3BC,gBAAgB,GAAI,GAAEC,MAAM,CAACE,MAAO,GAAEF,MAAM,CAACG,QAAS,EAAC;EACzD,CAAC,CAAC,OAAOC,CAAC,EAAE,CAEZ;EACA,OAAOL,gBAAgB,IAAID,GAAG;AAChC;AAQA,OAAO,SAASO,eAAeA,CAACP,GAAW,EAAuC;EAAA,IAArCQ,KAAoB,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,IAAI;EACtE,OAAOD,KAAK,GAAI,GAAER,GAAI,UAASQ,KAAM,EAAC,GAAGR,GAAG;AAC9C;AAOA,OAAO,SAASY,yBAAyBA,CAACZ,GAAW,EAAEa,IAAyB,EAAY;EAC1F,MAAM;IAACC,aAAa,GAAG;EAAE,CAAC,GAAGD,IAAI;EACjC,MAAME,aAAuB,GAAG,EAAE;EAElC,KAAK,IAAIC,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGF,aAAa,CAACJ,MAAM,EAAEM,KAAK,EAAE,EAAE;IACzD,MAAMC,YAAY,GAAGH,aAAa,CAACE,KAAK,CAAC,CAACE,IAAI,CAACC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;IAChEJ,aAAa,CAACK,IAAI,CAAE,GAAEpB,GAAI,IAAGiB,YAAa,EAAC,CAAC;EAC9C;EAEA,OAAOF,aAAa;AACtB;AASA,OAAO,SAASM,4BAA4BA,CAACC,OAAqB,EAAEtB,GAAW,EAAEuB,QAAgB,EAAE;EACjG,MAAMR,aAAuB,GAAG,EAAE;EAClC,MAAM;IAACS,oBAAoB,GAAG;EAAE,CAAC,GAAGF,OAAO;EAE3C,KAAK,IAAIN,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGQ,oBAAoB,CAACd,MAAM,EAAEM,KAAK,EAAE,EAAE;IAChE,MAAMS,QAAQ,GAAGD,oBAAoB,CAACR,KAAK,CAAC,CAACU,GAAG;IAChDX,aAAa,CAACK,IAAI,CAAE,GAAEpB,GAAI,UAASuB,QAAS,eAAcE,QAAS,IAAG,CAAC;EACzE;EAEA,OAAOV,aAAa;AACtB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@loaders.gl/i3s",
|
|
3
|
-
"version": "4.0.0-beta.
|
|
3
|
+
"version": "4.0.0-beta.4",
|
|
4
4
|
"description": "i3s .",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -41,21 +41,21 @@
|
|
|
41
41
|
"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\\\""
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@loaders.gl/compression": "4.0.0-beta.
|
|
45
|
-
"@loaders.gl/crypto": "4.0.0-beta.
|
|
46
|
-
"@loaders.gl/draco": "4.0.0-beta.
|
|
47
|
-
"@loaders.gl/images": "4.0.0-beta.
|
|
48
|
-
"@loaders.gl/loader-utils": "4.0.0-beta.
|
|
49
|
-
"@loaders.gl/schema": "4.0.0-beta.
|
|
50
|
-
"@loaders.gl/textures": "4.0.0-beta.
|
|
51
|
-
"@loaders.gl/tiles": "4.0.0-beta.
|
|
44
|
+
"@loaders.gl/compression": "4.0.0-beta.4",
|
|
45
|
+
"@loaders.gl/crypto": "4.0.0-beta.4",
|
|
46
|
+
"@loaders.gl/draco": "4.0.0-beta.4",
|
|
47
|
+
"@loaders.gl/images": "4.0.0-beta.4",
|
|
48
|
+
"@loaders.gl/loader-utils": "4.0.0-beta.4",
|
|
49
|
+
"@loaders.gl/schema": "4.0.0-beta.4",
|
|
50
|
+
"@loaders.gl/textures": "4.0.0-beta.4",
|
|
51
|
+
"@loaders.gl/tiles": "4.0.0-beta.4",
|
|
52
52
|
"@luma.gl/constants": "^8.5.4",
|
|
53
53
|
"@math.gl/core": "^4.0.0",
|
|
54
54
|
"@math.gl/culling": "^4.0.0",
|
|
55
55
|
"@math.gl/geospatial": "^4.0.0"
|
|
56
56
|
},
|
|
57
57
|
"peerDependencies": {
|
|
58
|
-
"@loaders.gl/core": "
|
|
58
|
+
"@loaders.gl/core": "4.0.0-beta.3"
|
|
59
59
|
},
|
|
60
|
-
"gitHead": "
|
|
60
|
+
"gitHead": "848c20b474532d301f2c3f8d4e1fb9bf262b86d4"
|
|
61
61
|
}
|
package/src/i3s-loader.ts
CHANGED
|
@@ -5,6 +5,7 @@ import {I3SContentLoader} from './i3s-content-loader';
|
|
|
5
5
|
import {normalizeTileData, normalizeTilesetData} from './lib/parsers/parse-i3s';
|
|
6
6
|
import {COORDINATE_SYSTEM} from './lib/parsers/constants';
|
|
7
7
|
import {I3SParseOptions} from './types';
|
|
8
|
+
import {getUrlWithoutParams} from './lib/utils/url-utils';
|
|
8
9
|
|
|
9
10
|
// __VERSION__ is injected by babel-plugin-version-inline
|
|
10
11
|
// @ts-ignore TS2304: Cannot find name '__VERSION__'.
|
|
@@ -58,17 +59,19 @@ async function parseI3S(data, options: I3SLoaderOptions = {}, context): Promise<
|
|
|
58
59
|
throw new Error('Files with .slpk extention currently are not supported by I3SLoader');
|
|
59
60
|
}
|
|
60
61
|
|
|
62
|
+
const urlWithoutParams = getUrlWithoutParams(url);
|
|
63
|
+
|
|
61
64
|
// auto detect file type based on url
|
|
62
65
|
let isTileset;
|
|
63
66
|
if (options.i3s.isTileset === 'auto') {
|
|
64
|
-
isTileset = TILESET_REGEX.test(
|
|
67
|
+
isTileset = TILESET_REGEX.test(urlWithoutParams);
|
|
65
68
|
} else {
|
|
66
69
|
isTileset = options.i3s.isTileset;
|
|
67
70
|
}
|
|
68
71
|
|
|
69
72
|
let isTileHeader;
|
|
70
73
|
if (options.isTileHeader === 'auto') {
|
|
71
|
-
isTileHeader = TILE_HEADER_REGEX.test(
|
|
74
|
+
isTileHeader = TILE_HEADER_REGEX.test(urlWithoutParams);
|
|
72
75
|
} else {
|
|
73
76
|
isTileHeader = options.i3s.isTileHeader;
|
|
74
77
|
}
|
|
@@ -3,7 +3,7 @@ import {Ellipsoid} from '@math.gl/geospatial';
|
|
|
3
3
|
import {load} from '@loaders.gl/core';
|
|
4
4
|
import {TILE_TYPE, TILE_REFINEMENT, TILESET_TYPE} from '@loaders.gl/tiles';
|
|
5
5
|
import I3SNodePagesTiles from '../helpers/i3s-nodepages-tiles';
|
|
6
|
-
import {generateTileAttributeUrls, getUrlWithToken} from '../utils/url-utils';
|
|
6
|
+
import {generateTileAttributeUrls, getUrlWithToken, getUrlWithoutParams} from '../utils/url-utils';
|
|
7
7
|
import {
|
|
8
8
|
I3STilesetHeader,
|
|
9
9
|
I3STileHeader,
|
|
@@ -84,7 +84,7 @@ export function normalizeTileNonUrlData(tile : I3SMinimalNodeData): I3STileHeade
|
|
|
84
84
|
}
|
|
85
85
|
|
|
86
86
|
export async function normalizeTilesetData(tileset : SceneLayer3D, options : LoaderOptions, context: LoaderContext): Promise<I3STileHeader | I3STilesetHeader> {
|
|
87
|
-
const url = context.url;
|
|
87
|
+
const url = getUrlWithoutParams(context.url || '');
|
|
88
88
|
let nodePagesTile: I3SNodePagesTiles | undefined;
|
|
89
89
|
let root: I3STileHeader | I3STilesetHeader;
|
|
90
90
|
if (tileset.nodePages) {
|
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
import {Node3DIndexDocument, SceneLayer3D} from '../../types';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* Return URL seperated from search params
|
|
5
|
+
* @param url - URL that might have search params
|
|
6
|
+
* @returns url without search params
|
|
7
|
+
*/
|
|
8
|
+
export function getUrlWithoutParams(url: string): string {
|
|
9
|
+
let urlWithoutParams;
|
|
10
|
+
|
|
11
|
+
try {
|
|
12
|
+
const urlObj = new URL(url);
|
|
13
|
+
urlWithoutParams = `${urlObj.origin}${urlObj.pathname}`;
|
|
14
|
+
} catch (e) {
|
|
15
|
+
// do nothing
|
|
16
|
+
}
|
|
17
|
+
return urlWithoutParams || url;
|
|
18
|
+
}
|
|
19
|
+
|
|
3
20
|
/**
|
|
4
21
|
* Generates url with token if it is exists.
|
|
5
22
|
* @param url
|