@loaders.gl/i3s 3.4.14 → 3.4.15
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.min.js +93 -92
- package/dist/es5/arcgis-webscene-loader.js +5 -22
- package/dist/es5/arcgis-webscene-loader.js.map +1 -1
- package/dist/es5/bundle.js +1 -1
- package/dist/es5/bundle.js.map +1 -1
- package/dist/es5/i3s-attribute-loader.js +58 -123
- package/dist/es5/i3s-attribute-loader.js.map +1 -1
- package/dist/es5/i3s-building-scene-layer-loader.js +8 -28
- package/dist/es5/i3s-building-scene-layer-loader.js.map +1 -1
- package/dist/es5/i3s-content-loader.js +16 -35
- package/dist/es5/i3s-content-loader.js.map +1 -1
- package/dist/es5/i3s-loader.js +49 -148
- package/dist/es5/i3s-loader.js.map +1 -1
- package/dist/es5/i3s-node-page-loader.js +8 -39
- package/dist/es5/i3s-node-page-loader.js.map +1 -1
- package/dist/es5/i3s-slpk-loader.js +2 -2
- package/dist/es5/i3s-slpk-loader.js.map +1 -1
- package/dist/es5/index.js +8 -8
- package/dist/es5/lib/helpers/i3s-nodepages-tiles.js +161 -267
- package/dist/es5/lib/helpers/i3s-nodepages-tiles.js.map +1 -1
- package/dist/es5/lib/parsers/constants.js +6 -6
- package/dist/es5/lib/parsers/constants.js.map +1 -1
- package/dist/es5/lib/parsers/parse-arcgis-webscene.js +64 -146
- package/dist/es5/lib/parsers/parse-arcgis-webscene.js.map +1 -1
- package/dist/es5/lib/parsers/parse-i3s-attribute.js +26 -55
- package/dist/es5/lib/parsers/parse-i3s-attribute.js.map +1 -1
- package/dist/es5/lib/parsers/parse-i3s-building-scene-layer.js +27 -47
- package/dist/es5/lib/parsers/parse-i3s-building-scene-layer.js.map +1 -1
- package/dist/es5/lib/parsers/parse-i3s-tile-content.js +278 -347
- package/dist/es5/lib/parsers/parse-i3s-tile-content.js.map +1 -1
- package/dist/es5/lib/parsers/parse-i3s.js +55 -79
- package/dist/es5/lib/parsers/parse-i3s.js.map +1 -1
- package/dist/es5/lib/parsers/parse-slpk/parse-slpk.js +30 -81
- package/dist/es5/lib/parsers/parse-slpk/parse-slpk.js.map +1 -1
- package/dist/es5/lib/parsers/parse-slpk/slpk-archieve.js +44 -90
- package/dist/es5/lib/parsers/parse-slpk/slpk-archieve.js.map +1 -1
- package/dist/es5/lib/parsers/parse-zip/cd-file-header.js +17 -17
- package/dist/es5/lib/parsers/parse-zip/cd-file-header.js.map +1 -1
- package/dist/es5/lib/parsers/parse-zip/local-file-header.js +10 -10
- package/dist/es5/lib/parsers/parse-zip/local-file-header.js.map +1 -1
- package/dist/es5/lib/utils/convert-i3s-obb-to-mbs.js +4 -6
- package/dist/es5/lib/utils/convert-i3s-obb-to-mbs.js.map +1 -1
- package/dist/es5/lib/utils/customizeColors.js +79 -140
- package/dist/es5/lib/utils/customizeColors.js.map +1 -1
- package/dist/es5/lib/utils/url-utils.js +14 -11
- package/dist/es5/lib/utils/url-utils.js.map +1 -1
- package/dist/es5/types.js +2 -2
- package/dist/esm/arcgis-webscene-loader.js +1 -1
- package/dist/esm/i3s-attribute-loader.js +1 -1
- package/dist/esm/i3s-building-scene-layer-loader.js +1 -1
- package/dist/esm/i3s-content-loader.js +1 -1
- package/dist/esm/i3s-loader.js +1 -1
- package/dist/esm/i3s-node-page-loader.js +1 -1
- package/dist/esm/i3s-slpk-loader.js +1 -1
- package/dist/i3s-content-nodejs-worker.js +61 -59
- package/dist/i3s-content-nodejs-worker.js.map +3 -3
- package/dist/i3s-content-worker.js +54 -53
- package/package.json +9 -9
|
@@ -5,108 +5,62 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports.SLPKArchive = void 0;
|
|
8
|
-
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
9
|
-
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
10
|
-
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
11
|
-
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
12
8
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
13
9
|
var _workerUtils = require("@loaders.gl/worker-utils");
|
|
14
10
|
var _md = _interopRequireDefault(require("md5"));
|
|
15
11
|
var _compression = require("@loaders.gl/compression");
|
|
16
12
|
var _localFileHeader = require("../parse-zip/local-file-header");
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
(0, _classCallCheck2.default)(this, SLPKArchive);
|
|
13
|
+
class SLPKArchive {
|
|
14
|
+
constructor(slpkArchiveBuffer, hashFile) {
|
|
20
15
|
(0, _defineProperty2.default)(this, "slpkArchive", void 0);
|
|
21
16
|
(0, _defineProperty2.default)(this, "hashArray", void 0);
|
|
22
17
|
this.slpkArchive = new DataView(slpkArchiveBuffer);
|
|
23
18
|
this.hashArray = this.parseHashFile(hashFile);
|
|
24
19
|
}
|
|
25
|
-
(
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
20
|
+
parseHashFile(hashFile) {
|
|
21
|
+
const hashFileBuffer = Buffer.from(hashFile);
|
|
22
|
+
const hashArray = [];
|
|
23
|
+
for (let i = 0; i < hashFileBuffer.buffer.byteLength; i = i + 24) {
|
|
24
|
+
const offsetBuffer = new DataView(hashFileBuffer.buffer.slice(hashFileBuffer.byteOffset + i + 16, hashFileBuffer.byteOffset + i + 24));
|
|
25
|
+
const offset = offsetBuffer.getUint32(offsetBuffer.byteOffset, true);
|
|
26
|
+
hashArray.push({
|
|
27
|
+
hash: Buffer.from(hashFileBuffer.subarray(hashFileBuffer.byteOffset + i, hashFileBuffer.byteOffset + i + 16)),
|
|
28
|
+
offset
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
return hashArray;
|
|
32
|
+
}
|
|
33
|
+
async getFile(path) {
|
|
34
|
+
let mode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'raw';
|
|
35
|
+
if (mode === 'http') {
|
|
36
|
+
throw new Error('http mode is not supported');
|
|
39
37
|
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
fileWithoutCompression,
|
|
48
|
-
_args = arguments;
|
|
49
|
-
return _regenerator.default.wrap(function _callee$(_context) {
|
|
50
|
-
while (1) switch (_context.prev = _context.next) {
|
|
51
|
-
case 0:
|
|
52
|
-
mode = _args.length > 1 && _args[1] !== undefined ? _args[1] : 'raw';
|
|
53
|
-
if (!(mode === 'http')) {
|
|
54
|
-
_context.next = 3;
|
|
55
|
-
break;
|
|
56
|
-
}
|
|
57
|
-
throw new Error('http mode is not supported');
|
|
58
|
-
case 3:
|
|
59
|
-
fileToDecompress = this.getFileBytes("".concat(path, ".gz"));
|
|
60
|
-
if (!fileToDecompress) {
|
|
61
|
-
_context.next = 9;
|
|
62
|
-
break;
|
|
63
|
-
}
|
|
64
|
-
_context.next = 7;
|
|
65
|
-
return (0, _workerUtils.processOnWorker)(_compression.CompressionWorker, fileToDecompress, {
|
|
66
|
-
compression: 'gzip',
|
|
67
|
-
operation: 'decompress',
|
|
68
|
-
_workerType: 'test',
|
|
69
|
-
gzip: {}
|
|
70
|
-
});
|
|
71
|
-
case 7:
|
|
72
|
-
decompressedData = _context.sent;
|
|
73
|
-
return _context.abrupt("return", decompressedData);
|
|
74
|
-
case 9:
|
|
75
|
-
fileWithoutCompression = this.getFileBytes(path);
|
|
76
|
-
if (!fileWithoutCompression) {
|
|
77
|
-
_context.next = 12;
|
|
78
|
-
break;
|
|
79
|
-
}
|
|
80
|
-
return _context.abrupt("return", Promise.resolve(Buffer.from(fileWithoutCompression)));
|
|
81
|
-
case 12:
|
|
82
|
-
throw new Error('No such file in the archieve');
|
|
83
|
-
case 13:
|
|
84
|
-
case "end":
|
|
85
|
-
return _context.stop();
|
|
86
|
-
}
|
|
87
|
-
}, _callee, this);
|
|
88
|
-
}));
|
|
89
|
-
function getFile(_x) {
|
|
90
|
-
return _getFile.apply(this, arguments);
|
|
91
|
-
}
|
|
92
|
-
return getFile;
|
|
93
|
-
}()
|
|
94
|
-
}, {
|
|
95
|
-
key: "getFileBytes",
|
|
96
|
-
value: function getFileBytes(path) {
|
|
97
|
-
var nameHash = Buffer.from((0, _md.default)(path), 'hex');
|
|
98
|
-
var fileInfo = this.hashArray.find(function (val) {
|
|
99
|
-
return Buffer.compare(val.hash, nameHash) === 0;
|
|
38
|
+
const fileToDecompress = this.getFileBytes("".concat(path, ".gz"));
|
|
39
|
+
if (fileToDecompress) {
|
|
40
|
+
const decompressedData = await (0, _workerUtils.processOnWorker)(_compression.CompressionWorker, fileToDecompress, {
|
|
41
|
+
compression: 'gzip',
|
|
42
|
+
operation: 'decompress',
|
|
43
|
+
_workerType: 'test',
|
|
44
|
+
gzip: {}
|
|
100
45
|
});
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
return compressedFile;
|
|
46
|
+
return decompressedData;
|
|
47
|
+
}
|
|
48
|
+
const fileWithoutCompression = this.getFileBytes(path);
|
|
49
|
+
if (fileWithoutCompression) {
|
|
50
|
+
return Promise.resolve(Buffer.from(fileWithoutCompression));
|
|
107
51
|
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
52
|
+
throw new Error('No such file in the archieve');
|
|
53
|
+
}
|
|
54
|
+
getFileBytes(path) {
|
|
55
|
+
const nameHash = Buffer.from((0, _md.default)(path), 'hex');
|
|
56
|
+
const fileInfo = this.hashArray.find(val => Buffer.compare(val.hash, nameHash) === 0);
|
|
57
|
+
if (!fileInfo) {
|
|
58
|
+
return undefined;
|
|
59
|
+
}
|
|
60
|
+
const localFileHeader = (0, _localFileHeader.parseZipLocalFileHeader)(this.slpkArchive.byteOffset + (fileInfo === null || fileInfo === void 0 ? void 0 : fileInfo.offset), this.slpkArchive);
|
|
61
|
+
const compressedFile = this.slpkArchive.buffer.slice(localFileHeader.fileDataOffset, localFileHeader.fileDataOffset + localFileHeader.compressedSize);
|
|
62
|
+
return compressedFile;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
111
65
|
exports.SLPKArchive = SLPKArchive;
|
|
112
66
|
//# sourceMappingURL=slpk-archieve.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slpk-archieve.js","names":["_workerUtils","require","_md","_interopRequireDefault","_compression","_localFileHeader","SLPKArchive","slpkArchiveBuffer","hashFile","
|
|
1
|
+
{"version":3,"file":"slpk-archieve.js","names":["_workerUtils","require","_md","_interopRequireDefault","_compression","_localFileHeader","SLPKArchive","constructor","slpkArchiveBuffer","hashFile","_defineProperty2","default","slpkArchive","DataView","hashArray","parseHashFile","hashFileBuffer","Buffer","from","i","buffer","byteLength","offsetBuffer","slice","byteOffset","offset","getUint32","push","hash","subarray","getFile","path","mode","arguments","length","undefined","Error","fileToDecompress","getFileBytes","concat","decompressedData","processOnWorker","CompressionWorker","compression","operation","_workerType","gzip","fileWithoutCompression","Promise","resolve","nameHash","md5","fileInfo","find","val","compare","localFileHeader","parseZipLocalFileHeader","compressedFile","fileDataOffset","compressedSize","exports"],"sources":["../../../../../src/lib/parsers/parse-slpk/slpk-archieve.ts"],"sourcesContent":["import {processOnWorker} from '@loaders.gl/worker-utils';\nimport md5 from 'md5';\nimport {CompressionWorker} from '@loaders.gl/compression';\nimport {parseZipLocalFileHeader} from '../parse-zip/local-file-header';\n\n/** Element of hash array */\ntype HashElement = {\n /**\n * File name hash\n */\n hash: Buffer;\n /**\n * File offset in the archive\n */\n offset: number;\n};\n\n/**\n * Class for handling information about slpk file\n */\nexport class SLPKArchive {\n slpkArchive: DataView;\n hashArray: {hash: Buffer; offset: number}[];\n constructor(slpkArchiveBuffer: ArrayBuffer, hashFile: ArrayBuffer) {\n this.slpkArchive = new DataView(slpkArchiveBuffer);\n this.hashArray = this.parseHashFile(hashFile);\n }\n\n /**\n * Reads hash file from buffer and returns it in ready-to-use form\n * @param hashFile - bufer containing hash file\n * @returns Array containing file info\n */\n private parseHashFile(hashFile: ArrayBuffer): HashElement[] {\n const hashFileBuffer = Buffer.from(hashFile);\n const hashArray: HashElement[] = [];\n for (let i = 0; i < hashFileBuffer.buffer.byteLength; i = i + 24) {\n const offsetBuffer = new DataView(\n hashFileBuffer.buffer.slice(\n hashFileBuffer.byteOffset + i + 16,\n hashFileBuffer.byteOffset + i + 24\n )\n );\n const offset = offsetBuffer.getUint32(offsetBuffer.byteOffset, true);\n hashArray.push({\n hash: Buffer.from(\n hashFileBuffer.subarray(hashFileBuffer.byteOffset + i, hashFileBuffer.byteOffset + i + 16)\n ),\n offset\n });\n }\n return hashArray;\n }\n\n /**\n * Returns file with the given path from slpk archive\n * @param path - path inside the slpk\n * @param mode - currently only raw mode supported\n * @returns buffer with ready to use file\n */\n async getFile(path: string, mode: 'http' | 'raw' = 'raw'): Promise<Buffer> {\n if (mode === 'http') {\n throw new Error('http mode is not supported');\n }\n\n const fileToDecompress = this.getFileBytes(`${path}.gz`);\n\n if (fileToDecompress) {\n const decompressedData = await processOnWorker(CompressionWorker, fileToDecompress, {\n compression: 'gzip',\n operation: 'decompress',\n _workerType: 'test',\n gzip: {}\n });\n return decompressedData;\n }\n const fileWithoutCompression = this.getFileBytes(path);\n if (fileWithoutCompression) {\n return Promise.resolve(Buffer.from(fileWithoutCompression));\n }\n throw new Error('No such file in the archieve');\n }\n\n /**\n * Trying to get raw file data by adress\n * @param path - path inside the archive\n * @returns buffer with the raw file data\n */\n private getFileBytes(path: string): ArrayBuffer | undefined {\n const nameHash = Buffer.from(md5(path), 'hex');\n const fileInfo = this.hashArray.find((val) => Buffer.compare(val.hash, nameHash) === 0);\n if (!fileInfo) {\n return undefined;\n }\n\n const localFileHeader = parseZipLocalFileHeader(\n this.slpkArchive.byteOffset + fileInfo?.offset,\n this.slpkArchive\n );\n\n const compressedFile = this.slpkArchive.buffer.slice(\n localFileHeader.fileDataOffset,\n localFileHeader.fileDataOffset + localFileHeader.compressedSize\n );\n\n return compressedFile;\n }\n}\n"],"mappings":"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"}
|
|
@@ -4,8 +4,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.parseZipCDFileHeader = void 0;
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
const parseZipCDFileHeader = (headerOffset, buffer) => {
|
|
8
|
+
const offsets = {
|
|
9
9
|
CD_COMPRESSED_SIZE_OFFSET: 20,
|
|
10
10
|
CD_UNCOMPRESSED_SIZE_OFFSET: 24,
|
|
11
11
|
CD_FILE_NAME_LENGTH_OFFSET: 28,
|
|
@@ -13,15 +13,15 @@ var parseZipCDFileHeader = function parseZipCDFileHeader(headerOffset, buffer) {
|
|
|
13
13
|
CD_LOCAL_HEADER_OFFSET_OFFSET: 42,
|
|
14
14
|
CD_FILE_NAME_OFFSET: 46
|
|
15
15
|
};
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
16
|
+
const compressedSize = buffer.getUint32(headerOffset + offsets.CD_COMPRESSED_SIZE_OFFSET, true);
|
|
17
|
+
const uncompressedSize = buffer.getUint32(headerOffset + offsets.CD_UNCOMPRESSED_SIZE_OFFSET, true);
|
|
18
|
+
const fileNameLength = buffer.getUint16(headerOffset + offsets.CD_FILE_NAME_LENGTH_OFFSET, true);
|
|
19
|
+
const fileName = buffer.buffer.slice(headerOffset + offsets.CD_FILE_NAME_OFFSET, headerOffset + offsets.CD_FILE_NAME_OFFSET + fileNameLength);
|
|
20
|
+
const extraOffset = headerOffset + offsets.CD_FILE_NAME_OFFSET + fileNameLength;
|
|
21
|
+
const oldFormatOffset = buffer.getUint32(headerOffset + offsets.CD_LOCAL_HEADER_OFFSET_OFFSET, true);
|
|
22
|
+
let fileDataOffset = oldFormatOffset;
|
|
23
23
|
if (fileDataOffset === 0xffffffff) {
|
|
24
|
-
|
|
24
|
+
let offsetInZip64Data = 4;
|
|
25
25
|
if (compressedSize === 0xffffffff) {
|
|
26
26
|
offsetInZip64Data += 8;
|
|
27
27
|
}
|
|
@@ -30,14 +30,14 @@ var parseZipCDFileHeader = function parseZipCDFileHeader(headerOffset, buffer) {
|
|
|
30
30
|
}
|
|
31
31
|
fileDataOffset = buffer.getUint32(extraOffset + offsetInZip64Data, true);
|
|
32
32
|
}
|
|
33
|
-
|
|
33
|
+
const localHeaderOffset = fileDataOffset;
|
|
34
34
|
return {
|
|
35
|
-
compressedSize
|
|
36
|
-
uncompressedSize
|
|
37
|
-
fileNameLength
|
|
38
|
-
fileName
|
|
39
|
-
extraOffset
|
|
40
|
-
localHeaderOffset
|
|
35
|
+
compressedSize,
|
|
36
|
+
uncompressedSize,
|
|
37
|
+
fileNameLength,
|
|
38
|
+
fileName,
|
|
39
|
+
extraOffset,
|
|
40
|
+
localHeaderOffset
|
|
41
41
|
};
|
|
42
42
|
};
|
|
43
43
|
exports.parseZipCDFileHeader = parseZipCDFileHeader;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cd-file-header.js","names":["parseZipCDFileHeader","headerOffset","buffer","offsets","CD_COMPRESSED_SIZE_OFFSET","CD_UNCOMPRESSED_SIZE_OFFSET","CD_FILE_NAME_LENGTH_OFFSET","CD_EXTRA_FIELD_LENGTH_OFFSET","CD_LOCAL_HEADER_OFFSET_OFFSET","CD_FILE_NAME_OFFSET","compressedSize","getUint32","uncompressedSize","fileNameLength","getUint16","fileName","slice","extraOffset","oldFormatOffset","fileDataOffset","offsetInZip64Data","localHeaderOffset","exports"],"sources":["../../../../../src/lib/parsers/parse-zip/cd-file-header.ts"],"sourcesContent":["/**\n * zip central directory file header info\n * according to https://en.wikipedia.org/wiki/ZIP_(file_format)\n */\nexport type ZipCDFileHeader = {\n /**\n * Compressed size\n */\n compressedSize: number;\n /**\n * Uncompressed size\n */\n uncompressedSize: number;\n /**\n * File name length\n */\n fileNameLength: number;\n /**\n * File name\n */\n fileName: ArrayBuffer;\n /**\n * Extra field offset\n */\n extraOffset: number;\n /**\n * Relative offset of local file header\n */\n localHeaderOffset: number;\n};\n\n/**\n * Parses central directory file header of zip file\n * @param headerOffset - offset in the archive where header starts\n * @param buffer - buffer containing whole array\n * @returns Info from the header\n */\nexport const parseZipCDFileHeader = (headerOffset: number, buffer: DataView): ZipCDFileHeader => {\n const offsets = {\n CD_COMPRESSED_SIZE_OFFSET: 20,\n CD_UNCOMPRESSED_SIZE_OFFSET: 24,\n CD_FILE_NAME_LENGTH_OFFSET: 28,\n CD_EXTRA_FIELD_LENGTH_OFFSET: 30,\n CD_LOCAL_HEADER_OFFSET_OFFSET: 42,\n CD_FILE_NAME_OFFSET: 46\n };\n\n const compressedSize = buffer.getUint32(headerOffset + offsets.CD_COMPRESSED_SIZE_OFFSET, true);\n\n const uncompressedSize = buffer.getUint32(\n headerOffset + offsets.CD_UNCOMPRESSED_SIZE_OFFSET,\n true\n );\n\n const fileNameLength = buffer.getUint16(headerOffset + offsets.CD_FILE_NAME_LENGTH_OFFSET, true);\n\n const fileName = buffer.buffer.slice(\n headerOffset + offsets.CD_FILE_NAME_OFFSET,\n headerOffset + offsets.CD_FILE_NAME_OFFSET + fileNameLength\n );\n\n const extraOffset = headerOffset + offsets.CD_FILE_NAME_OFFSET + fileNameLength;\n\n const oldFormatOffset = buffer.getUint32(\n headerOffset + offsets.CD_LOCAL_HEADER_OFFSET_OFFSET,\n true\n );\n\n let fileDataOffset = oldFormatOffset;\n if (fileDataOffset === 0xffffffff) {\n let offsetInZip64Data = 4;\n // looking for info that might be also be in zip64 extra field\n if (compressedSize === 0xffffffff) {\n offsetInZip64Data += 8;\n }\n if (uncompressedSize === 0xffffffff) {\n offsetInZip64Data += 8;\n }\n\n // getUint32 needs to be replaced with getBigUint64 for archieves bigger than 2gb\n fileDataOffset = buffer.getUint32(extraOffset + offsetInZip64Data, true); // setting it to the one from zip64\n }\n const localHeaderOffset = fileDataOffset;\n\n return {\n compressedSize,\n uncompressedSize,\n fileNameLength,\n fileName,\n extraOffset,\n localHeaderOffset\n };\n};\n"],"mappings":";;;;;;AAqCO,
|
|
1
|
+
{"version":3,"file":"cd-file-header.js","names":["parseZipCDFileHeader","headerOffset","buffer","offsets","CD_COMPRESSED_SIZE_OFFSET","CD_UNCOMPRESSED_SIZE_OFFSET","CD_FILE_NAME_LENGTH_OFFSET","CD_EXTRA_FIELD_LENGTH_OFFSET","CD_LOCAL_HEADER_OFFSET_OFFSET","CD_FILE_NAME_OFFSET","compressedSize","getUint32","uncompressedSize","fileNameLength","getUint16","fileName","slice","extraOffset","oldFormatOffset","fileDataOffset","offsetInZip64Data","localHeaderOffset","exports"],"sources":["../../../../../src/lib/parsers/parse-zip/cd-file-header.ts"],"sourcesContent":["/**\n * zip central directory file header info\n * according to https://en.wikipedia.org/wiki/ZIP_(file_format)\n */\nexport type ZipCDFileHeader = {\n /**\n * Compressed size\n */\n compressedSize: number;\n /**\n * Uncompressed size\n */\n uncompressedSize: number;\n /**\n * File name length\n */\n fileNameLength: number;\n /**\n * File name\n */\n fileName: ArrayBuffer;\n /**\n * Extra field offset\n */\n extraOffset: number;\n /**\n * Relative offset of local file header\n */\n localHeaderOffset: number;\n};\n\n/**\n * Parses central directory file header of zip file\n * @param headerOffset - offset in the archive where header starts\n * @param buffer - buffer containing whole array\n * @returns Info from the header\n */\nexport const parseZipCDFileHeader = (headerOffset: number, buffer: DataView): ZipCDFileHeader => {\n const offsets = {\n CD_COMPRESSED_SIZE_OFFSET: 20,\n CD_UNCOMPRESSED_SIZE_OFFSET: 24,\n CD_FILE_NAME_LENGTH_OFFSET: 28,\n CD_EXTRA_FIELD_LENGTH_OFFSET: 30,\n CD_LOCAL_HEADER_OFFSET_OFFSET: 42,\n CD_FILE_NAME_OFFSET: 46\n };\n\n const compressedSize = buffer.getUint32(headerOffset + offsets.CD_COMPRESSED_SIZE_OFFSET, true);\n\n const uncompressedSize = buffer.getUint32(\n headerOffset + offsets.CD_UNCOMPRESSED_SIZE_OFFSET,\n true\n );\n\n const fileNameLength = buffer.getUint16(headerOffset + offsets.CD_FILE_NAME_LENGTH_OFFSET, true);\n\n const fileName = buffer.buffer.slice(\n headerOffset + offsets.CD_FILE_NAME_OFFSET,\n headerOffset + offsets.CD_FILE_NAME_OFFSET + fileNameLength\n );\n\n const extraOffset = headerOffset + offsets.CD_FILE_NAME_OFFSET + fileNameLength;\n\n const oldFormatOffset = buffer.getUint32(\n headerOffset + offsets.CD_LOCAL_HEADER_OFFSET_OFFSET,\n true\n );\n\n let fileDataOffset = oldFormatOffset;\n if (fileDataOffset === 0xffffffff) {\n let offsetInZip64Data = 4;\n // looking for info that might be also be in zip64 extra field\n if (compressedSize === 0xffffffff) {\n offsetInZip64Data += 8;\n }\n if (uncompressedSize === 0xffffffff) {\n offsetInZip64Data += 8;\n }\n\n // getUint32 needs to be replaced with getBigUint64 for archieves bigger than 2gb\n fileDataOffset = buffer.getUint32(extraOffset + offsetInZip64Data, true); // setting it to the one from zip64\n }\n const localHeaderOffset = fileDataOffset;\n\n return {\n compressedSize,\n uncompressedSize,\n fileNameLength,\n fileName,\n extraOffset,\n localHeaderOffset\n };\n};\n"],"mappings":";;;;;;AAqCO,MAAMA,oBAAoB,GAAGA,CAACC,YAAoB,EAAEC,MAAgB,KAAsB;EAC/F,MAAMC,OAAO,GAAG;IACdC,yBAAyB,EAAE,EAAE;IAC7BC,2BAA2B,EAAE,EAAE;IAC/BC,0BAA0B,EAAE,EAAE;IAC9BC,4BAA4B,EAAE,EAAE;IAChCC,6BAA6B,EAAE,EAAE;IACjCC,mBAAmB,EAAE;EACvB,CAAC;EAED,MAAMC,cAAc,GAAGR,MAAM,CAACS,SAAS,CAACV,YAAY,GAAGE,OAAO,CAACC,yBAAyB,EAAE,IAAI,CAAC;EAE/F,MAAMQ,gBAAgB,GAAGV,MAAM,CAACS,SAAS,CACvCV,YAAY,GAAGE,OAAO,CAACE,2BAA2B,EAClD,IACF,CAAC;EAED,MAAMQ,cAAc,GAAGX,MAAM,CAACY,SAAS,CAACb,YAAY,GAAGE,OAAO,CAACG,0BAA0B,EAAE,IAAI,CAAC;EAEhG,MAAMS,QAAQ,GAAGb,MAAM,CAACA,MAAM,CAACc,KAAK,CAClCf,YAAY,GAAGE,OAAO,CAACM,mBAAmB,EAC1CR,YAAY,GAAGE,OAAO,CAACM,mBAAmB,GAAGI,cAC/C,CAAC;EAED,MAAMI,WAAW,GAAGhB,YAAY,GAAGE,OAAO,CAACM,mBAAmB,GAAGI,cAAc;EAE/E,MAAMK,eAAe,GAAGhB,MAAM,CAACS,SAAS,CACtCV,YAAY,GAAGE,OAAO,CAACK,6BAA6B,EACpD,IACF,CAAC;EAED,IAAIW,cAAc,GAAGD,eAAe;EACpC,IAAIC,cAAc,KAAK,UAAU,EAAE;IACjC,IAAIC,iBAAiB,GAAG,CAAC;IAEzB,IAAIV,cAAc,KAAK,UAAU,EAAE;MACjCU,iBAAiB,IAAI,CAAC;IACxB;IACA,IAAIR,gBAAgB,KAAK,UAAU,EAAE;MACnCQ,iBAAiB,IAAI,CAAC;IACxB;IAGAD,cAAc,GAAGjB,MAAM,CAACS,SAAS,CAACM,WAAW,GAAGG,iBAAiB,EAAE,IAAI,CAAC;EAC1E;EACA,MAAMC,iBAAiB,GAAGF,cAAc;EAExC,OAAO;IACLT,cAAc;IACdE,gBAAgB;IAChBC,cAAc;IACdE,QAAQ;IACRE,WAAW;IACXI;EACF,CAAC;AACH,CAAC;AAACC,OAAA,CAAAtB,oBAAA,GAAAA,oBAAA"}
|
|
@@ -4,22 +4,22 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.parseZipLocalFileHeader = void 0;
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
const parseZipLocalFileHeader = (headerOffset, buffer) => {
|
|
8
|
+
const offsets = {
|
|
9
9
|
COMPRESSED_SIZE_OFFSET: 18,
|
|
10
10
|
FILE_NAME_LENGTH_OFFSET: 26,
|
|
11
11
|
EXTRA_FIELD_LENGTH_OFFSET: 28,
|
|
12
12
|
FILE_NAME_OFFSET: 30
|
|
13
13
|
};
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
const fileNameLength = buffer.getUint16(headerOffset + offsets.FILE_NAME_LENGTH_OFFSET, true);
|
|
15
|
+
const extraFieldLength = buffer.getUint16(headerOffset + offsets.EXTRA_FIELD_LENGTH_OFFSET, true);
|
|
16
|
+
const fileDataOffset = headerOffset + offsets.FILE_NAME_OFFSET + fileNameLength + extraFieldLength;
|
|
17
|
+
const compressedSize = buffer.getUint32(headerOffset + offsets.COMPRESSED_SIZE_OFFSET, true);
|
|
18
18
|
return {
|
|
19
|
-
fileNameLength
|
|
20
|
-
extraFieldLength
|
|
21
|
-
fileDataOffset
|
|
22
|
-
compressedSize
|
|
19
|
+
fileNameLength,
|
|
20
|
+
extraFieldLength,
|
|
21
|
+
fileDataOffset,
|
|
22
|
+
compressedSize
|
|
23
23
|
};
|
|
24
24
|
};
|
|
25
25
|
exports.parseZipLocalFileHeader = parseZipLocalFileHeader;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-file-header.js","names":["parseZipLocalFileHeader","headerOffset","buffer","offsets","COMPRESSED_SIZE_OFFSET","FILE_NAME_LENGTH_OFFSET","EXTRA_FIELD_LENGTH_OFFSET","FILE_NAME_OFFSET","fileNameLength","getUint16","extraFieldLength","fileDataOffset","compressedSize","getUint32","exports"],"sources":["../../../../../src/lib/parsers/parse-zip/local-file-header.ts"],"sourcesContent":["/**\n * zip local file header info\n * according to https://en.wikipedia.org/wiki/ZIP_(file_format)\n */\nexport type ZipLocalFileHeader = {\n /**\n * File name length\n */\n fileNameLength: number;\n /**\n * Extra field length\n */\n extraFieldLength: number;\n /**\n * Offset of the file data\n */\n fileDataOffset: number;\n /**\n * Compressed size\n */\n compressedSize: number;\n};\n\n/**\n * Parses local file header of zip file\n * @param headerOffset - offset in the archive where header starts\n * @param buffer - buffer containing whole array\n * @returns Info from the header\n */\nexport const parseZipLocalFileHeader = (\n headerOffset: number,\n buffer: DataView\n): ZipLocalFileHeader => {\n const offsets = {\n COMPRESSED_SIZE_OFFSET: 18,\n FILE_NAME_LENGTH_OFFSET: 26,\n EXTRA_FIELD_LENGTH_OFFSET: 28,\n FILE_NAME_OFFSET: 30\n };\n\n const fileNameLength = buffer.getUint16(headerOffset + offsets.FILE_NAME_LENGTH_OFFSET, true);\n\n const extraFieldLength = buffer.getUint16(headerOffset + offsets.EXTRA_FIELD_LENGTH_OFFSET, true);\n\n const fileDataOffset =\n headerOffset + offsets.FILE_NAME_OFFSET + fileNameLength + extraFieldLength;\n\n const compressedSize = buffer.getUint32(headerOffset + offsets.COMPRESSED_SIZE_OFFSET, true);\n\n return {\n fileNameLength,\n extraFieldLength,\n fileDataOffset,\n compressedSize\n };\n};\n"],"mappings":";;;;;;AA6BO,
|
|
1
|
+
{"version":3,"file":"local-file-header.js","names":["parseZipLocalFileHeader","headerOffset","buffer","offsets","COMPRESSED_SIZE_OFFSET","FILE_NAME_LENGTH_OFFSET","EXTRA_FIELD_LENGTH_OFFSET","FILE_NAME_OFFSET","fileNameLength","getUint16","extraFieldLength","fileDataOffset","compressedSize","getUint32","exports"],"sources":["../../../../../src/lib/parsers/parse-zip/local-file-header.ts"],"sourcesContent":["/**\n * zip local file header info\n * according to https://en.wikipedia.org/wiki/ZIP_(file_format)\n */\nexport type ZipLocalFileHeader = {\n /**\n * File name length\n */\n fileNameLength: number;\n /**\n * Extra field length\n */\n extraFieldLength: number;\n /**\n * Offset of the file data\n */\n fileDataOffset: number;\n /**\n * Compressed size\n */\n compressedSize: number;\n};\n\n/**\n * Parses local file header of zip file\n * @param headerOffset - offset in the archive where header starts\n * @param buffer - buffer containing whole array\n * @returns Info from the header\n */\nexport const parseZipLocalFileHeader = (\n headerOffset: number,\n buffer: DataView\n): ZipLocalFileHeader => {\n const offsets = {\n COMPRESSED_SIZE_OFFSET: 18,\n FILE_NAME_LENGTH_OFFSET: 26,\n EXTRA_FIELD_LENGTH_OFFSET: 28,\n FILE_NAME_OFFSET: 30\n };\n\n const fileNameLength = buffer.getUint16(headerOffset + offsets.FILE_NAME_LENGTH_OFFSET, true);\n\n const extraFieldLength = buffer.getUint16(headerOffset + offsets.EXTRA_FIELD_LENGTH_OFFSET, true);\n\n const fileDataOffset =\n headerOffset + offsets.FILE_NAME_OFFSET + fileNameLength + extraFieldLength;\n\n const compressedSize = buffer.getUint32(headerOffset + offsets.COMPRESSED_SIZE_OFFSET, true);\n\n return {\n fileNameLength,\n extraFieldLength,\n fileDataOffset,\n compressedSize\n };\n};\n"],"mappings":";;;;;;AA6BO,MAAMA,uBAAuB,GAAGA,CACrCC,YAAoB,EACpBC,MAAgB,KACO;EACvB,MAAMC,OAAO,GAAG;IACdC,sBAAsB,EAAE,EAAE;IAC1BC,uBAAuB,EAAE,EAAE;IAC3BC,yBAAyB,EAAE,EAAE;IAC7BC,gBAAgB,EAAE;EACpB,CAAC;EAED,MAAMC,cAAc,GAAGN,MAAM,CAACO,SAAS,CAACR,YAAY,GAAGE,OAAO,CAACE,uBAAuB,EAAE,IAAI,CAAC;EAE7F,MAAMK,gBAAgB,GAAGR,MAAM,CAACO,SAAS,CAACR,YAAY,GAAGE,OAAO,CAACG,yBAAyB,EAAE,IAAI,CAAC;EAEjG,MAAMK,cAAc,GAClBV,YAAY,GAAGE,OAAO,CAACI,gBAAgB,GAAGC,cAAc,GAAGE,gBAAgB;EAE7E,MAAME,cAAc,GAAGV,MAAM,CAACW,SAAS,CAACZ,YAAY,GAAGE,OAAO,CAACC,sBAAsB,EAAE,IAAI,CAAC;EAE5F,OAAO;IACLI,cAAc;IACdE,gBAAgB;IAChBC,cAAc;IACdC;EACF,CAAC;AACH,CAAC;AAACE,OAAA,CAAAd,uBAAA,GAAAA,uBAAA"}
|
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
3
|
Object.defineProperty(exports, "__esModule", {
|
|
5
4
|
value: true
|
|
6
5
|
});
|
|
7
6
|
exports.convertI3SObbToMbs = convertI3SObbToMbs;
|
|
8
|
-
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
9
7
|
var _culling = require("@math.gl/culling");
|
|
10
8
|
var _geospatial = require("@math.gl/geospatial");
|
|
11
9
|
function convertI3SObbToMbs(obb) {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
return [
|
|
10
|
+
const halfSize = obb.halfSize;
|
|
11
|
+
const centerCartesian = _geospatial.Ellipsoid.WGS84.cartographicToCartesian(obb.center);
|
|
12
|
+
const sphere = new _culling.BoundingSphere().fromCornerPoints([centerCartesian[0] - halfSize[0], centerCartesian[1] - halfSize[1], centerCartesian[2] - halfSize[2]], [centerCartesian[0] + halfSize[0], centerCartesian[1] + halfSize[1], centerCartesian[2] + halfSize[2]]);
|
|
13
|
+
return [...obb.center, sphere.radius];
|
|
16
14
|
}
|
|
17
15
|
//# sourceMappingURL=convert-i3s-obb-to-mbs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convert-i3s-obb-to-mbs.js","names":["_culling","require","_geospatial","convertI3SObbToMbs","obb","halfSize","centerCartesian","Ellipsoid","WGS84","cartographicToCartesian","center","sphere","BoundingSphere","fromCornerPoints","
|
|
1
|
+
{"version":3,"file":"convert-i3s-obb-to-mbs.js","names":["_culling","require","_geospatial","convertI3SObbToMbs","obb","halfSize","centerCartesian","Ellipsoid","WGS84","cartographicToCartesian","center","sphere","BoundingSphere","fromCornerPoints","radius"],"sources":["../../../../src/lib/utils/convert-i3s-obb-to-mbs.ts"],"sourcesContent":["import {BoundingSphere} from '@math.gl/culling';\nimport {Ellipsoid} from '@math.gl/geospatial';\n\nexport function convertI3SObbToMbs(obb) {\n const halfSize = obb.halfSize;\n const centerCartesian = Ellipsoid.WGS84.cartographicToCartesian(obb.center);\n const sphere = new BoundingSphere().fromCornerPoints(\n [\n centerCartesian[0] - halfSize[0],\n centerCartesian[1] - halfSize[1],\n centerCartesian[2] - halfSize[2]\n ],\n [\n centerCartesian[0] + halfSize[0],\n centerCartesian[1] + halfSize[1],\n centerCartesian[2] + halfSize[2]\n ]\n );\n return [...obb.center, sphere.radius];\n}\n"],"mappings":";;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AAEO,SAASE,kBAAkBA,CAACC,GAAG,EAAE;EACtC,MAAMC,QAAQ,GAAGD,GAAG,CAACC,QAAQ;EAC7B,MAAMC,eAAe,GAAGC,qBAAS,CAACC,KAAK,CAACC,uBAAuB,CAACL,GAAG,CAACM,MAAM,CAAC;EAC3E,MAAMC,MAAM,GAAG,IAAIC,uBAAc,CAAC,CAAC,CAACC,gBAAgB,CAClD,CACEP,eAAe,CAAC,CAAC,CAAC,GAAGD,QAAQ,CAAC,CAAC,CAAC,EAChCC,eAAe,CAAC,CAAC,CAAC,GAAGD,QAAQ,CAAC,CAAC,CAAC,EAChCC,eAAe,CAAC,CAAC,CAAC,GAAGD,QAAQ,CAAC,CAAC,CAAC,CACjC,EACD,CACEC,eAAe,CAAC,CAAC,CAAC,GAAGD,QAAQ,CAAC,CAAC,CAAC,EAChCC,eAAe,CAAC,CAAC,CAAC,GAAGD,QAAQ,CAAC,CAAC,CAAC,EAChCC,eAAe,CAAC,CAAC,CAAC,GAAGD,QAAQ,CAAC,CAAC,CAAC,CAEpC,CAAC;EACD,OAAO,CAAC,GAAGD,GAAG,CAACM,MAAM,EAAEC,MAAM,CAACG,MAAM,CAAC;AACvC"}
|
|
@@ -1,159 +1,98 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
3
|
Object.defineProperty(exports, "__esModule", {
|
|
5
4
|
value: true
|
|
6
5
|
});
|
|
7
6
|
exports.customizeColors = customizeColors;
|
|
8
|
-
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
9
|
-
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
10
7
|
var _core = require("@loaders.gl/core");
|
|
11
8
|
var _i3sAttributeLoader = require("../../i3s-attribute-loader");
|
|
12
9
|
var _urlUtils = require("../utils/url-utils");
|
|
13
|
-
function customizeColors(
|
|
14
|
-
return _customizeColors.apply(this, arguments);
|
|
15
|
-
}
|
|
16
|
-
function _customizeColors() {
|
|
17
|
-
_customizeColors = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(colors, featureIds, tileOptions, tilesetOptions, options) {
|
|
18
|
-
var _options$i3s2;
|
|
19
|
-
var colorizeAttributeField, colorizeAttributeData, objectIdField, objectIdAttributeData, attributeValuesMap, i, _i, color;
|
|
20
|
-
return _regenerator.default.wrap(function _callee$(_context) {
|
|
21
|
-
while (1) switch (_context.prev = _context.next) {
|
|
22
|
-
case 0:
|
|
23
|
-
if (options !== null && options !== void 0 && (_options$i3s2 = options.i3s) !== null && _options$i3s2 !== void 0 && _options$i3s2.colorsByAttribute) {
|
|
24
|
-
_context.next = 2;
|
|
25
|
-
break;
|
|
26
|
-
}
|
|
27
|
-
return _context.abrupt("return", colors);
|
|
28
|
-
case 2:
|
|
29
|
-
colorizeAttributeField = tilesetOptions.fields.find(function (_ref3) {
|
|
30
|
-
var _options$i3s3, _options$i3s3$colorsB;
|
|
31
|
-
var name = _ref3.name;
|
|
32
|
-
return name === (options === null || options === void 0 ? void 0 : (_options$i3s3 = options.i3s) === null || _options$i3s3 === void 0 ? void 0 : (_options$i3s3$colorsB = _options$i3s3.colorsByAttribute) === null || _options$i3s3$colorsB === void 0 ? void 0 : _options$i3s3$colorsB.attributeName);
|
|
33
|
-
});
|
|
34
|
-
if (!(!colorizeAttributeField || !['esriFieldTypeDouble', 'esriFieldTypeInteger', 'esriFieldTypeSmallInteger'].includes(colorizeAttributeField.type))) {
|
|
35
|
-
_context.next = 5;
|
|
36
|
-
break;
|
|
37
|
-
}
|
|
38
|
-
return _context.abrupt("return", colors);
|
|
39
|
-
case 5:
|
|
40
|
-
_context.next = 7;
|
|
41
|
-
return loadFeatureAttributeData(colorizeAttributeField.name, tileOptions, tilesetOptions, options);
|
|
42
|
-
case 7:
|
|
43
|
-
colorizeAttributeData = _context.sent;
|
|
44
|
-
if (colorizeAttributeData) {
|
|
45
|
-
_context.next = 10;
|
|
46
|
-
break;
|
|
47
|
-
}
|
|
48
|
-
return _context.abrupt("return", colors);
|
|
49
|
-
case 10:
|
|
50
|
-
objectIdField = tilesetOptions.fields.find(function (_ref4) {
|
|
51
|
-
var type = _ref4.type;
|
|
52
|
-
return type === 'esriFieldTypeOID';
|
|
53
|
-
});
|
|
54
|
-
if (objectIdField) {
|
|
55
|
-
_context.next = 13;
|
|
56
|
-
break;
|
|
57
|
-
}
|
|
58
|
-
return _context.abrupt("return", colors);
|
|
59
|
-
case 13:
|
|
60
|
-
_context.next = 15;
|
|
61
|
-
return loadFeatureAttributeData(objectIdField.name, tileOptions, tilesetOptions, options);
|
|
62
|
-
case 15:
|
|
63
|
-
objectIdAttributeData = _context.sent;
|
|
64
|
-
if (objectIdAttributeData) {
|
|
65
|
-
_context.next = 18;
|
|
66
|
-
break;
|
|
67
|
-
}
|
|
68
|
-
return _context.abrupt("return", colors);
|
|
69
|
-
case 18:
|
|
70
|
-
attributeValuesMap = {};
|
|
71
|
-
for (i = 0; i < objectIdAttributeData[objectIdField.name].length; i++) {
|
|
72
|
-
attributeValuesMap[objectIdAttributeData[objectIdField.name][i]] = calculateColorForAttribute(colorizeAttributeData[colorizeAttributeField.name][i], options);
|
|
73
|
-
}
|
|
74
|
-
_i = 0;
|
|
75
|
-
case 21:
|
|
76
|
-
if (!(_i < featureIds.value.length)) {
|
|
77
|
-
_context.next = 29;
|
|
78
|
-
break;
|
|
79
|
-
}
|
|
80
|
-
color = attributeValuesMap[featureIds.value[_i]];
|
|
81
|
-
if (color) {
|
|
82
|
-
_context.next = 25;
|
|
83
|
-
break;
|
|
84
|
-
}
|
|
85
|
-
return _context.abrupt("continue", 26);
|
|
86
|
-
case 25:
|
|
87
|
-
colors.value.set(color, _i * 4);
|
|
88
|
-
case 26:
|
|
89
|
-
_i++;
|
|
90
|
-
_context.next = 21;
|
|
91
|
-
break;
|
|
92
|
-
case 29:
|
|
93
|
-
return _context.abrupt("return", colors);
|
|
94
|
-
case 30:
|
|
95
|
-
case "end":
|
|
96
|
-
return _context.stop();
|
|
97
|
-
}
|
|
98
|
-
}, _callee);
|
|
99
|
-
}));
|
|
100
|
-
return _customizeColors.apply(this, arguments);
|
|
101
|
-
}
|
|
102
|
-
function calculateColorForAttribute(attributeValue, options) {
|
|
10
|
+
async function customizeColors(colors, featureIds, tileOptions, tilesetOptions, options) {
|
|
103
11
|
var _options$i3s;
|
|
104
12
|
if (!(options !== null && options !== void 0 && (_options$i3s = options.i3s) !== null && _options$i3s !== void 0 && _options$i3s.colorsByAttribute)) {
|
|
13
|
+
return colors;
|
|
14
|
+
}
|
|
15
|
+
const colorizeAttributeField = tilesetOptions.fields.find(_ref => {
|
|
16
|
+
var _options$i3s2, _options$i3s2$colorsB;
|
|
17
|
+
let {
|
|
18
|
+
name
|
|
19
|
+
} = _ref;
|
|
20
|
+
return name === (options === null || options === void 0 ? void 0 : (_options$i3s2 = options.i3s) === null || _options$i3s2 === void 0 ? void 0 : (_options$i3s2$colorsB = _options$i3s2.colorsByAttribute) === null || _options$i3s2$colorsB === void 0 ? void 0 : _options$i3s2$colorsB.attributeName);
|
|
21
|
+
});
|
|
22
|
+
if (!colorizeAttributeField || !['esriFieldTypeDouble', 'esriFieldTypeInteger', 'esriFieldTypeSmallInteger'].includes(colorizeAttributeField.type)) {
|
|
23
|
+
return colors;
|
|
24
|
+
}
|
|
25
|
+
const colorizeAttributeData = await loadFeatureAttributeData(colorizeAttributeField.name, tileOptions, tilesetOptions, options);
|
|
26
|
+
if (!colorizeAttributeData) {
|
|
27
|
+
return colors;
|
|
28
|
+
}
|
|
29
|
+
const objectIdField = tilesetOptions.fields.find(_ref2 => {
|
|
30
|
+
let {
|
|
31
|
+
type
|
|
32
|
+
} = _ref2;
|
|
33
|
+
return type === 'esriFieldTypeOID';
|
|
34
|
+
});
|
|
35
|
+
if (!objectIdField) {
|
|
36
|
+
return colors;
|
|
37
|
+
}
|
|
38
|
+
const objectIdAttributeData = await loadFeatureAttributeData(objectIdField.name, tileOptions, tilesetOptions, options);
|
|
39
|
+
if (!objectIdAttributeData) {
|
|
40
|
+
return colors;
|
|
41
|
+
}
|
|
42
|
+
const attributeValuesMap = {};
|
|
43
|
+
for (let i = 0; i < objectIdAttributeData[objectIdField.name].length; i++) {
|
|
44
|
+
attributeValuesMap[objectIdAttributeData[objectIdField.name][i]] = calculateColorForAttribute(colorizeAttributeData[colorizeAttributeField.name][i], options);
|
|
45
|
+
}
|
|
46
|
+
for (let i = 0; i < featureIds.value.length; i++) {
|
|
47
|
+
const color = attributeValuesMap[featureIds.value[i]];
|
|
48
|
+
if (!color) {
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
colors.value.set(color, i * 4);
|
|
52
|
+
}
|
|
53
|
+
return colors;
|
|
54
|
+
}
|
|
55
|
+
function calculateColorForAttribute(attributeValue, options) {
|
|
56
|
+
var _options$i3s3;
|
|
57
|
+
if (!(options !== null && options !== void 0 && (_options$i3s3 = options.i3s) !== null && _options$i3s3 !== void 0 && _options$i3s3.colorsByAttribute)) {
|
|
105
58
|
return [255, 255, 255, 255];
|
|
106
59
|
}
|
|
107
|
-
|
|
108
|
-
minValue
|
|
109
|
-
maxValue
|
|
110
|
-
minColor
|
|
111
|
-
maxColor
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
60
|
+
const {
|
|
61
|
+
minValue,
|
|
62
|
+
maxValue,
|
|
63
|
+
minColor,
|
|
64
|
+
maxColor
|
|
65
|
+
} = options.i3s.colorsByAttribute;
|
|
66
|
+
const rate = (attributeValue - minValue) / (maxValue - minValue);
|
|
67
|
+
const color = [255, 255, 255, 255];
|
|
68
|
+
for (let i = 0; i < minColor.length; i++) {
|
|
115
69
|
color[i] = Math.round((maxColor[i] - minColor[i]) * rate + minColor[i]);
|
|
116
70
|
}
|
|
117
71
|
return color;
|
|
118
72
|
}
|
|
119
|
-
function loadFeatureAttributeData(
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
_context2.next = 9;
|
|
144
|
-
return (0, _core.load)(objectIdAttributeUrl, _i3sAttributeLoader.I3SAttributeLoader, {
|
|
145
|
-
attributeName: attributeName,
|
|
146
|
-
attributeType: attributeType
|
|
147
|
-
});
|
|
148
|
-
case 9:
|
|
149
|
-
objectIdAttributeData = _context2.sent;
|
|
150
|
-
return _context2.abrupt("return", objectIdAttributeData);
|
|
151
|
-
case 11:
|
|
152
|
-
case "end":
|
|
153
|
-
return _context2.stop();
|
|
154
|
-
}
|
|
155
|
-
}, _callee2);
|
|
156
|
-
}));
|
|
157
|
-
return _loadFeatureAttributeData.apply(this, arguments);
|
|
73
|
+
async function loadFeatureAttributeData(attributeName, _ref3, _ref4, options) {
|
|
74
|
+
var _options$i3s4;
|
|
75
|
+
let {
|
|
76
|
+
attributeUrls
|
|
77
|
+
} = _ref3;
|
|
78
|
+
let {
|
|
79
|
+
attributeStorageInfo
|
|
80
|
+
} = _ref4;
|
|
81
|
+
const attributeIndex = attributeStorageInfo.findIndex(_ref5 => {
|
|
82
|
+
let {
|
|
83
|
+
name
|
|
84
|
+
} = _ref5;
|
|
85
|
+
return attributeName === name;
|
|
86
|
+
});
|
|
87
|
+
if (attributeIndex === -1) {
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
const objectIdAttributeUrl = (0, _urlUtils.getUrlWithToken)(attributeUrls[attributeIndex], options === null || options === void 0 ? void 0 : (_options$i3s4 = options.i3s) === null || _options$i3s4 === void 0 ? void 0 : _options$i3s4.token);
|
|
91
|
+
const attributeType = (0, _i3sAttributeLoader.getAttributeValueType)(attributeStorageInfo[attributeIndex]);
|
|
92
|
+
const objectIdAttributeData = await (0, _core.load)(objectIdAttributeUrl, _i3sAttributeLoader.I3SAttributeLoader, {
|
|
93
|
+
attributeName,
|
|
94
|
+
attributeType
|
|
95
|
+
});
|
|
96
|
+
return objectIdAttributeData;
|
|
158
97
|
}
|
|
159
98
|
//# sourceMappingURL=customizeColors.js.map
|