@loaders.gl/i3s 3.3.0-alpha.3 → 3.3.0-alpha.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.min.js +260 -190
- package/dist/es5/arcgis-webscene-loader.js +1 -1
- package/dist/es5/i3s-attribute-loader.js +2 -1
- 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-content-loader.js +1 -1
- package/dist/es5/i3s-loader.js +3 -2
- package/dist/es5/i3s-loader.js.map +1 -1
- package/dist/es5/i3s-node-page-loader.js +1 -1
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/lib/parsers/parse-i3s-tile-content.js +8 -1
- package/dist/es5/lib/parsers/parse-i3s-tile-content.js.map +1 -1
- package/dist/es5/lib/utils/customizeColors.js +213 -0
- package/dist/es5/lib/utils/customizeColors.js.map +1 -0
- package/dist/es5/types.js.map +1 -1
- package/dist/esm/arcgis-webscene-loader.js +1 -1
- package/dist/esm/i3s-attribute-loader.js +2 -2
- 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-content-loader.js +1 -1
- package/dist/esm/i3s-loader.js +3 -2
- package/dist/esm/i3s-loader.js.map +1 -1
- package/dist/esm/i3s-node-page-loader.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/parsers/parse-i3s-tile-content.js +2 -0
- package/dist/esm/lib/parsers/parse-i3s-tile-content.js.map +1 -1
- package/dist/esm/lib/utils/customizeColors.js +108 -0
- package/dist/esm/lib/utils/customizeColors.js.map +1 -0
- package/dist/esm/types.js.map +1 -1
- package/dist/i3s-attribute-loader.d.ts +6 -0
- package/dist/i3s-attribute-loader.d.ts.map +1 -1
- package/dist/i3s-attribute-loader.js +2 -1
- package/dist/i3s-content-nodejs-worker.js +50 -50
- package/dist/i3s-content-nodejs-worker.js.map +3 -3
- package/dist/i3s-content-worker.js +159 -11
- package/dist/i3s-loader.d.ts.map +1 -1
- package/dist/i3s-loader.js +2 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/lib/parsers/parse-i3s-tile-content.d.ts.map +1 -1
- package/dist/lib/parsers/parse-i3s-tile-content.js +2 -0
- package/dist/lib/utils/customizeColors.d.ts +14 -0
- package/dist/lib/utils/customizeColors.d.ts.map +1 -0
- package/dist/lib/utils/customizeColors.js +89 -0
- package/dist/types.d.ts +52 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +8 -8
- package/src/i3s-attribute-loader.ts +1 -1
- package/src/i3s-loader.ts +2 -1
- package/src/index.ts +3 -1
- package/src/lib/parsers/parse-i3s-tile-content.ts +11 -1
- package/src/lib/utils/customizeColors.ts +129 -0
- package/src/types.ts +57 -1
package/dist/dist.min.js
CHANGED
|
@@ -9540,6 +9540,249 @@
|
|
|
9540
9540
|
}
|
|
9541
9541
|
});
|
|
9542
9542
|
|
|
9543
|
+
// src/lib/parsers/parse-i3s-attribute.ts
|
|
9544
|
+
async function parseI3STileAttribute(arrayBuffer, options) {
|
|
9545
|
+
const { attributeName, attributeType } = options;
|
|
9546
|
+
if (!attributeName) {
|
|
9547
|
+
return {};
|
|
9548
|
+
}
|
|
9549
|
+
return {
|
|
9550
|
+
[attributeName]: attributeType ? parseAttribute(attributeType, arrayBuffer) : null
|
|
9551
|
+
};
|
|
9552
|
+
}
|
|
9553
|
+
function parseAttribute(attributeType, arrayBuffer) {
|
|
9554
|
+
switch (attributeType) {
|
|
9555
|
+
case STRING_ATTRIBUTE_TYPE:
|
|
9556
|
+
return parseStringsAttribute(arrayBuffer);
|
|
9557
|
+
case OBJECT_ID_ATTRIBUTE_TYPE:
|
|
9558
|
+
return parseShortNumberAttribute(arrayBuffer);
|
|
9559
|
+
case FLOAT_64_TYPE:
|
|
9560
|
+
return parseFloatAttribute(arrayBuffer);
|
|
9561
|
+
case INT_16_ATTRIBUTE_TYPE:
|
|
9562
|
+
return parseInt16ShortNumberAttribute(arrayBuffer);
|
|
9563
|
+
default:
|
|
9564
|
+
return parseShortNumberAttribute(arrayBuffer);
|
|
9565
|
+
}
|
|
9566
|
+
}
|
|
9567
|
+
function parseShortNumberAttribute(arrayBuffer) {
|
|
9568
|
+
const countOffset = 4;
|
|
9569
|
+
return new Uint32Array(arrayBuffer, countOffset);
|
|
9570
|
+
}
|
|
9571
|
+
function parseInt16ShortNumberAttribute(arrayBuffer) {
|
|
9572
|
+
const countOffset = 4;
|
|
9573
|
+
return new Int16Array(arrayBuffer, countOffset);
|
|
9574
|
+
}
|
|
9575
|
+
function parseFloatAttribute(arrayBuffer) {
|
|
9576
|
+
const countOffset = 8;
|
|
9577
|
+
return new Float64Array(arrayBuffer, countOffset);
|
|
9578
|
+
}
|
|
9579
|
+
function parseStringsAttribute(arrayBuffer) {
|
|
9580
|
+
const stringsCountOffset = 0;
|
|
9581
|
+
const dataOffset = 8;
|
|
9582
|
+
const bytesPerStringSize = 4;
|
|
9583
|
+
const stringsArray = [];
|
|
9584
|
+
try {
|
|
9585
|
+
const stringsCount = new DataView(arrayBuffer, stringsCountOffset, bytesPerStringSize).getUint32(stringsCountOffset, true);
|
|
9586
|
+
const stringSizes = new Uint32Array(arrayBuffer, dataOffset, stringsCount);
|
|
9587
|
+
let stringOffset = dataOffset + stringsCount * bytesPerStringSize;
|
|
9588
|
+
for (const stringByteSize of stringSizes) {
|
|
9589
|
+
const textDecoder = new TextDecoder("utf-8");
|
|
9590
|
+
const stringAttribute = new Uint8Array(arrayBuffer, stringOffset, stringByteSize);
|
|
9591
|
+
stringsArray.push(textDecoder.decode(stringAttribute));
|
|
9592
|
+
stringOffset += stringByteSize;
|
|
9593
|
+
}
|
|
9594
|
+
} catch (error) {
|
|
9595
|
+
console.error("Parse string attribute error: ", error.message);
|
|
9596
|
+
}
|
|
9597
|
+
return stringsArray;
|
|
9598
|
+
}
|
|
9599
|
+
var init_parse_i3s_attribute = __esm({
|
|
9600
|
+
"src/lib/parsers/parse-i3s-attribute.ts"() {
|
|
9601
|
+
init_constants2();
|
|
9602
|
+
}
|
|
9603
|
+
});
|
|
9604
|
+
|
|
9605
|
+
// src/i3s-attribute-loader.ts
|
|
9606
|
+
async function parse3(data, options) {
|
|
9607
|
+
data = parseI3STileAttribute(data, options);
|
|
9608
|
+
return data;
|
|
9609
|
+
}
|
|
9610
|
+
async function loadFeatureAttributes(tile, featureId, options = {}) {
|
|
9611
|
+
const { attributeStorageInfo, attributeUrls, tilesetFields } = getAttributesData(tile);
|
|
9612
|
+
if (!attributeStorageInfo || !attributeUrls || featureId < 0) {
|
|
9613
|
+
return null;
|
|
9614
|
+
}
|
|
9615
|
+
let attributes = [];
|
|
9616
|
+
const attributeLoadPromises = [];
|
|
9617
|
+
for (let index = 0; index < attributeStorageInfo.length; index++) {
|
|
9618
|
+
const url = getUrlWithToken(attributeUrls[index], options.i3s?.token);
|
|
9619
|
+
const attributeName = attributeStorageInfo[index].name;
|
|
9620
|
+
const attributeType = getAttributeValueType(attributeStorageInfo[index]);
|
|
9621
|
+
const loadOptions = { ...options, attributeName, attributeType };
|
|
9622
|
+
const promise = load(url, I3SAttributeLoader, loadOptions);
|
|
9623
|
+
attributeLoadPromises.push(promise);
|
|
9624
|
+
}
|
|
9625
|
+
try {
|
|
9626
|
+
attributes = await Promise.allSettled(attributeLoadPromises);
|
|
9627
|
+
} catch (error) {
|
|
9628
|
+
}
|
|
9629
|
+
if (!attributes.length) {
|
|
9630
|
+
return null;
|
|
9631
|
+
}
|
|
9632
|
+
return generateAttributesByFeatureId(attributes, attributeStorageInfo, featureId, tilesetFields);
|
|
9633
|
+
}
|
|
9634
|
+
function getAttributesData(tile) {
|
|
9635
|
+
const attributeStorageInfo = tile.tileset?.tileset?.attributeStorageInfo;
|
|
9636
|
+
const attributeUrls = tile.header?.attributeUrls;
|
|
9637
|
+
const tilesetFields = tile.tileset?.tileset?.fields || [];
|
|
9638
|
+
return { attributeStorageInfo, attributeUrls, tilesetFields };
|
|
9639
|
+
}
|
|
9640
|
+
function getAttributeValueType(attribute) {
|
|
9641
|
+
if (attribute.hasOwnProperty("objectIds")) {
|
|
9642
|
+
return "Oid32";
|
|
9643
|
+
} else if (attribute.hasOwnProperty("attributeValues")) {
|
|
9644
|
+
return attribute.attributeValues.valueType;
|
|
9645
|
+
}
|
|
9646
|
+
return "";
|
|
9647
|
+
}
|
|
9648
|
+
function getFeatureIdsAttributeName(attributeStorageInfo) {
|
|
9649
|
+
const objectIdsAttribute = attributeStorageInfo.find((attribute) => attribute.name.includes("OBJECTID"));
|
|
9650
|
+
return objectIdsAttribute?.name;
|
|
9651
|
+
}
|
|
9652
|
+
function generateAttributesByFeatureId(attributes, attributeStorageInfo, featureId, tilesetFields) {
|
|
9653
|
+
const objectIdsAttributeName = getFeatureIdsAttributeName(attributeStorageInfo);
|
|
9654
|
+
const objectIds = attributes.find((attribute) => attribute.value[objectIdsAttributeName]);
|
|
9655
|
+
if (!objectIds) {
|
|
9656
|
+
return null;
|
|
9657
|
+
}
|
|
9658
|
+
const attributeIndex = objectIds.value[objectIdsAttributeName].indexOf(featureId);
|
|
9659
|
+
if (attributeIndex < 0) {
|
|
9660
|
+
return null;
|
|
9661
|
+
}
|
|
9662
|
+
return getFeatureAttributesByIndex(attributes, attributeIndex, attributeStorageInfo, tilesetFields);
|
|
9663
|
+
}
|
|
9664
|
+
function getFeatureAttributesByIndex(attributes, featureIdIndex, attributeStorageInfo, tilesetFields) {
|
|
9665
|
+
const attributesObject = {};
|
|
9666
|
+
for (let index = 0; index < attributeStorageInfo.length; index++) {
|
|
9667
|
+
const attributeName = attributeStorageInfo[index].name;
|
|
9668
|
+
const codedValues = getAttributeCodedValues(attributeName, tilesetFields);
|
|
9669
|
+
const attribute = getAttributeByIndexAndAttributeName(attributes, index, attributeName);
|
|
9670
|
+
attributesObject[attributeName] = formatAttributeValue(attribute, featureIdIndex, codedValues);
|
|
9671
|
+
}
|
|
9672
|
+
return attributesObject;
|
|
9673
|
+
}
|
|
9674
|
+
function getAttributeCodedValues(attributeName, tilesetFields) {
|
|
9675
|
+
const attributeField = tilesetFields.find((field) => field.name === attributeName || field.alias === attributeName);
|
|
9676
|
+
return attributeField?.domain?.codedValues || [];
|
|
9677
|
+
}
|
|
9678
|
+
function getAttributeByIndexAndAttributeName(attributes, index, attributesName) {
|
|
9679
|
+
const attributeObject = attributes[index];
|
|
9680
|
+
if (attributeObject.status === REJECTED_STATUS) {
|
|
9681
|
+
return null;
|
|
9682
|
+
}
|
|
9683
|
+
return attributeObject.value[attributesName];
|
|
9684
|
+
}
|
|
9685
|
+
function formatAttributeValue(attribute, featureIdIndex, codedValues) {
|
|
9686
|
+
let value = EMPTY_VALUE;
|
|
9687
|
+
if (attribute && featureIdIndex in attribute) {
|
|
9688
|
+
value = String(attribute[featureIdIndex]).replace(/\u0000|NaN/g, "").trim();
|
|
9689
|
+
}
|
|
9690
|
+
if (codedValues.length) {
|
|
9691
|
+
const codeValue = codedValues.find((codedValue) => codedValue.code === Number(value));
|
|
9692
|
+
value = codeValue?.name || EMPTY_VALUE;
|
|
9693
|
+
}
|
|
9694
|
+
return value;
|
|
9695
|
+
}
|
|
9696
|
+
var VERSION9, EMPTY_VALUE, REJECTED_STATUS, I3SAttributeLoader;
|
|
9697
|
+
var init_i3s_attribute_loader = __esm({
|
|
9698
|
+
"src/i3s-attribute-loader.ts"() {
|
|
9699
|
+
init_src3();
|
|
9700
|
+
init_parse_i3s_attribute();
|
|
9701
|
+
init_url_utils();
|
|
9702
|
+
VERSION9 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
|
|
9703
|
+
EMPTY_VALUE = "";
|
|
9704
|
+
REJECTED_STATUS = "rejected";
|
|
9705
|
+
I3SAttributeLoader = {
|
|
9706
|
+
name: "I3S Attribute",
|
|
9707
|
+
id: "i3s-attribute",
|
|
9708
|
+
module: "i3s",
|
|
9709
|
+
version: VERSION9,
|
|
9710
|
+
mimeTypes: ["application/binary"],
|
|
9711
|
+
parse: parse3,
|
|
9712
|
+
extensions: ["bin"],
|
|
9713
|
+
options: {},
|
|
9714
|
+
binary: true
|
|
9715
|
+
};
|
|
9716
|
+
}
|
|
9717
|
+
});
|
|
9718
|
+
|
|
9719
|
+
// src/lib/utils/customizeColors.ts
|
|
9720
|
+
async function customizeColors(colors, featureIds, tileOptions, tilesetOptions, options) {
|
|
9721
|
+
if (!options?.i3s?.colorsByAttribute) {
|
|
9722
|
+
return colors;
|
|
9723
|
+
}
|
|
9724
|
+
const colorizeAttributeField = tilesetOptions.fields.find(({ name }) => name === options?.i3s?.colorsByAttribute?.attributeName);
|
|
9725
|
+
if (!colorizeAttributeField || !["esriFieldTypeDouble", "esriFieldTypeInteger", "esriFieldTypeSmallInteger"].includes(colorizeAttributeField.type)) {
|
|
9726
|
+
return colors;
|
|
9727
|
+
}
|
|
9728
|
+
const colorizeAttributeData = await loadFeatureAttributeData(colorizeAttributeField.name, tileOptions, tilesetOptions, options);
|
|
9729
|
+
if (!colorizeAttributeData) {
|
|
9730
|
+
return colors;
|
|
9731
|
+
}
|
|
9732
|
+
const objectIdField = tilesetOptions.fields.find(({ type }) => type === "esriFieldTypeOID");
|
|
9733
|
+
if (!objectIdField) {
|
|
9734
|
+
return colors;
|
|
9735
|
+
}
|
|
9736
|
+
const objectIdAttributeData = await loadFeatureAttributeData(objectIdField.name, tileOptions, tilesetOptions, options);
|
|
9737
|
+
if (!objectIdAttributeData) {
|
|
9738
|
+
return colors;
|
|
9739
|
+
}
|
|
9740
|
+
const attributeValuesMap = {};
|
|
9741
|
+
for (let i2 = 0; i2 < objectIdAttributeData[objectIdField.name].length; i2++) {
|
|
9742
|
+
attributeValuesMap[objectIdAttributeData[objectIdField.name][i2]] = calculateColorForAttribute(colorizeAttributeData[colorizeAttributeField.name][i2], options);
|
|
9743
|
+
}
|
|
9744
|
+
for (let i2 = 0; i2 < featureIds.value.length; i2++) {
|
|
9745
|
+
const color = attributeValuesMap[featureIds.value[i2]];
|
|
9746
|
+
if (!color) {
|
|
9747
|
+
continue;
|
|
9748
|
+
}
|
|
9749
|
+
colors.value.set(color, i2 * 4);
|
|
9750
|
+
}
|
|
9751
|
+
return colors;
|
|
9752
|
+
}
|
|
9753
|
+
function calculateColorForAttribute(attributeValue, options) {
|
|
9754
|
+
if (!options?.i3s?.colorsByAttribute) {
|
|
9755
|
+
return [255, 255, 255, 255];
|
|
9756
|
+
}
|
|
9757
|
+
const { minValue, maxValue, minColor, maxColor } = options.i3s.colorsByAttribute;
|
|
9758
|
+
const rate = (attributeValue - minValue) / (maxValue - minValue);
|
|
9759
|
+
const color = [255, 255, 255, 255];
|
|
9760
|
+
for (let i2 = 0; i2 < minColor.length; i2++) {
|
|
9761
|
+
color[i2] = Math.round((maxColor[i2] - minColor[i2]) * rate + minColor[i2]);
|
|
9762
|
+
}
|
|
9763
|
+
return color;
|
|
9764
|
+
}
|
|
9765
|
+
async function loadFeatureAttributeData(attributeName, { attributeUrls }, { attributeStorageInfo }, options) {
|
|
9766
|
+
const attributeIndex = attributeStorageInfo.findIndex(({ name }) => attributeName === name);
|
|
9767
|
+
if (attributeIndex === -1) {
|
|
9768
|
+
return null;
|
|
9769
|
+
}
|
|
9770
|
+
const objectIdAttributeUrl = getUrlWithToken(attributeUrls[attributeIndex], options?.i3s?.token);
|
|
9771
|
+
const attributeType = getAttributeValueType(attributeStorageInfo[attributeIndex]);
|
|
9772
|
+
const objectIdAttributeData = await load(objectIdAttributeUrl, I3SAttributeLoader, {
|
|
9773
|
+
attributeName,
|
|
9774
|
+
attributeType
|
|
9775
|
+
});
|
|
9776
|
+
return objectIdAttributeData;
|
|
9777
|
+
}
|
|
9778
|
+
var init_customizeColors = __esm({
|
|
9779
|
+
"src/lib/utils/customizeColors.ts"() {
|
|
9780
|
+
init_src3();
|
|
9781
|
+
init_i3s_attribute_loader();
|
|
9782
|
+
init_url_utils();
|
|
9783
|
+
}
|
|
9784
|
+
});
|
|
9785
|
+
|
|
9543
9786
|
// src/lib/parsers/parse-i3s-tile-content.ts
|
|
9544
9787
|
function getLoaderForTextureFormat(textureFormat) {
|
|
9545
9788
|
switch (textureFormat) {
|
|
@@ -9661,6 +9904,7 @@
|
|
|
9661
9904
|
content.modelMatrix = getModelMatrix(attributes.position);
|
|
9662
9905
|
content.coordinateSystem = COORDINATE_SYSTEM.LNGLAT_OFFSETS;
|
|
9663
9906
|
}
|
|
9907
|
+
attributes.color = await customizeColors(attributes.color, attributes.id, tileOptions, tilesetOptions, options);
|
|
9664
9908
|
content.attributes = {
|
|
9665
9909
|
positions: attributes.position,
|
|
9666
9910
|
normals: attributes.normal,
|
|
@@ -9923,13 +10167,14 @@
|
|
|
9923
10167
|
init_types();
|
|
9924
10168
|
init_url_utils();
|
|
9925
10169
|
init_constants2();
|
|
10170
|
+
init_customizeColors();
|
|
9926
10171
|
scratchVector5 = new Vector3([0, 0, 0]);
|
|
9927
10172
|
I3S_ATTRIBUTE_TYPE = "i3s-attribute-type";
|
|
9928
10173
|
}
|
|
9929
10174
|
});
|
|
9930
10175
|
|
|
9931
10176
|
// src/i3s-content-loader.ts
|
|
9932
|
-
async function
|
|
10177
|
+
async function parse4(data, options, context) {
|
|
9933
10178
|
const { tile, _tileOptions, tileset, _tilesetOptions } = options?.i3s || {};
|
|
9934
10179
|
const tileOptions = _tileOptions || tile;
|
|
9935
10180
|
const tilesetOptions = _tilesetOptions || tileset;
|
|
@@ -9938,20 +10183,20 @@
|
|
|
9938
10183
|
}
|
|
9939
10184
|
return await parseI3STileContent(data, tileOptions, tilesetOptions, options, context);
|
|
9940
10185
|
}
|
|
9941
|
-
var
|
|
10186
|
+
var VERSION10, I3SContentLoader;
|
|
9942
10187
|
var init_i3s_content_loader = __esm({
|
|
9943
10188
|
"src/i3s-content-loader.ts"() {
|
|
9944
10189
|
init_src();
|
|
9945
10190
|
init_parse_i3s_tile_content();
|
|
9946
|
-
|
|
10191
|
+
VERSION10 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "beta";
|
|
9947
10192
|
I3SContentLoader = {
|
|
9948
10193
|
name: "I3S Content (Indexed Scene Layers)",
|
|
9949
10194
|
id: isBrowser2 ? "i3s-content" : "i3s-content-nodejs",
|
|
9950
10195
|
module: "i3s",
|
|
9951
10196
|
worker: true,
|
|
9952
|
-
version:
|
|
10197
|
+
version: VERSION10,
|
|
9953
10198
|
mimeTypes: ["application/octet-stream"],
|
|
9954
|
-
parse:
|
|
10199
|
+
parse: parse4,
|
|
9955
10200
|
extensions: ["bin"],
|
|
9956
10201
|
options: {
|
|
9957
10202
|
"i3s-content": {}
|
|
@@ -10466,21 +10711,21 @@
|
|
|
10466
10711
|
async function parseNodePage(data) {
|
|
10467
10712
|
return JSON.parse(new TextDecoder().decode(data));
|
|
10468
10713
|
}
|
|
10469
|
-
async function
|
|
10714
|
+
async function parse5(data) {
|
|
10470
10715
|
data = parseNodePage(data);
|
|
10471
10716
|
return data;
|
|
10472
10717
|
}
|
|
10473
|
-
var
|
|
10718
|
+
var VERSION11, I3SNodePageLoader;
|
|
10474
10719
|
var init_i3s_node_page_loader = __esm({
|
|
10475
10720
|
"src/i3s-node-page-loader.ts"() {
|
|
10476
|
-
|
|
10721
|
+
VERSION11 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
|
|
10477
10722
|
I3SNodePageLoader = {
|
|
10478
10723
|
name: "I3S Node Page",
|
|
10479
10724
|
id: "i3s-node-page",
|
|
10480
10725
|
module: "i3s",
|
|
10481
|
-
version:
|
|
10726
|
+
version: VERSION11,
|
|
10482
10727
|
mimeTypes: ["application/json"],
|
|
10483
|
-
parse:
|
|
10728
|
+
parse: parse5,
|
|
10484
10729
|
extensions: ["json"],
|
|
10485
10730
|
options: {}
|
|
10486
10731
|
};
|
|
@@ -10799,14 +11044,14 @@
|
|
|
10799
11044
|
}
|
|
10800
11045
|
return null;
|
|
10801
11046
|
}
|
|
10802
|
-
var
|
|
11047
|
+
var VERSION12, TILESET_REGEX, TILE_HEADER_REGEX, SLPK_HEX, I3SLoader;
|
|
10803
11048
|
var init_i3s_loader = __esm({
|
|
10804
11049
|
"src/i3s-loader.ts"() {
|
|
10805
11050
|
init_src3();
|
|
10806
11051
|
init_i3s_content_loader();
|
|
10807
11052
|
init_parse_i3s();
|
|
10808
11053
|
init_constants2();
|
|
10809
|
-
|
|
11054
|
+
VERSION12 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
|
|
10810
11055
|
TILESET_REGEX = /layers\/[0-9]+$/;
|
|
10811
11056
|
TILE_HEADER_REGEX = /nodes\/([0-9-]+|root)$/;
|
|
10812
11057
|
SLPK_HEX = "504b0304";
|
|
@@ -10814,7 +11059,7 @@
|
|
|
10814
11059
|
name: "I3S (Indexed Scene Layers)",
|
|
10815
11060
|
id: "i3s",
|
|
10816
11061
|
module: "i3s",
|
|
10817
|
-
version:
|
|
11062
|
+
version: VERSION12,
|
|
10818
11063
|
mimeTypes: ["application/octet-stream"],
|
|
10819
11064
|
parse: parseI3S,
|
|
10820
11065
|
extensions: ["bin"],
|
|
@@ -10830,189 +11075,14 @@
|
|
|
10830
11075
|
useDracoGeometry: true,
|
|
10831
11076
|
useCompressedTextures: true,
|
|
10832
11077
|
decodeTextures: true,
|
|
10833
|
-
coordinateSystem: COORDINATE_SYSTEM.METER_OFFSETS
|
|
11078
|
+
coordinateSystem: COORDINATE_SYSTEM.METER_OFFSETS,
|
|
11079
|
+
colorsByAttribute: null
|
|
10834
11080
|
}
|
|
10835
11081
|
}
|
|
10836
11082
|
};
|
|
10837
11083
|
}
|
|
10838
11084
|
});
|
|
10839
11085
|
|
|
10840
|
-
// src/lib/parsers/parse-i3s-attribute.ts
|
|
10841
|
-
async function parseI3STileAttribute(arrayBuffer, options) {
|
|
10842
|
-
const { attributeName, attributeType } = options;
|
|
10843
|
-
if (!attributeName) {
|
|
10844
|
-
return {};
|
|
10845
|
-
}
|
|
10846
|
-
return {
|
|
10847
|
-
[attributeName]: attributeType ? parseAttribute(attributeType, arrayBuffer) : null
|
|
10848
|
-
};
|
|
10849
|
-
}
|
|
10850
|
-
function parseAttribute(attributeType, arrayBuffer) {
|
|
10851
|
-
switch (attributeType) {
|
|
10852
|
-
case STRING_ATTRIBUTE_TYPE:
|
|
10853
|
-
return parseStringsAttribute(arrayBuffer);
|
|
10854
|
-
case OBJECT_ID_ATTRIBUTE_TYPE:
|
|
10855
|
-
return parseShortNumberAttribute(arrayBuffer);
|
|
10856
|
-
case FLOAT_64_TYPE:
|
|
10857
|
-
return parseFloatAttribute(arrayBuffer);
|
|
10858
|
-
case INT_16_ATTRIBUTE_TYPE:
|
|
10859
|
-
return parseInt16ShortNumberAttribute(arrayBuffer);
|
|
10860
|
-
default:
|
|
10861
|
-
return parseShortNumberAttribute(arrayBuffer);
|
|
10862
|
-
}
|
|
10863
|
-
}
|
|
10864
|
-
function parseShortNumberAttribute(arrayBuffer) {
|
|
10865
|
-
const countOffset = 4;
|
|
10866
|
-
return new Uint32Array(arrayBuffer, countOffset);
|
|
10867
|
-
}
|
|
10868
|
-
function parseInt16ShortNumberAttribute(arrayBuffer) {
|
|
10869
|
-
const countOffset = 4;
|
|
10870
|
-
return new Int16Array(arrayBuffer, countOffset);
|
|
10871
|
-
}
|
|
10872
|
-
function parseFloatAttribute(arrayBuffer) {
|
|
10873
|
-
const countOffset = 8;
|
|
10874
|
-
return new Float64Array(arrayBuffer, countOffset);
|
|
10875
|
-
}
|
|
10876
|
-
function parseStringsAttribute(arrayBuffer) {
|
|
10877
|
-
const stringsCountOffset = 0;
|
|
10878
|
-
const dataOffset = 8;
|
|
10879
|
-
const bytesPerStringSize = 4;
|
|
10880
|
-
const stringsArray = [];
|
|
10881
|
-
try {
|
|
10882
|
-
const stringsCount = new DataView(arrayBuffer, stringsCountOffset, bytesPerStringSize).getUint32(stringsCountOffset, true);
|
|
10883
|
-
const stringSizes = new Uint32Array(arrayBuffer, dataOffset, stringsCount);
|
|
10884
|
-
let stringOffset = dataOffset + stringsCount * bytesPerStringSize;
|
|
10885
|
-
for (const stringByteSize of stringSizes) {
|
|
10886
|
-
const textDecoder = new TextDecoder("utf-8");
|
|
10887
|
-
const stringAttribute = new Uint8Array(arrayBuffer, stringOffset, stringByteSize);
|
|
10888
|
-
stringsArray.push(textDecoder.decode(stringAttribute));
|
|
10889
|
-
stringOffset += stringByteSize;
|
|
10890
|
-
}
|
|
10891
|
-
} catch (error) {
|
|
10892
|
-
console.error("Parse string attribute error: ", error.message);
|
|
10893
|
-
}
|
|
10894
|
-
return stringsArray;
|
|
10895
|
-
}
|
|
10896
|
-
var init_parse_i3s_attribute = __esm({
|
|
10897
|
-
"src/lib/parsers/parse-i3s-attribute.ts"() {
|
|
10898
|
-
init_constants2();
|
|
10899
|
-
}
|
|
10900
|
-
});
|
|
10901
|
-
|
|
10902
|
-
// src/i3s-attribute-loader.ts
|
|
10903
|
-
async function parse5(data, options) {
|
|
10904
|
-
data = parseI3STileAttribute(data, options);
|
|
10905
|
-
return data;
|
|
10906
|
-
}
|
|
10907
|
-
async function loadFeatureAttributes(tile, featureId, options = {}) {
|
|
10908
|
-
const { attributeStorageInfo, attributeUrls, tilesetFields } = getAttributesData(tile);
|
|
10909
|
-
if (!attributeStorageInfo || !attributeUrls || featureId < 0) {
|
|
10910
|
-
return null;
|
|
10911
|
-
}
|
|
10912
|
-
let attributes = [];
|
|
10913
|
-
const attributeLoadPromises = [];
|
|
10914
|
-
for (let index = 0; index < attributeStorageInfo.length; index++) {
|
|
10915
|
-
const url = getUrlWithToken(attributeUrls[index], options.i3s?.token);
|
|
10916
|
-
const attributeName = attributeStorageInfo[index].name;
|
|
10917
|
-
const attributeType = getAttributeValueType(attributeStorageInfo[index]);
|
|
10918
|
-
const loadOptions = { ...options, attributeName, attributeType };
|
|
10919
|
-
const promise = load(url, I3SAttributeLoader, loadOptions);
|
|
10920
|
-
attributeLoadPromises.push(promise);
|
|
10921
|
-
}
|
|
10922
|
-
try {
|
|
10923
|
-
attributes = await Promise.allSettled(attributeLoadPromises);
|
|
10924
|
-
} catch (error) {
|
|
10925
|
-
}
|
|
10926
|
-
if (!attributes.length) {
|
|
10927
|
-
return null;
|
|
10928
|
-
}
|
|
10929
|
-
return generateAttributesByFeatureId(attributes, attributeStorageInfo, featureId, tilesetFields);
|
|
10930
|
-
}
|
|
10931
|
-
function getAttributesData(tile) {
|
|
10932
|
-
const attributeStorageInfo = tile.tileset?.tileset?.attributeStorageInfo;
|
|
10933
|
-
const attributeUrls = tile.header?.attributeUrls;
|
|
10934
|
-
const tilesetFields = tile.tileset?.tileset?.fields || [];
|
|
10935
|
-
return { attributeStorageInfo, attributeUrls, tilesetFields };
|
|
10936
|
-
}
|
|
10937
|
-
function getAttributeValueType(attribute) {
|
|
10938
|
-
if (attribute.hasOwnProperty("objectIds")) {
|
|
10939
|
-
return "Oid32";
|
|
10940
|
-
} else if (attribute.hasOwnProperty("attributeValues")) {
|
|
10941
|
-
return attribute.attributeValues.valueType;
|
|
10942
|
-
}
|
|
10943
|
-
return "";
|
|
10944
|
-
}
|
|
10945
|
-
function getFeatureIdsAttributeName(attributeStorageInfo) {
|
|
10946
|
-
const objectIdsAttribute = attributeStorageInfo.find((attribute) => attribute.name.includes("OBJECTID"));
|
|
10947
|
-
return objectIdsAttribute?.name;
|
|
10948
|
-
}
|
|
10949
|
-
function generateAttributesByFeatureId(attributes, attributeStorageInfo, featureId, tilesetFields) {
|
|
10950
|
-
const objectIdsAttributeName = getFeatureIdsAttributeName(attributeStorageInfo);
|
|
10951
|
-
const objectIds = attributes.find((attribute) => attribute.value[objectIdsAttributeName]);
|
|
10952
|
-
if (!objectIds) {
|
|
10953
|
-
return null;
|
|
10954
|
-
}
|
|
10955
|
-
const attributeIndex = objectIds.value[objectIdsAttributeName].indexOf(featureId);
|
|
10956
|
-
if (attributeIndex < 0) {
|
|
10957
|
-
return null;
|
|
10958
|
-
}
|
|
10959
|
-
return getFeatureAttributesByIndex(attributes, attributeIndex, attributeStorageInfo, tilesetFields);
|
|
10960
|
-
}
|
|
10961
|
-
function getFeatureAttributesByIndex(attributes, featureIdIndex, attributeStorageInfo, tilesetFields) {
|
|
10962
|
-
const attributesObject = {};
|
|
10963
|
-
for (let index = 0; index < attributeStorageInfo.length; index++) {
|
|
10964
|
-
const attributeName = attributeStorageInfo[index].name;
|
|
10965
|
-
const codedValues = getAttributeCodedValues(attributeName, tilesetFields);
|
|
10966
|
-
const attribute = getAttributeByIndexAndAttributeName(attributes, index, attributeName);
|
|
10967
|
-
attributesObject[attributeName] = formatAttributeValue(attribute, featureIdIndex, codedValues);
|
|
10968
|
-
}
|
|
10969
|
-
return attributesObject;
|
|
10970
|
-
}
|
|
10971
|
-
function getAttributeCodedValues(attributeName, tilesetFields) {
|
|
10972
|
-
const attributeField = tilesetFields.find((field) => field.name === attributeName || field.alias === attributeName);
|
|
10973
|
-
return attributeField?.domain?.codedValues || [];
|
|
10974
|
-
}
|
|
10975
|
-
function getAttributeByIndexAndAttributeName(attributes, index, attributesName) {
|
|
10976
|
-
const attributeObject = attributes[index];
|
|
10977
|
-
if (attributeObject.status === REJECTED_STATUS) {
|
|
10978
|
-
return null;
|
|
10979
|
-
}
|
|
10980
|
-
return attributeObject.value[attributesName];
|
|
10981
|
-
}
|
|
10982
|
-
function formatAttributeValue(attribute, featureIdIndex, codedValues) {
|
|
10983
|
-
let value = EMPTY_VALUE;
|
|
10984
|
-
if (attribute && featureIdIndex in attribute) {
|
|
10985
|
-
value = String(attribute[featureIdIndex]).replace(/\u0000|NaN/g, "").trim();
|
|
10986
|
-
}
|
|
10987
|
-
if (codedValues.length) {
|
|
10988
|
-
const codeValue = codedValues.find((codedValue) => codedValue.code === Number(value));
|
|
10989
|
-
value = codeValue?.name || EMPTY_VALUE;
|
|
10990
|
-
}
|
|
10991
|
-
return value;
|
|
10992
|
-
}
|
|
10993
|
-
var VERSION12, EMPTY_VALUE, REJECTED_STATUS, I3SAttributeLoader;
|
|
10994
|
-
var init_i3s_attribute_loader = __esm({
|
|
10995
|
-
"src/i3s-attribute-loader.ts"() {
|
|
10996
|
-
init_src3();
|
|
10997
|
-
init_parse_i3s_attribute();
|
|
10998
|
-
init_url_utils();
|
|
10999
|
-
VERSION12 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
|
|
11000
|
-
EMPTY_VALUE = "";
|
|
11001
|
-
REJECTED_STATUS = "rejected";
|
|
11002
|
-
I3SAttributeLoader = {
|
|
11003
|
-
name: "I3S Attribute",
|
|
11004
|
-
id: "i3s-attribute",
|
|
11005
|
-
module: "i3s",
|
|
11006
|
-
version: VERSION12,
|
|
11007
|
-
mimeTypes: ["application/binary"],
|
|
11008
|
-
parse: parse5,
|
|
11009
|
-
extensions: ["bin"],
|
|
11010
|
-
options: {},
|
|
11011
|
-
binary: true
|
|
11012
|
-
};
|
|
11013
|
-
}
|
|
11014
|
-
});
|
|
11015
|
-
|
|
11016
11086
|
// src/lib/parsers/parse-i3s-building-scene-layer.ts
|
|
11017
11087
|
async function parseBuildingSceneLayer(data, url) {
|
|
11018
11088
|
const layer0 = JSON.parse(new TextDecoder().decode(data));
|
|
@@ -13,7 +13,7 @@ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/
|
|
|
13
13
|
|
|
14
14
|
var _parseArcgisWebscene = require("./lib/parsers/parse-arcgis-webscene");
|
|
15
15
|
|
|
16
|
-
var VERSION = typeof "3.3.0-alpha.
|
|
16
|
+
var VERSION = typeof "3.3.0-alpha.4" !== 'undefined' ? "3.3.0-alpha.4" : 'beta';
|
|
17
17
|
var ArcGisWebSceneLoader = {
|
|
18
18
|
name: 'ArcGIS Web Scene Loader',
|
|
19
19
|
id: 'arcgis-web-scene',
|
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
8
|
exports.loadFeatureAttributes = loadFeatureAttributes;
|
|
9
|
+
exports.getAttributeValueType = getAttributeValueType;
|
|
9
10
|
exports.I3SAttributeLoader = void 0;
|
|
10
11
|
|
|
11
12
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
@@ -24,7 +25,7 @@ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (O
|
|
|
24
25
|
|
|
25
26
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
26
27
|
|
|
27
|
-
var VERSION = typeof "3.3.0-alpha.
|
|
28
|
+
var VERSION = typeof "3.3.0-alpha.4" !== 'undefined' ? "3.3.0-alpha.4" : 'latest';
|
|
28
29
|
var EMPTY_VALUE = '';
|
|
29
30
|
var REJECTED_STATUS = 'rejected';
|
|
30
31
|
var I3SAttributeLoader = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/i3s-attribute-loader.ts"],"names":["VERSION","EMPTY_VALUE","REJECTED_STATUS","I3SAttributeLoader","name","id","module","version","mimeTypes","parse","extensions","options","binary","data","loadFeatureAttributes","tile","featureId","getAttributesData","attributeStorageInfo","attributeUrls","tilesetFields","attributes","attributeLoadPromises","index","length","url","i3s","token","attributeName","attributeType","getAttributeValueType","loadOptions","promise","push","Promise","allSettled","generateAttributesByFeatureId","tileset","header","fields","attribute","hasOwnProperty","attributeValues","valueType","getFeatureIdsAttributeName","objectIdsAttribute","find","includes","objectIdsAttributeName","objectIds","value","attributeIndex","indexOf","getFeatureAttributesByIndex","featureIdIndex","attributesObject","codedValues","getAttributeCodedValues","getAttributeByIndexAndAttributeName","formatAttributeValue","attributeField","field","alias","domain","attributesName","attributeObject","status","String","replace","trim","codeValue","codedValue","code","Number"],"mappings":"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","sourcesContent":["import type {LoaderWithParser} from '@loaders.gl/loader-utils';\nimport {load} from '@loaders.gl/core';\nimport {parseI3STileAttribute} from './lib/parsers/parse-i3s-attribute';\nimport {getUrlWithToken} 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';\nconst EMPTY_VALUE = '';\nconst REJECTED_STATUS = 'rejected';\n/**\n * Loader for I3S attributes\n */\nexport const I3SAttributeLoader: LoaderWithParser = {\n name: 'I3S Attribute',\n id: 'i3s-attribute',\n module: 'i3s',\n version: VERSION,\n mimeTypes: ['application/binary'],\n parse,\n extensions: ['bin'],\n options: {},\n binary: true\n};\n\nasync function parse(data, options) {\n data = parseI3STileAttribute(data, options);\n return data;\n}\n\n/**\n * Load attributes based on feature id\n * @param {Object} tile\n * @param {number} featureId\n * @param {Object} options\n * @returns {Promise}\n */\n// eslint-disable-next-line complexity\nexport async function loadFeatureAttributes(tile, featureId, options = {}) {\n const {attributeStorageInfo, attributeUrls, tilesetFields} = getAttributesData(tile);\n\n if (!attributeStorageInfo || !attributeUrls || featureId < 0) {\n return null;\n }\n\n let attributes: object[] = [];\n const attributeLoadPromises: Promise<object>[] = [];\n\n for (let index = 0; index < attributeStorageInfo.length; index++) {\n // @ts-ignore\n const url = getUrlWithToken(attributeUrls[index], options.i3s?.token);\n const attributeName = attributeStorageInfo[index].name;\n const attributeType = getAttributeValueType(attributeStorageInfo[index]);\n const loadOptions = {...options, attributeName, attributeType};\n const promise = load(url, I3SAttributeLoader, loadOptions);\n\n attributeLoadPromises.push(promise);\n }\n try {\n attributes = await Promise.allSettled(attributeLoadPromises);\n } catch (error) {\n // do nothing\n }\n\n if (!attributes.length) {\n return null;\n }\n\n return generateAttributesByFeatureId(attributes, attributeStorageInfo, featureId, tilesetFields);\n}\n\n/**\n * Gets attributes data from tile.\n * @param tile \n * @returns \n */\nfunction getAttributesData(tile) {\n const attributeStorageInfo = tile.tileset?.tileset?.attributeStorageInfo;\n const attributeUrls = tile.header?.attributeUrls;\n const tilesetFields = tile.tileset?.tileset?.fields || [];\n\n return {attributeStorageInfo, attributeUrls, tilesetFields};\n}\n\n/**\n * Get attribute value type based on property names\n * @param {Object} attribute\n * @returns {String}\n */\nfunction getAttributeValueType(attribute) {\n if (attribute.hasOwnProperty('objectIds')) {\n return 'Oid32';\n } else if (attribute.hasOwnProperty('attributeValues')) {\n return attribute.attributeValues.valueType;\n }\n return '';\n}\n\n/**\n * Find in attributeStorageInfo attribute name responsible for feature ids list.\n * @param attributeStorageInfo \n * @returns Feature ids attribute name\n */\nfunction getFeatureIdsAttributeName(attributeStorageInfo) {\n const objectIdsAttribute = attributeStorageInfo.find(attribute => attribute.name.includes('OBJECTID'));\n\n return objectIdsAttribute?.name;\n}\n\n/**\n * Generates mapping featureId to feature attributes\n * @param {Array} attributes\n * @param {Object} attributeStorageInfo\n * @param {number} featureId\n * @returns {Object}\n */\nfunction generateAttributesByFeatureId(attributes, attributeStorageInfo, featureId, tilesetFields) {\n const objectIdsAttributeName = getFeatureIdsAttributeName(attributeStorageInfo);\n const objectIds = attributes.find((attribute) => attribute.value[objectIdsAttributeName]);\n\n if (!objectIds) {\n return null;\n }\n\n const attributeIndex = objectIds.value[objectIdsAttributeName].indexOf(featureId);\n\n if (attributeIndex < 0) {\n return null;\n }\n\n return getFeatureAttributesByIndex(attributes, attributeIndex, attributeStorageInfo, tilesetFields);\n}\n\n/**\n * Generates attribute object for feature mapping by feature id\n * @param {Array} attributes\n * @param {Number} featureIdIndex\n * @param {Object} attributeStorageInfo\n * @returns {Object}\n */\nfunction getFeatureAttributesByIndex(attributes, featureIdIndex, attributeStorageInfo, tilesetFields) {\n const attributesObject = {};\n\n for (let index = 0; index < attributeStorageInfo.length; index++) {\n const attributeName = attributeStorageInfo[index].name;\n const codedValues = getAttributeCodedValues(attributeName, tilesetFields);\n const attribute = getAttributeByIndexAndAttributeName(attributes, index, attributeName);\n attributesObject[attributeName] = formatAttributeValue(attribute, featureIdIndex, codedValues);\n }\n\n return attributesObject;\n}\n\n/**\n * Get coded values list from tileset.\n * @param attributeName \n * @param tilesetFields \n */\nfunction getAttributeCodedValues(attributeName, tilesetFields) {\n const attributeField = tilesetFields\n .find(field => field.name === attributeName || field.alias === attributeName);\n\n return attributeField?.domain?.codedValues || [];\n}\n\n/**\n * Return attribute value if it presents in atrributes list\n * @param {array} attributes\n * @param {number} index\n * @param {string} attributesName\n */\nfunction getAttributeByIndexAndAttributeName(attributes, index, attributesName) {\n const attributeObject = attributes[index];\n\n if (attributeObject.status === REJECTED_STATUS) {\n return null;\n }\n\n return attributeObject.value[attributesName];\n}\n\n/**\n * Do formatting of attribute values or return empty string.\n * @param {Array} attribute\n * @param {Number} featureIdIndex\n * @returns {String}\n */\nfunction formatAttributeValue(attribute, featureIdIndex, codedValues) {\n let value = EMPTY_VALUE;\n\n if (attribute && (featureIdIndex in attribute)) {\n // eslint-disable-next-line no-control-regex\n value = String(attribute[featureIdIndex]).replace(/\\u0000|NaN/g, '').trim();\n }\n\n // Check if coded values are existed. If so we use them.\n if (codedValues.length) {\n const codeValue = codedValues.find(codedValue => codedValue.code === Number(value));\n value = codeValue?.name || EMPTY_VALUE;\n }\n\n return value;\n}\n"],"file":"i3s-attribute-loader.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/i3s-attribute-loader.ts"],"names":["VERSION","EMPTY_VALUE","REJECTED_STATUS","I3SAttributeLoader","name","id","module","version","mimeTypes","parse","extensions","options","binary","data","loadFeatureAttributes","tile","featureId","getAttributesData","attributeStorageInfo","attributeUrls","tilesetFields","attributes","attributeLoadPromises","index","length","url","i3s","token","attributeName","attributeType","getAttributeValueType","loadOptions","promise","push","Promise","allSettled","generateAttributesByFeatureId","tileset","header","fields","attribute","hasOwnProperty","attributeValues","valueType","getFeatureIdsAttributeName","objectIdsAttribute","find","includes","objectIdsAttributeName","objectIds","value","attributeIndex","indexOf","getFeatureAttributesByIndex","featureIdIndex","attributesObject","codedValues","getAttributeCodedValues","getAttributeByIndexAndAttributeName","formatAttributeValue","attributeField","field","alias","domain","attributesName","attributeObject","status","String","replace","trim","codeValue","codedValue","code","Number"],"mappings":"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","sourcesContent":["import type {LoaderWithParser} from '@loaders.gl/loader-utils';\nimport {load} from '@loaders.gl/core';\nimport {parseI3STileAttribute} from './lib/parsers/parse-i3s-attribute';\nimport {getUrlWithToken} 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';\nconst EMPTY_VALUE = '';\nconst REJECTED_STATUS = 'rejected';\n/**\n * Loader for I3S attributes\n */\nexport const I3SAttributeLoader: LoaderWithParser = {\n name: 'I3S Attribute',\n id: 'i3s-attribute',\n module: 'i3s',\n version: VERSION,\n mimeTypes: ['application/binary'],\n parse,\n extensions: ['bin'],\n options: {},\n binary: true\n};\n\nasync function parse(data, options) {\n data = parseI3STileAttribute(data, options);\n return data;\n}\n\n/**\n * Load attributes based on feature id\n * @param {Object} tile\n * @param {number} featureId\n * @param {Object} options\n * @returns {Promise}\n */\n// eslint-disable-next-line complexity\nexport async function loadFeatureAttributes(tile, featureId, options = {}) {\n const {attributeStorageInfo, attributeUrls, tilesetFields} = getAttributesData(tile);\n\n if (!attributeStorageInfo || !attributeUrls || featureId < 0) {\n return null;\n }\n\n let attributes: object[] = [];\n const attributeLoadPromises: Promise<object>[] = [];\n\n for (let index = 0; index < attributeStorageInfo.length; index++) {\n // @ts-ignore\n const url = getUrlWithToken(attributeUrls[index], options.i3s?.token);\n const attributeName = attributeStorageInfo[index].name;\n const attributeType = getAttributeValueType(attributeStorageInfo[index]);\n const loadOptions = {...options, attributeName, attributeType};\n const promise = load(url, I3SAttributeLoader, loadOptions);\n\n attributeLoadPromises.push(promise);\n }\n try {\n attributes = await Promise.allSettled(attributeLoadPromises);\n } catch (error) {\n // do nothing\n }\n\n if (!attributes.length) {\n return null;\n }\n\n return generateAttributesByFeatureId(attributes, attributeStorageInfo, featureId, tilesetFields);\n}\n\n/**\n * Gets attributes data from tile.\n * @param tile \n * @returns \n */\nfunction getAttributesData(tile) {\n const attributeStorageInfo = tile.tileset?.tileset?.attributeStorageInfo;\n const attributeUrls = tile.header?.attributeUrls;\n const tilesetFields = tile.tileset?.tileset?.fields || [];\n\n return {attributeStorageInfo, attributeUrls, tilesetFields};\n}\n\n/**\n * Get attribute value type based on property names\n * @param {Object} attribute\n * @returns {String}\n */\nexport function getAttributeValueType(attribute) {\n if (attribute.hasOwnProperty('objectIds')) {\n return 'Oid32';\n } else if (attribute.hasOwnProperty('attributeValues')) {\n return attribute.attributeValues.valueType;\n }\n return '';\n}\n\n/**\n * Find in attributeStorageInfo attribute name responsible for feature ids list.\n * @param attributeStorageInfo \n * @returns Feature ids attribute name\n */\nfunction getFeatureIdsAttributeName(attributeStorageInfo) {\n const objectIdsAttribute = attributeStorageInfo.find(attribute => attribute.name.includes('OBJECTID'));\n\n return objectIdsAttribute?.name;\n}\n\n/**\n * Generates mapping featureId to feature attributes\n * @param {Array} attributes\n * @param {Object} attributeStorageInfo\n * @param {number} featureId\n * @returns {Object}\n */\nfunction generateAttributesByFeatureId(attributes, attributeStorageInfo, featureId, tilesetFields) {\n const objectIdsAttributeName = getFeatureIdsAttributeName(attributeStorageInfo);\n const objectIds = attributes.find((attribute) => attribute.value[objectIdsAttributeName]);\n\n if (!objectIds) {\n return null;\n }\n\n const attributeIndex = objectIds.value[objectIdsAttributeName].indexOf(featureId);\n\n if (attributeIndex < 0) {\n return null;\n }\n\n return getFeatureAttributesByIndex(attributes, attributeIndex, attributeStorageInfo, tilesetFields);\n}\n\n/**\n * Generates attribute object for feature mapping by feature id\n * @param {Array} attributes\n * @param {Number} featureIdIndex\n * @param {Object} attributeStorageInfo\n * @returns {Object}\n */\nfunction getFeatureAttributesByIndex(attributes, featureIdIndex, attributeStorageInfo, tilesetFields) {\n const attributesObject = {};\n\n for (let index = 0; index < attributeStorageInfo.length; index++) {\n const attributeName = attributeStorageInfo[index].name;\n const codedValues = getAttributeCodedValues(attributeName, tilesetFields);\n const attribute = getAttributeByIndexAndAttributeName(attributes, index, attributeName);\n attributesObject[attributeName] = formatAttributeValue(attribute, featureIdIndex, codedValues);\n }\n\n return attributesObject;\n}\n\n/**\n * Get coded values list from tileset.\n * @param attributeName \n * @param tilesetFields \n */\nfunction getAttributeCodedValues(attributeName, tilesetFields) {\n const attributeField = tilesetFields\n .find(field => field.name === attributeName || field.alias === attributeName);\n\n return attributeField?.domain?.codedValues || [];\n}\n\n/**\n * Return attribute value if it presents in atrributes list\n * @param {array} attributes\n * @param {number} index\n * @param {string} attributesName\n */\nfunction getAttributeByIndexAndAttributeName(attributes, index, attributesName) {\n const attributeObject = attributes[index];\n\n if (attributeObject.status === REJECTED_STATUS) {\n return null;\n }\n\n return attributeObject.value[attributesName];\n}\n\n/**\n * Do formatting of attribute values or return empty string.\n * @param {Array} attribute\n * @param {Number} featureIdIndex\n * @returns {String}\n */\nfunction formatAttributeValue(attribute, featureIdIndex, codedValues) {\n let value = EMPTY_VALUE;\n\n if (attribute && (featureIdIndex in attribute)) {\n // eslint-disable-next-line no-control-regex\n value = String(attribute[featureIdIndex]).replace(/\\u0000|NaN/g, '').trim();\n }\n\n // Check if coded values are existed. If so we use them.\n if (codedValues.length) {\n const codeValue = codedValues.find(codedValue => codedValue.code === Number(value));\n value = codeValue?.name || EMPTY_VALUE;\n }\n\n return value;\n}\n"],"file":"i3s-attribute-loader.js"}
|
|
@@ -13,7 +13,7 @@ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/
|
|
|
13
13
|
|
|
14
14
|
var _parseI3sBuildingSceneLayer = require("./lib/parsers/parse-i3s-building-scene-layer");
|
|
15
15
|
|
|
16
|
-
var VERSION = typeof "3.3.0-alpha.
|
|
16
|
+
var VERSION = typeof "3.3.0-alpha.4" !== 'undefined' ? "3.3.0-alpha.4" : 'beta';
|
|
17
17
|
var I3SBuildingSceneLayerLoader = {
|
|
18
18
|
name: 'I3S Building Scene Layer',
|
|
19
19
|
id: 'i3s-building-scene-layer',
|
|
@@ -15,7 +15,7 @@ var _workerUtils = require("@loaders.gl/worker-utils");
|
|
|
15
15
|
|
|
16
16
|
var _parseI3sTileContent = require("./lib/parsers/parse-i3s-tile-content");
|
|
17
17
|
|
|
18
|
-
var VERSION = typeof "3.3.0-alpha.
|
|
18
|
+
var VERSION = typeof "3.3.0-alpha.4" !== 'undefined' ? "3.3.0-alpha.4" : 'beta';
|
|
19
19
|
var I3SContentLoader = {
|
|
20
20
|
name: 'I3S Content (Indexed Scene Layers)',
|
|
21
21
|
id: _workerUtils.isBrowser ? 'i3s-content' : 'i3s-content-nodejs',
|
package/dist/es5/i3s-loader.js
CHANGED
|
@@ -21,7 +21,7 @@ var _parseI3s = require("./lib/parsers/parse-i3s");
|
|
|
21
21
|
|
|
22
22
|
var _constants = require("./lib/parsers/constants");
|
|
23
23
|
|
|
24
|
-
var VERSION = typeof "3.3.0-alpha.
|
|
24
|
+
var VERSION = typeof "3.3.0-alpha.4" !== 'undefined' ? "3.3.0-alpha.4" : 'latest';
|
|
25
25
|
var TILESET_REGEX = /layers\/[0-9]+$/;
|
|
26
26
|
var TILE_HEADER_REGEX = /nodes\/([0-9-]+|root)$/;
|
|
27
27
|
var SLPK_HEX = '504b0304';
|
|
@@ -45,7 +45,8 @@ var I3SLoader = {
|
|
|
45
45
|
useDracoGeometry: true,
|
|
46
46
|
useCompressedTextures: true,
|
|
47
47
|
decodeTextures: true,
|
|
48
|
-
coordinateSystem: _constants.COORDINATE_SYSTEM.METER_OFFSETS
|
|
48
|
+
coordinateSystem: _constants.COORDINATE_SYSTEM.METER_OFFSETS,
|
|
49
|
+
colorsByAttribute: null
|
|
49
50
|
}
|
|
50
51
|
}
|
|
51
52
|
};
|