@loaders.gl/i3s 3.1.4 → 3.1.8
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 +869 -202
- package/dist/es5/i3s-attribute-loader.js +2 -2
- 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 +1 -1
- package/dist/es5/i3s-node-page-loader.js +1 -1
- package/dist/es5/lib/parsers/parse-i3s.js +4 -4
- package/dist/es5/lib/parsers/parse-i3s.js.map +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 +1 -1
- package/dist/esm/i3s-node-page-loader.js +1 -1
- package/dist/esm/lib/parsers/parse-i3s.js +2 -2
- package/dist/esm/lib/parsers/parse-i3s.js.map +1 -1
- package/dist/i3s-attribute-loader.js +1 -1
- package/dist/i3s-content-worker.js +617 -44
- package/dist/lib/parsers/parse-i3s.d.ts.map +1 -1
- package/dist/lib/parsers/parse-i3s.js +5 -1
- package/package.json +9 -9
- package/src/i3s-attribute-loader.ts +1 -1
- package/src/lib/parsers/parse-i3s.ts +4 -1
|
@@ -24,7 +24,7 @@ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (O
|
|
|
24
24
|
|
|
25
25
|
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
26
|
|
|
27
|
-
var VERSION = typeof "3.1.
|
|
27
|
+
var VERSION = typeof "3.1.8" !== 'undefined' ? "3.1.8" : 'latest';
|
|
28
28
|
var EMPTY_VALUE = '';
|
|
29
29
|
var REJECTED_STATUS = 'rejected';
|
|
30
30
|
var I3SAttributeLoader = {
|
|
@@ -92,7 +92,7 @@ function _loadFeatureAttributes() {
|
|
|
92
92
|
options = _args2.length > 2 && _args2[2] !== undefined ? _args2[2] : {};
|
|
93
93
|
_getAttributesData = getAttributesData(tile), attributeStorageInfo = _getAttributesData.attributeStorageInfo, attributeUrls = _getAttributesData.attributeUrls, tilesetFields = _getAttributesData.tilesetFields;
|
|
94
94
|
|
|
95
|
-
if (!(!attributeStorageInfo || !attributeUrls ||
|
|
95
|
+
if (!(!attributeStorageInfo || !attributeUrls || featureId < 0)) {
|
|
96
96
|
_context2.next = 4;
|
|
97
97
|
break;
|
|
98
98
|
}
|
|
@@ -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) {\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":";;;;;;;;;;;;;;;;AACA;;AACA;;AACA;;;;;;AAIA,IAAMA,OAAO,GAAG,mBAAuB,WAAvB,aAAmD,QAAnE;AACA,IAAMC,WAAW,GAAG,EAApB;AACA,IAAMC,eAAe,GAAG,UAAxB;AAIO,IAAMC,kBAAoC,GAAG;AAClDC,EAAAA,IAAI,EAAE,eAD4C;AAElDC,EAAAA,EAAE,EAAE,eAF8C;AAGlDC,EAAAA,MAAM,EAAE,KAH0C;AAIlDC,EAAAA,OAAO,EAAEP,OAJyC;AAKlDQ,EAAAA,SAAS,EAAE,CAAC,oBAAD,CALuC;AAMlDC,EAAAA,KAAK,EAALA,KANkD;AAOlDC,EAAAA,UAAU,EAAE,CAAC,KAAD,CAPsC;AAQlDC,EAAAA,OAAO,EAAE,EARyC;AASlDC,EAAAA,MAAM,EAAE;AAT0C,CAA7C;;;SAYQH,K;;;;;qEAAf,iBAAqBI,IAArB,EAA2BF,OAA3B;AAAA;AAAA;AAAA;AAAA;AACEE,YAAAA,IAAI,GAAG,8CAAsBA,IAAtB,EAA4BF,OAA5B,CAAP;AADF,6CAESE,IAFT;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,G;;;;SAasBC,qB;;;;;qFAAf,kBAAqCC,IAArC,EAA2CC,SAA3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAsDL,YAAAA,OAAtD,8DAAgE,EAAhE;AAAA,iCACwDM,iBAAiB,CAACF,IAAD,CADzE,EACEG,oBADF,sBACEA,oBADF,EACwBC,aADxB,sBACwBA,aADxB,EACuCC,aADvC,sBACuCA,aADvC;;AAAA,kBAGD,CAACF,oBAAD,IAAyB,CAACC,aAA1B,IAA2CH,SAAS,GAAG,CAHtD;AAAA;AAAA;AAAA;;AAAA,8CAII,IAJJ;;AAAA;AAODK,YAAAA,UAPC,GAOsB,EAPtB;AAQCC,YAAAA,qBARD,GAQ4C,EAR5C;;AAUL,iBAASC,KAAT,GAAiB,CAAjB,EAAoBA,KAAK,GAAGL,oBAAoB,CAACM,MAAjD,EAAyDD,KAAK,EAA9D,EAAkE;AAE1DE,cAAAA,GAF0D,GAEpD,+BAAgBN,aAAa,CAACI,KAAD,CAA7B,kBAAsCZ,OAAO,CAACe,GAA9C,iDAAsC,aAAaC,KAAnD,CAFoD;AAG1DC,cAAAA,aAH0D,GAG1CV,oBAAoB,CAACK,KAAD,CAApB,CAA4BnB,IAHc;AAI1DyB,cAAAA,aAJ0D,GAI1CC,qBAAqB,CAACZ,oBAAoB,CAACK,KAAD,CAArB,CAJqB;AAK1DQ,cAAAA,WAL0D,mCAKxCpB,OALwC;AAK/BiB,gBAAAA,aAAa,EAAbA,aAL+B;AAKhBC,gBAAAA,aAAa,EAAbA;AALgB;AAM1DG,cAAAA,OAN0D,GAMhD,gBAAKP,GAAL,EAAUtB,kBAAV,EAA8B4B,WAA9B,CANgD;AAQhET,cAAAA,qBAAqB,CAACW,IAAtB,CAA2BD,OAA3B;AACD;;AAnBI;AAAA;AAAA,mBAqBgBE,OAAO,CAACC,UAAR,CAAmBb,qBAAnB,CArBhB;;AAAA;AAqBHD,YAAAA,UArBG;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA,gBA0BAA,UAAU,CAACG,MA1BX;AAAA;AAAA;AAAA;;AAAA,8CA2BI,IA3BJ;;AAAA;AAAA,8CA8BEY,6BAA6B,CAACf,UAAD,EAAaH,oBAAb,EAAmCF,SAAnC,EAA8CI,aAA9C,CA9B/B;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,G;;;;AAsCP,SAASH,iBAAT,CAA2BF,IAA3B,EAAiC;AAAA;;AAC/B,MAAMG,oBAAoB,oBAAGH,IAAI,CAACsB,OAAR,2EAAG,cAAcA,OAAjB,0DAAG,sBAAuBnB,oBAApD;AACA,MAAMC,aAAa,mBAAGJ,IAAI,CAACuB,MAAR,iDAAG,aAAanB,aAAnC;AACA,MAAMC,aAAa,GAAG,mBAAAL,IAAI,CAACsB,OAAL,2FAAcA,OAAd,gFAAuBE,MAAvB,KAAiC,EAAvD;AAEA,SAAO;AAACrB,IAAAA,oBAAoB,EAApBA,oBAAD;AAAuBC,IAAAA,aAAa,EAAbA,aAAvB;AAAsCC,IAAAA,aAAa,EAAbA;AAAtC,GAAP;AACD;;AAOD,SAASU,qBAAT,CAA+BU,SAA/B,EAA0C;AACxC,MAAIA,SAAS,CAACC,cAAV,CAAyB,WAAzB,CAAJ,EAA2C;AACzC,WAAO,OAAP;AACD,GAFD,MAEO,IAAID,SAAS,CAACC,cAAV,CAAyB,iBAAzB,CAAJ,EAAiD;AACtD,WAAOD,SAAS,CAACE,eAAV,CAA0BC,SAAjC;AACD;;AACD,SAAO,EAAP;AACD;;AAOD,SAASC,0BAAT,CAAoC1B,oBAApC,EAA0D;AACxD,MAAM2B,kBAAkB,GAAG3B,oBAAoB,CAAC4B,IAArB,CAA0B,UAAAN,SAAS;AAAA,WAAIA,SAAS,CAACpC,IAAV,CAAe2C,QAAf,CAAwB,UAAxB,CAAJ;AAAA,GAAnC,CAA3B;AAEA,SAAOF,kBAAP,aAAOA,kBAAP,uBAAOA,kBAAkB,CAAEzC,IAA3B;AACD;;AASD,SAASgC,6BAAT,CAAuCf,UAAvC,EAAmDH,oBAAnD,EAAyEF,SAAzE,EAAoFI,aAApF,EAAmG;AACjG,MAAM4B,sBAAsB,GAAGJ,0BAA0B,CAAC1B,oBAAD,CAAzD;AACA,MAAM+B,SAAS,GAAG5B,UAAU,CAACyB,IAAX,CAAgB,UAACN,SAAD;AAAA,WAAeA,SAAS,CAACU,KAAV,CAAgBF,sBAAhB,CAAf;AAAA,GAAhB,CAAlB;;AAEA,MAAI,CAACC,SAAL,EAAgB;AACd,WAAO,IAAP;AACD;;AAED,MAAME,cAAc,GAAGF,SAAS,CAACC,KAAV,CAAgBF,sBAAhB,EAAwCI,OAAxC,CAAgDpC,SAAhD,CAAvB;;AAEA,MAAImC,cAAc,GAAG,CAArB,EAAwB;AACtB,WAAO,IAAP;AACD;;AAED,SAAOE,2BAA2B,CAAChC,UAAD,EAAa8B,cAAb,EAA6BjC,oBAA7B,EAAmDE,aAAnD,CAAlC;AACD;;AASD,SAASiC,2BAAT,CAAqChC,UAArC,EAAiDiC,cAAjD,EAAiEpC,oBAAjE,EAAuFE,aAAvF,EAAsG;AACpG,MAAMmC,gBAAgB,GAAG,EAAzB;;AAEA,OAAK,IAAIhC,KAAK,GAAG,CAAjB,EAAoBA,KAAK,GAAGL,oBAAoB,CAACM,MAAjD,EAAyDD,KAAK,EAA9D,EAAkE;AAChE,QAAMK,aAAa,GAAGV,oBAAoB,CAACK,KAAD,CAApB,CAA4BnB,IAAlD;AACA,QAAMoD,WAAW,GAAGC,uBAAuB,CAAC7B,aAAD,EAAgBR,aAAhB,CAA3C;AACA,QAAMoB,SAAS,GAAGkB,mCAAmC,CAACrC,UAAD,EAAaE,KAAb,EAAoBK,aAApB,CAArD;AACA2B,IAAAA,gBAAgB,CAAC3B,aAAD,CAAhB,GAAkC+B,oBAAoB,CAACnB,SAAD,EAAYc,cAAZ,EAA4BE,WAA5B,CAAtD;AACD;;AAED,SAAOD,gBAAP;AACD;;AAOD,SAASE,uBAAT,CAAiC7B,aAAjC,EAAgDR,aAAhD,EAA+D;AAAA;;AAC7D,MAAMwC,cAAc,GAAGxC,aAAa,CACjC0B,IADoB,CACf,UAAAe,KAAK;AAAA,WAAIA,KAAK,CAACzD,IAAN,KAAewB,aAAf,IAAgCiC,KAAK,CAACC,KAAN,KAAgBlC,aAApD;AAAA,GADU,CAAvB;AAGA,SAAO,CAAAgC,cAAc,SAAd,IAAAA,cAAc,WAAd,qCAAAA,cAAc,CAAEG,MAAhB,gFAAwBP,WAAxB,KAAuC,EAA9C;AACD;;AAQD,SAASE,mCAAT,CAA6CrC,UAA7C,EAAyDE,KAAzD,EAAgEyC,cAAhE,EAAgF;AAC9E,MAAMC,eAAe,GAAG5C,UAAU,CAACE,KAAD,CAAlC;;AAEA,MAAI0C,eAAe,CAACC,MAAhB,KAA2BhE,eAA/B,EAAgD;AAC9C,WAAO,IAAP;AACD;;AAED,SAAO+D,eAAe,CAACf,KAAhB,CAAsBc,cAAtB,CAAP;AACD;;AAQD,SAASL,oBAAT,CAA8BnB,SAA9B,EAAyCc,cAAzC,EAAyDE,WAAzD,EAAsE;AACpE,MAAIN,KAAK,GAAGjD,WAAZ;;AAEA,MAAIuC,SAAS,IAAKc,cAAc,IAAId,SAApC,EAAgD;AAE9CU,IAAAA,KAAK,GAAGiB,MAAM,CAAC3B,SAAS,CAACc,cAAD,CAAV,CAAN,CAAkCc,OAAlC,CAA0C,aAA1C,EAAyD,EAAzD,EAA6DC,IAA7D,EAAR;AACD;;AAGD,MAAIb,WAAW,CAAChC,MAAhB,EAAwB;AACtB,QAAM8C,SAAS,GAAGd,WAAW,CAACV,IAAZ,CAAiB,UAAAyB,UAAU;AAAA,aAAIA,UAAU,CAACC,IAAX,KAAoBC,MAAM,CAACvB,KAAD,CAA9B;AAAA,KAA3B,CAAlB;AACAA,IAAAA,KAAK,GAAG,CAAAoB,SAAS,SAAT,IAAAA,SAAS,WAAT,YAAAA,SAAS,CAAElE,IAAX,KAAmBH,WAA3B;AACD;;AAED,SAAOiD,KAAP;AACD","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"}
|
|
@@ -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.1.
|
|
16
|
+
var VERSION = typeof "3.1.8" !== 'undefined' ? "3.1.8" : 'latest';
|
|
17
17
|
var I3SBuildingSceneLayerLoader = {
|
|
18
18
|
name: 'I3S Building Scene Layer',
|
|
19
19
|
id: 'i3s-building-scene-layer',
|
|
@@ -13,7 +13,7 @@ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/
|
|
|
13
13
|
|
|
14
14
|
var _parseI3sTileContent = require("./lib/parsers/parse-i3s-tile-content");
|
|
15
15
|
|
|
16
|
-
var VERSION = typeof "3.1.
|
|
16
|
+
var VERSION = typeof "3.1.8" !== 'undefined' ? "3.1.8" : 'latest';
|
|
17
17
|
var I3SContentLoader = {
|
|
18
18
|
name: 'I3S Content (Indexed Scene Layers)',
|
|
19
19
|
id: 'i3s-content',
|
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.1.
|
|
24
|
+
var VERSION = typeof "3.1.8" !== 'undefined' ? "3.1.8" : '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';
|
|
@@ -11,7 +11,7 @@ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"))
|
|
|
11
11
|
|
|
12
12
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
13
13
|
|
|
14
|
-
var VERSION = typeof "3.1.
|
|
14
|
+
var VERSION = typeof "3.1.8" !== 'undefined' ? "3.1.8" : 'latest';
|
|
15
15
|
|
|
16
16
|
function parseNodePage(_x) {
|
|
17
17
|
return _parseNodePage.apply(this, arguments);
|
|
@@ -126,13 +126,13 @@ function _normalizeTilesetData() {
|
|
|
126
126
|
case 8:
|
|
127
127
|
rootNodeUrl = (0, _urlUtils.getUrlWithToken)("".concat(tileset.url, "/nodes/root"), (_options$i3s = options.i3s) === null || _options$i3s === void 0 ? void 0 : _options$i3s.token);
|
|
128
128
|
_context.next = 11;
|
|
129
|
-
return (0, _core.load)(rootNodeUrl, tileset.loader, {
|
|
130
|
-
i3s: {
|
|
129
|
+
return (0, _core.load)(rootNodeUrl, tileset.loader, _objectSpread(_objectSpread({}, options), {}, {
|
|
130
|
+
i3s: _objectSpread(_objectSpread({}, options.i3s), {}, {
|
|
131
131
|
loadContent: false,
|
|
132
132
|
isTileHeader: true,
|
|
133
133
|
isTileset: false
|
|
134
|
-
}
|
|
135
|
-
});
|
|
134
|
+
})
|
|
135
|
+
}));
|
|
136
136
|
|
|
137
137
|
case 11:
|
|
138
138
|
tileset.root = _context.sent;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/lib/parsers/parse-i3s.ts"],"names":["normalizeTileData","tile","options","context","url","contentUrl","geometryData","href","textureUrl","textureData","attributeUrls","attributeData","normalizeTileNonUrlData","isDracoGeometry","boundingVolume","mbs","sphere","Ellipsoid","WGS84","cartographicToCartesian","slice","obb","box","center","halfSize","quaternion","OrientedBoundingBox","fromCenterHalfSizeQuaternion","boundingSphere","getBoundingSphere","radius","lodMetricType","lodSelection","metricType","lodMetricValue","maxError","transformMatrix","transform","type","TILE_TYPE","MESH","refine","TILE_REFINEMENT","REPLACE","normalizeTilesetData","tileset","nodePages","nodePagesTile","I3SNodePagesTiles","formTileFromNodePages","root","rootNodeUrl","i3s","token","loader","loadContent","isTileHeader","isTileset","basePath","TILESET_TYPE","I3S"],"mappings":"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
|
|
1
|
+
{"version":3,"sources":["../../../../src/lib/parsers/parse-i3s.ts"],"names":["normalizeTileData","tile","options","context","url","contentUrl","geometryData","href","textureUrl","textureData","attributeUrls","attributeData","normalizeTileNonUrlData","isDracoGeometry","boundingVolume","mbs","sphere","Ellipsoid","WGS84","cartographicToCartesian","slice","obb","box","center","halfSize","quaternion","OrientedBoundingBox","fromCenterHalfSizeQuaternion","boundingSphere","getBoundingSphere","radius","lodMetricType","lodSelection","metricType","lodMetricValue","maxError","transformMatrix","transform","type","TILE_TYPE","MESH","refine","TILE_REFINEMENT","REPLACE","normalizeTilesetData","tileset","nodePages","nodePagesTile","I3SNodePagesTiles","formTileFromNodePages","root","rootNodeUrl","i3s","token","loader","loadContent","isTileHeader","isTileset","basePath","TILESET_TYPE","I3S"],"mappings":"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","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} from '../../types';\nimport type {LoaderOptions, LoaderContext} from '@loaders.gl/loader-utils';\n\nexport function normalizeTileData(tile : Node3DIndexDocument, options : LoaderOptions, 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 return normalizeTileNonUrlData({\n ...tile,\n url,\n contentUrl,\n textureUrl,\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 transformMatrix = tile.transform;\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, transformMatrix, type, refine};\n}\n\nexport async function normalizeTilesetData(tileset : I3STilesetHeader, options : LoaderOptions, context: LoaderContext) {\n tileset.url = context.url;\n\n if (tileset.nodePages) {\n tileset.nodePagesTile = new I3SNodePagesTiles(tileset, options);\n tileset.root = await tileset.nodePagesTile.formTileFromNodePages(0);\n } else {\n const rootNodeUrl = getUrlWithToken(`${tileset.url}/nodes/root`, options.i3s?.token);\n // eslint-disable-next-line no-use-before-define\n tileset.root = await load(rootNodeUrl, tileset.loader, {\n ...options,\n i3s: {\n ...options.i3s,\n loadContent: false, isTileHeader: true, isTileset: false}\n });\n }\n\n // base path that non-absolute paths in tileset are relative to.\n tileset.basePath = tileset.url;\n tileset.type = TILESET_TYPE.I3S;\n\n // populate from root node\n tileset.lodMetricType = tileset.root.lodMetricType;\n tileset.lodMetricValue = tileset.root.lodMetricValue;\n}\n"],"file":"parse-i3s.js"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { load } from '@loaders.gl/core';
|
|
2
2
|
import { parseI3STileAttribute } from './lib/parsers/parse-i3s-attribute';
|
|
3
3
|
import { getUrlWithToken } from './lib/utils/url-utils';
|
|
4
|
-
const VERSION = typeof "3.1.
|
|
4
|
+
const VERSION = typeof "3.1.8" !== 'undefined' ? "3.1.8" : 'latest';
|
|
5
5
|
const EMPTY_VALUE = '';
|
|
6
6
|
const REJECTED_STATUS = 'rejected';
|
|
7
7
|
export const I3SAttributeLoader = {
|
|
@@ -28,7 +28,7 @@ export async function loadFeatureAttributes(tile, featureId, options = {}) {
|
|
|
28
28
|
tilesetFields
|
|
29
29
|
} = getAttributesData(tile);
|
|
30
30
|
|
|
31
|
-
if (!attributeStorageInfo || !attributeUrls ||
|
|
31
|
+
if (!attributeStorageInfo || !attributeUrls || featureId < 0) {
|
|
32
32
|
return null;
|
|
33
33
|
}
|
|
34
34
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/i3s-attribute-loader.ts"],"names":["load","parseI3STileAttribute","getUrlWithToken","VERSION","EMPTY_VALUE","REJECTED_STATUS","I3SAttributeLoader","name","id","module","version","mimeTypes","parse","extensions","options","binary","data","loadFeatureAttributes","tile","featureId","attributeStorageInfo","attributeUrls","tilesetFields","getAttributesData","attributes","attributeLoadPromises","index","length","url","i3s","token","attributeName","attributeType","getAttributeValueType","loadOptions","promise","push","Promise","allSettled","error","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) {\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":["load","parseI3STileAttribute","getUrlWithToken","VERSION","EMPTY_VALUE","REJECTED_STATUS","I3SAttributeLoader","name","id","module","version","mimeTypes","parse","extensions","options","binary","data","loadFeatureAttributes","tile","featureId","attributeStorageInfo","attributeUrls","tilesetFields","getAttributesData","attributes","attributeLoadPromises","index","length","url","i3s","token","attributeName","attributeType","getAttributeValueType","loadOptions","promise","push","Promise","allSettled","error","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,5 +1,5 @@
|
|
|
1
1
|
import { parseBuildingSceneLayer } from './lib/parsers/parse-i3s-building-scene-layer';
|
|
2
|
-
const VERSION = typeof "3.1.
|
|
2
|
+
const VERSION = typeof "3.1.8" !== 'undefined' ? "3.1.8" : 'latest';
|
|
3
3
|
export const I3SBuildingSceneLayerLoader = {
|
|
4
4
|
name: 'I3S Building Scene Layer',
|
|
5
5
|
id: 'i3s-building-scene-layer',
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { parseI3STileContent } from './lib/parsers/parse-i3s-tile-content';
|
|
2
|
-
const VERSION = typeof "3.1.
|
|
2
|
+
const VERSION = typeof "3.1.8" !== 'undefined' ? "3.1.8" : 'latest';
|
|
3
3
|
export const I3SContentLoader = {
|
|
4
4
|
name: 'I3S Content (Indexed Scene Layers)',
|
|
5
5
|
id: 'i3s-content',
|
package/dist/esm/i3s-loader.js
CHANGED
|
@@ -2,7 +2,7 @@ import { load, parse } from '@loaders.gl/core';
|
|
|
2
2
|
import { I3SContentLoader } from './i3s-content-loader';
|
|
3
3
|
import { normalizeTileData, normalizeTilesetData } from './lib/parsers/parse-i3s';
|
|
4
4
|
import { COORDINATE_SYSTEM } from './lib/parsers/constants';
|
|
5
|
-
const VERSION = typeof "3.1.
|
|
5
|
+
const VERSION = typeof "3.1.8" !== 'undefined' ? "3.1.8" : 'latest';
|
|
6
6
|
const TILESET_REGEX = /layers\/[0-9]+$/;
|
|
7
7
|
const TILE_HEADER_REGEX = /nodes\/([0-9-]+|root)$/;
|
|
8
8
|
const SLPK_HEX = '504b0304';
|
|
@@ -74,8 +74,8 @@ export async function normalizeTilesetData(tileset, options, context) {
|
|
|
74
74
|
var _options$i3s;
|
|
75
75
|
|
|
76
76
|
const rootNodeUrl = getUrlWithToken("".concat(tileset.url, "/nodes/root"), (_options$i3s = options.i3s) === null || _options$i3s === void 0 ? void 0 : _options$i3s.token);
|
|
77
|
-
tileset.root = await load(rootNodeUrl, tileset.loader, {
|
|
78
|
-
i3s: {
|
|
77
|
+
tileset.root = await load(rootNodeUrl, tileset.loader, { ...options,
|
|
78
|
+
i3s: { ...options.i3s,
|
|
79
79
|
loadContent: false,
|
|
80
80
|
isTileHeader: true,
|
|
81
81
|
isTileset: false
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/lib/parsers/parse-i3s.ts"],"names":["OrientedBoundingBox","Ellipsoid","load","TILE_TYPE","TILE_REFINEMENT","TILESET_TYPE","I3SNodePagesTiles","generateTileAttributeUrls","getUrlWithToken","normalizeTileData","tile","options","context","url","contentUrl","geometryData","href","textureUrl","textureData","attributeUrls","attributeData","normalizeTileNonUrlData","isDracoGeometry","boundingVolume","mbs","sphere","WGS84","cartographicToCartesian","slice","obb","box","center","halfSize","quaternion","fromCenterHalfSizeQuaternion","boundingSphere","getBoundingSphere","radius","lodMetricType","lodSelection","metricType","lodMetricValue","maxError","transformMatrix","transform","type","MESH","refine","REPLACE","normalizeTilesetData","tileset","nodePages","nodePagesTile","root","formTileFromNodePages","rootNodeUrl","i3s","token","loader","loadContent","isTileHeader","isTileset","basePath","I3S"],"mappings":"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
|
|
1
|
+
{"version":3,"sources":["../../../../src/lib/parsers/parse-i3s.ts"],"names":["OrientedBoundingBox","Ellipsoid","load","TILE_TYPE","TILE_REFINEMENT","TILESET_TYPE","I3SNodePagesTiles","generateTileAttributeUrls","getUrlWithToken","normalizeTileData","tile","options","context","url","contentUrl","geometryData","href","textureUrl","textureData","attributeUrls","attributeData","normalizeTileNonUrlData","isDracoGeometry","boundingVolume","mbs","sphere","WGS84","cartographicToCartesian","slice","obb","box","center","halfSize","quaternion","fromCenterHalfSizeQuaternion","boundingSphere","getBoundingSphere","radius","lodMetricType","lodSelection","metricType","lodMetricValue","maxError","transformMatrix","transform","type","MESH","refine","REPLACE","normalizeTilesetData","tileset","nodePages","nodePagesTile","root","formTileFromNodePages","rootNodeUrl","i3s","token","loader","loadContent","isTileHeader","isTileset","basePath","I3S"],"mappings":"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","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} from '../../types';\nimport type {LoaderOptions, LoaderContext} from '@loaders.gl/loader-utils';\n\nexport function normalizeTileData(tile : Node3DIndexDocument, options : LoaderOptions, 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 return normalizeTileNonUrlData({\n ...tile,\n url,\n contentUrl,\n textureUrl,\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 transformMatrix = tile.transform;\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, transformMatrix, type, refine};\n}\n\nexport async function normalizeTilesetData(tileset : I3STilesetHeader, options : LoaderOptions, context: LoaderContext) {\n tileset.url = context.url;\n\n if (tileset.nodePages) {\n tileset.nodePagesTile = new I3SNodePagesTiles(tileset, options);\n tileset.root = await tileset.nodePagesTile.formTileFromNodePages(0);\n } else {\n const rootNodeUrl = getUrlWithToken(`${tileset.url}/nodes/root`, options.i3s?.token);\n // eslint-disable-next-line no-use-before-define\n tileset.root = await load(rootNodeUrl, tileset.loader, {\n ...options,\n i3s: {\n ...options.i3s,\n loadContent: false, isTileHeader: true, isTileset: false}\n });\n }\n\n // base path that non-absolute paths in tileset are relative to.\n tileset.basePath = tileset.url;\n tileset.type = TILESET_TYPE.I3S;\n\n // populate from root node\n tileset.lodMetricType = tileset.root.lodMetricType;\n tileset.lodMetricValue = tileset.root.lodMetricValue;\n}\n"],"file":"parse-i3s.js"}
|
|
@@ -37,7 +37,7 @@ async function parse(data, options) {
|
|
|
37
37
|
// eslint-disable-next-line complexity
|
|
38
38
|
async function loadFeatureAttributes(tile, featureId, options = {}) {
|
|
39
39
|
const { attributeStorageInfo, attributeUrls, tilesetFields } = getAttributesData(tile);
|
|
40
|
-
if (!attributeStorageInfo || !attributeUrls ||
|
|
40
|
+
if (!attributeStorageInfo || !attributeUrls || featureId < 0) {
|
|
41
41
|
return null;
|
|
42
42
|
}
|
|
43
43
|
let attributes = [];
|