@loaders.gl/tile-converter 3.3.0-alpha.1 → 3.3.0-alpha.2

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.
Files changed (67) hide show
  1. package/dist/3d-tiles-attributes-worker.js +3 -3
  2. package/dist/3d-tiles-attributes-worker.js.map +1 -1
  3. package/dist/converter.min.js +10 -10
  4. package/dist/dist.min.js +791 -554
  5. package/dist/es5/3d-tiles-attributes-worker.js +1 -1
  6. package/dist/es5/i3s-attributes-worker.js +1 -1
  7. package/dist/es5/i3s-converter/helpers/batch-ids-extensions.js +15 -4
  8. package/dist/es5/i3s-converter/helpers/batch-ids-extensions.js.map +1 -1
  9. package/dist/es5/i3s-converter/helpers/feature-attributes.js +60 -0
  10. package/dist/es5/i3s-converter/helpers/feature-attributes.js.map +1 -0
  11. package/dist/es5/i3s-converter/helpers/geometry-attributes.js +39 -7
  12. package/dist/es5/i3s-converter/helpers/geometry-attributes.js.map +1 -1
  13. package/dist/es5/i3s-converter/helpers/geometry-converter.js +161 -49
  14. package/dist/es5/i3s-converter/helpers/geometry-converter.js.map +1 -1
  15. package/dist/es5/i3s-converter/helpers/node-pages.js +102 -46
  16. package/dist/es5/i3s-converter/helpers/node-pages.js.map +1 -1
  17. package/dist/es5/i3s-converter/i3s-converter.js +235 -141
  18. package/dist/es5/i3s-converter/i3s-converter.js.map +1 -1
  19. package/dist/es5/lib/utils/write-queue.js +66 -28
  20. package/dist/es5/lib/utils/write-queue.js.map +1 -1
  21. package/dist/es5/pgm-loader.js +1 -1
  22. package/dist/esm/3d-tiles-attributes-worker.js +1 -1
  23. package/dist/esm/i3s-attributes-worker.js +1 -1
  24. package/dist/esm/i3s-converter/helpers/batch-ids-extensions.js +15 -4
  25. package/dist/esm/i3s-converter/helpers/batch-ids-extensions.js.map +1 -1
  26. package/dist/esm/i3s-converter/helpers/feature-attributes.js +34 -0
  27. package/dist/esm/i3s-converter/helpers/feature-attributes.js.map +1 -0
  28. package/dist/esm/i3s-converter/helpers/geometry-attributes.js +23 -7
  29. package/dist/esm/i3s-converter/helpers/geometry-attributes.js.map +1 -1
  30. package/dist/esm/i3s-converter/helpers/geometry-converter.js +132 -30
  31. package/dist/esm/i3s-converter/helpers/geometry-converter.js.map +1 -1
  32. package/dist/esm/i3s-converter/helpers/node-pages.js +3 -3
  33. package/dist/esm/i3s-converter/helpers/node-pages.js.map +1 -1
  34. package/dist/esm/i3s-converter/i3s-converter.js +32 -42
  35. package/dist/esm/i3s-converter/i3s-converter.js.map +1 -1
  36. package/dist/esm/lib/utils/write-queue.js +10 -0
  37. package/dist/esm/lib/utils/write-queue.js.map +1 -1
  38. package/dist/esm/pgm-loader.js +1 -1
  39. package/dist/i3s-attributes-worker.js +3 -3
  40. package/dist/i3s-attributes-worker.js.map +2 -2
  41. package/dist/i3s-converter/helpers/batch-ids-extensions.d.ts.map +1 -1
  42. package/dist/i3s-converter/helpers/batch-ids-extensions.js +12 -1
  43. package/dist/i3s-converter/helpers/feature-attributes.d.ts +24 -0
  44. package/dist/i3s-converter/helpers/feature-attributes.d.ts.map +1 -0
  45. package/dist/i3s-converter/helpers/feature-attributes.js +55 -0
  46. package/dist/i3s-converter/helpers/geometry-attributes.js +26 -7
  47. package/dist/i3s-converter/helpers/geometry-converter.d.ts +9 -2
  48. package/dist/i3s-converter/helpers/geometry-converter.d.ts.map +1 -1
  49. package/dist/i3s-converter/helpers/geometry-converter.js +124 -33
  50. package/dist/i3s-converter/helpers/node-pages.js +3 -3
  51. package/dist/i3s-converter/i3s-converter.d.ts +7 -14
  52. package/dist/i3s-converter/i3s-converter.d.ts.map +1 -1
  53. package/dist/i3s-converter/i3s-converter.js +56 -50
  54. package/dist/i3s-converter/types.d.ts +0 -48
  55. package/dist/i3s-converter/types.d.ts.map +1 -1
  56. package/dist/lib/utils/write-queue.d.ts +1 -0
  57. package/dist/lib/utils/write-queue.d.ts.map +1 -1
  58. package/dist/lib/utils/write-queue.js +13 -0
  59. package/package.json +15 -15
  60. package/src/i3s-converter/helpers/batch-ids-extensions.ts +22 -5
  61. package/src/i3s-converter/helpers/feature-attributes.ts +65 -0
  62. package/src/i3s-converter/helpers/geometry-attributes.ts +30 -7
  63. package/src/i3s-converter/helpers/geometry-converter.ts +161 -37
  64. package/src/i3s-converter/helpers/node-pages.ts +3 -3
  65. package/src/i3s-converter/i3s-converter.ts +41 -51
  66. package/src/i3s-converter/types.ts +0 -51
  67. package/src/lib/utils/write-queue.ts +12 -0
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.default = convertB3dmToI3sGeometry;
9
9
  exports.convertAttributes = convertAttributes;
10
+ exports.getPropertyTable = getPropertyTable;
10
11
 
11
12
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
12
13
 
@@ -34,6 +35,8 @@ var _gltfAttributes = require("./gltf-attributes");
34
35
 
35
36
  var _batchIdsExtensions = require("./batch-ids-extensions");
36
37
 
38
+ var _featureAttributes = require("./feature-attributes");
39
+
37
40
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
38
41
 
39
42
  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; }
@@ -54,14 +57,16 @@ var SHORT_INT_TYPE = 'Int32';
54
57
  var DOUBLE_TYPE = 'Float64';
55
58
  var OBJECT_ID_TYPE = 'Oid32';
56
59
  var BATCHED_ID_POSSIBLE_ATTRIBUTE_NAMES = ['CUSTOM_ATTRIBUTE_2', '_BATCHID', 'BATCHID'];
60
+ var EXT_FEATURE_METADATA = 'EXT_feature_metadata';
61
+ var EXT_MESH_FEATURES = 'EXT_mesh_features';
57
62
  var scratchVector = new _core.Vector3();
58
63
 
59
- function convertB3dmToI3sGeometry(_x, _x2, _x3, _x4, _x5, _x6, _x7, _x8) {
64
+ function convertB3dmToI3sGeometry(_x, _x2, _x3, _x4, _x5, _x6, _x7, _x8, _x9) {
60
65
  return _convertB3dmToI3sGeometry.apply(this, arguments);
61
66
  }
62
67
 
63
68
  function _convertB3dmToI3sGeometry() {
64
- _convertB3dmToI3sGeometry = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(tileContent, nodeId, featuresHashArray, attributeStorageInfo, draco, generateBoundingVolumes, geoidHeightModel, workerSource) {
69
+ _convertB3dmToI3sGeometry = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(tileContent, nodeId, propertyTable, featuresHashArray, attributeStorageInfo, draco, generateBoundingVolumes, geoidHeightModel, workerSource) {
65
70
  var _tileContent$gltf;
66
71
 
67
72
  var useCartesianPositions, materialAndTextureList, dataForAttributesConversion, convertedAttributesMap, result, nodesCounter, _ref3, _ref3$materials, materials, i, sourceMaterial, convertedAttributes, _materialAndTextureLi, material, texture;
@@ -139,6 +144,7 @@ function _convertB3dmToI3sGeometry() {
139
144
  tileContent: tileContent,
140
145
  nodeId: nodesCounter,
141
146
  featuresHashArray: featuresHashArray,
147
+ propertyTable: propertyTable,
142
148
  attributeStorageInfo: attributeStorageInfo,
143
149
  draco: draco,
144
150
  workerSource: workerSource
@@ -205,7 +211,7 @@ function _generateBoundingVolumesFromGeometry(convertedAttributesMap, geoidHeigh
205
211
  }
206
212
  }
207
213
 
208
- function _makeNodeResources(_x9) {
214
+ function _makeNodeResources(_x10) {
209
215
  return _makeNodeResources2.apply(this, arguments);
210
216
  }
211
217
 
@@ -213,13 +219,13 @@ function _makeNodeResources2() {
213
219
  _makeNodeResources2 = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee2(_ref) {
214
220
  var _tileContent$gltf2;
215
221
 
216
- var convertedAttributes, material, texture, tileContent, nodeId, featuresHashArray, attributeStorageInfo, draco, workerSource, boundingVolumes, vertexCount, _generateAttributes, faceRange, featureIds, positions, normals, colors, texCoords, featureCount, header, typedFeatureIds, fileBuffer, compressedGeometry, attributes;
222
+ var convertedAttributes, material, texture, tileContent, nodeId, featuresHashArray, propertyTable, attributeStorageInfo, draco, workerSource, boundingVolumes, vertexCount, _generateAttributes, faceRange, featureIds, positions, normals, colors, texCoords, featureCount, header, typedFeatureIds, fileBuffer, compressedGeometry, attributes;
217
223
 
218
224
  return _regenerator.default.wrap(function _callee2$(_context2) {
219
225
  while (1) {
220
226
  switch (_context2.prev = _context2.next) {
221
227
  case 0:
222
- convertedAttributes = _ref.convertedAttributes, material = _ref.material, texture = _ref.texture, tileContent = _ref.tileContent, nodeId = _ref.nodeId, featuresHashArray = _ref.featuresHashArray, attributeStorageInfo = _ref.attributeStorageInfo, draco = _ref.draco, workerSource = _ref.workerSource;
228
+ convertedAttributes = _ref.convertedAttributes, material = _ref.material, texture = _ref.texture, tileContent = _ref.tileContent, nodeId = _ref.nodeId, featuresHashArray = _ref.featuresHashArray, propertyTable = _ref.propertyTable, attributeStorageInfo = _ref.attributeStorageInfo, draco = _ref.draco, workerSource = _ref.workerSource;
223
229
  boundingVolumes = convertedAttributes.boundingVolumes;
224
230
  vertexCount = convertedAttributes.positions.length / VALUES_PER_VERTEX;
225
231
  _generateAttributes = (0, _geometryAttributes.generateAttributes)(convertedAttributes), faceRange = _generateAttributes.faceRange, featureIds = _generateAttributes.featureIds, positions = _generateAttributes.positions, normals = _generateAttributes.normals, colors = _generateAttributes.colors, texCoords = _generateAttributes.texCoords, featureCount = _generateAttributes.featureCount;
@@ -240,7 +246,12 @@ function _makeNodeResources2() {
240
246
  featureIds: featureIds,
241
247
  faceRange: faceRange
242
248
  }, workerSource.draco) : null;
243
- attributes = convertBatchTableToAttributeBuffers(tileContent.batchTableJson, featureIds, attributeStorageInfo);
249
+ attributes = [];
250
+
251
+ if (attributeStorageInfo && propertyTable) {
252
+ attributes = convertPropertyTableToAttributeBuffers(featureIds, propertyTable, attributeStorageInfo);
253
+ }
254
+
244
255
  return _context2.abrupt("return", {
245
256
  geometry: fileBuffer,
246
257
  compressedGeometry: compressedGeometry,
@@ -253,7 +264,7 @@ function _makeNodeResources2() {
253
264
  boundingVolumes: boundingVolumes
254
265
  });
255
266
 
256
- case 12:
267
+ case 13:
257
268
  case "end":
258
269
  return _context2.stop();
259
270
  }
@@ -263,13 +274,13 @@ function _makeNodeResources2() {
263
274
  return _makeNodeResources2.apply(this, arguments);
264
275
  }
265
276
 
266
- function convertAttributes(_x10, _x11) {
277
+ function convertAttributes(_x11, _x12) {
267
278
  return _convertAttributes.apply(this, arguments);
268
279
  }
269
280
 
270
281
  function _convertAttributes() {
271
282
  _convertAttributes = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee3(attributesData, useCartesianPositions) {
272
- var gltfMaterials, nodes, cartographicOrigin, cartesianModelMatrix, attributesMap, _iterator6, _step6, material, _iterator7, _step7, attrKey, attributes;
283
+ var gltfMaterials, nodes, cartographicOrigin, cartesianModelMatrix, attributesMap, _iterator7, _step7, material, _iterator8, _step8, attrKey, attributes;
273
284
 
274
285
  return _regenerator.default.wrap(function _callee3$(_context3) {
275
286
  while (1) {
@@ -277,13 +288,13 @@ function _convertAttributes() {
277
288
  case 0:
278
289
  gltfMaterials = attributesData.gltfMaterials, nodes = attributesData.nodes, cartographicOrigin = attributesData.cartographicOrigin, cartesianModelMatrix = attributesData.cartesianModelMatrix;
279
290
  attributesMap = new Map();
280
- _iterator6 = _createForOfIteratorHelper(gltfMaterials || [{
291
+ _iterator7 = _createForOfIteratorHelper(gltfMaterials || [{
281
292
  id: 'default'
282
293
  }]);
283
294
 
284
295
  try {
285
- for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
286
- material = _step6.value;
296
+ for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
297
+ material = _step7.value;
287
298
  attributesMap.set(material.id, {
288
299
  positions: new Float32Array(0),
289
300
  normals: new Float32Array(0),
@@ -295,24 +306,24 @@ function _convertAttributes() {
295
306
  });
296
307
  }
297
308
  } catch (err) {
298
- _iterator6.e(err);
309
+ _iterator7.e(err);
299
310
  } finally {
300
- _iterator6.f();
311
+ _iterator7.f();
301
312
  }
302
313
 
303
314
  convertNodes(nodes, cartographicOrigin, cartesianModelMatrix, attributesMap, useCartesianPositions);
304
- _iterator7 = _createForOfIteratorHelper(attributesMap.keys());
315
+ _iterator8 = _createForOfIteratorHelper(attributesMap.keys());
305
316
  _context3.prev = 6;
306
317
 
307
- _iterator7.s();
318
+ _iterator8.s();
308
319
 
309
320
  case 8:
310
- if ((_step7 = _iterator7.n()).done) {
321
+ if ((_step8 = _iterator8.n()).done) {
311
322
  _context3.next = 19;
312
323
  break;
313
324
  }
314
325
 
315
- attrKey = _step7.value;
326
+ attrKey = _step8.value;
316
327
  attributes = attributesMap.get(attrKey);
317
328
 
318
329
  if (attributes) {
@@ -351,12 +362,12 @@ function _convertAttributes() {
351
362
  _context3.prev = 21;
352
363
  _context3.t0 = _context3["catch"](6);
353
364
 
354
- _iterator7.e(_context3.t0);
365
+ _iterator8.e(_context3.t0);
355
366
 
356
367
  case 24:
357
368
  _context3.prev = 24;
358
369
 
359
- _iterator7.f();
370
+ _iterator8.f();
360
371
 
361
372
  return _context3.finish(24);
362
373
 
@@ -875,43 +886,47 @@ function replaceIndicesByUnique(indicesArray, featureMap) {
875
886
  }
876
887
  }
877
888
 
878
- function convertBatchTableToAttributeBuffers(batchTable, featureIds, attributeStorageInfo) {
889
+ function convertPropertyTableToAttributeBuffers(featureIds, propertyTable, attributeStorageInfo) {
879
890
  var attributeBuffers = [];
891
+ var needFlattenPropertyTable = (0, _featureAttributes.checkPropertiesLength)(featureIds, propertyTable);
892
+ var properties = needFlattenPropertyTable ? (0, _featureAttributes.flattenPropertyTableByFeatureIds)(featureIds, propertyTable) : propertyTable;
893
+
894
+ var propertyTableWithObjectIds = _objectSpread({
895
+ OBJECTID: featureIds
896
+ }, properties);
897
+
898
+ for (var propertyName in propertyTableWithObjectIds) {
899
+ var type = getAttributeType(propertyName, attributeStorageInfo);
900
+ var value = propertyTableWithObjectIds[propertyName];
901
+ var attributeBuffer = generateAttributeBuffer(type, value);
902
+ attributeBuffers.push(attributeBuffer);
903
+ }
880
904
 
881
- if (batchTable) {
882
- var batchTableWithFeatureIds = _objectSpread({
883
- OBJECTID: featureIds
884
- }, batchTable);
885
-
886
- for (var _key2 in batchTableWithFeatureIds) {
887
- var type = getAttributeType(_key2, attributeStorageInfo);
888
- var attributeBuffer = null;
905
+ return attributeBuffers;
906
+ }
889
907
 
890
- switch (type) {
891
- case OBJECT_ID_TYPE:
892
- case SHORT_INT_TYPE:
893
- attributeBuffer = generateShortIntegerAttributeBuffer(batchTableWithFeatureIds[_key2]);
894
- break;
908
+ function generateAttributeBuffer(type, value) {
909
+ var attributeBuffer;
895
910
 
896
- case DOUBLE_TYPE:
897
- attributeBuffer = generateDoubleAttributeBuffer(batchTableWithFeatureIds[_key2]);
898
- break;
911
+ switch (type) {
912
+ case OBJECT_ID_TYPE:
913
+ case SHORT_INT_TYPE:
914
+ attributeBuffer = generateShortIntegerAttributeBuffer(value);
915
+ break;
899
916
 
900
- case STRING_TYPE:
901
- attributeBuffer = generateStringAttributeBuffer(batchTableWithFeatureIds[_key2]);
902
- break;
917
+ case DOUBLE_TYPE:
918
+ attributeBuffer = generateDoubleAttributeBuffer(value);
919
+ break;
903
920
 
904
- default:
905
- attributeBuffer = generateStringAttributeBuffer(batchTableWithFeatureIds[_key2]);
906
- }
921
+ case STRING_TYPE:
922
+ attributeBuffer = generateStringAttributeBuffer(value);
923
+ break;
907
924
 
908
- if (attributeBuffer) {
909
- attributeBuffers.push(attributeBuffer);
910
- }
911
- }
925
+ default:
926
+ attributeBuffer = generateStringAttributeBuffer(value);
912
927
  }
913
928
 
914
- return attributeBuffers;
929
+ return attributeBuffer;
915
930
  }
916
931
 
917
932
  function getAttributeType(key, attributeStorageInfo) {
@@ -963,7 +978,7 @@ function generateBigUint64Array(featureIds) {
963
978
  return typedFeatureIds;
964
979
  }
965
980
 
966
- function generateCompressedGeometry(_x12, _x13, _x14, _x15) {
981
+ function generateCompressedGeometry(_x13, _x14, _x15, _x16) {
967
982
  return _generateCompressedGeometry.apply(this, arguments);
968
983
  }
969
984
 
@@ -1037,4 +1052,101 @@ function generateFeatureIndexAttribute(featureIndex, faceRange) {
1037
1052
 
1038
1053
  return orderedFeatureIndices;
1039
1054
  }
1055
+
1056
+ function getPropertyTable(sourceTile) {
1057
+ var _sourceTile$content;
1058
+
1059
+ var batchTableJson = sourceTile === null || sourceTile === void 0 ? void 0 : (_sourceTile$content = sourceTile.content) === null || _sourceTile$content === void 0 ? void 0 : _sourceTile$content.batchTableJson;
1060
+
1061
+ if (batchTableJson) {
1062
+ return batchTableJson;
1063
+ }
1064
+
1065
+ var _getPropertyTableExte = getPropertyTableExtension(sourceTile),
1066
+ extensionName = _getPropertyTableExte.extensionName,
1067
+ extension = _getPropertyTableExte.extension;
1068
+
1069
+ switch (extensionName) {
1070
+ case EXT_MESH_FEATURES:
1071
+ {
1072
+ console.warn('The I3S converter does not yet support the EXT_mesh_features extension');
1073
+ return null;
1074
+ }
1075
+
1076
+ case EXT_FEATURE_METADATA:
1077
+ {
1078
+ return getPropertyTableFromExtFeatureMetadata(extension);
1079
+ }
1080
+
1081
+ default:
1082
+ return null;
1083
+ }
1084
+ }
1085
+
1086
+ function getPropertyTableExtension(sourceTile) {
1087
+ var _sourceTile$content2, _sourceTile$content2$, _sourceTile$content3, _sourceTile$content3$, _sourceTile$content3$2, _sourceTile$content4, _sourceTile$content4$;
1088
+
1089
+ var extensionsWithPropertyTables = [EXT_FEATURE_METADATA, EXT_MESH_FEATURES];
1090
+ var extensionsUsed = sourceTile === null || sourceTile === void 0 ? void 0 : (_sourceTile$content2 = sourceTile.content) === null || _sourceTile$content2 === void 0 ? void 0 : (_sourceTile$content2$ = _sourceTile$content2.gltf) === null || _sourceTile$content2$ === void 0 ? void 0 : _sourceTile$content2$.extensionsUsed;
1091
+
1092
+ if (!extensionsUsed) {
1093
+ return {
1094
+ extensionName: null,
1095
+ extension: null
1096
+ };
1097
+ }
1098
+
1099
+ var extensionName = '';
1100
+
1101
+ var _iterator6 = _createForOfIteratorHelper(sourceTile === null || sourceTile === void 0 ? void 0 : (_sourceTile$content4 = sourceTile.content) === null || _sourceTile$content4 === void 0 ? void 0 : (_sourceTile$content4$ = _sourceTile$content4.gltf) === null || _sourceTile$content4$ === void 0 ? void 0 : _sourceTile$content4$.extensionsUsed),
1102
+ _step6;
1103
+
1104
+ try {
1105
+ for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
1106
+ var extensionItem = _step6.value;
1107
+
1108
+ if (extensionsWithPropertyTables.includes(extensionItem)) {
1109
+ extensionName = extensionItem;
1110
+ break;
1111
+ }
1112
+ }
1113
+ } catch (err) {
1114
+ _iterator6.e(err);
1115
+ } finally {
1116
+ _iterator6.f();
1117
+ }
1118
+
1119
+ var extension = sourceTile === null || sourceTile === void 0 ? void 0 : (_sourceTile$content3 = sourceTile.content) === null || _sourceTile$content3 === void 0 ? void 0 : (_sourceTile$content3$ = _sourceTile$content3.gltf) === null || _sourceTile$content3$ === void 0 ? void 0 : (_sourceTile$content3$2 = _sourceTile$content3$.extensions) === null || _sourceTile$content3$2 === void 0 ? void 0 : _sourceTile$content3$2[extensionName];
1120
+ return {
1121
+ extensionName: extensionName,
1122
+ extension: extension
1123
+ };
1124
+ }
1125
+
1126
+ function getPropertyTableFromExtFeatureMetadata(extension) {
1127
+ if (extension !== null && extension !== void 0 && extension.featureTextures) {
1128
+ console.warn('The I3S converter does not yet support the EXT_feature_metadata feature textures');
1129
+ return null;
1130
+ }
1131
+
1132
+ if (extension !== null && extension !== void 0 && extension.featureTables) {
1133
+ var _Object$keys;
1134
+
1135
+ var firstFeatureTableName = (_Object$keys = Object.keys(extension.featureTables)) === null || _Object$keys === void 0 ? void 0 : _Object$keys[0];
1136
+
1137
+ if (firstFeatureTableName) {
1138
+ var featureTable = extension === null || extension === void 0 ? void 0 : extension.featureTables[firstFeatureTableName];
1139
+ var propertyTable = {};
1140
+
1141
+ for (var propertyName in featureTable.properties) {
1142
+ propertyTable[propertyName] = featureTable.properties[propertyName].data;
1143
+ }
1144
+
1145
+ return propertyTable;
1146
+ }
1147
+ }
1148
+
1149
+ console.warn("The I3S converter couldn't handle EXT_feature_metadata extension");
1150
+ return null;
1151
+ }
1040
1152
  //# sourceMappingURL=geometry-converter.js.map