@loaders.gl/gis 3.1.0-beta.3 → 3.1.0

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/geojson-to-binary.ts"],"names":["geojsonToBinary","features","options","firstPassData","firstPass","secondPass","coordLength","numericPropKeys","PositionDataType","Float32Array","TEST_EXPORTS","pointPositionsCount","pointFeaturesCount","linePositionsCount","linePathsCount","lineFeaturesCount","polygonPositionsCount","polygonObjectsCount","polygonRingsCount","polygonFeaturesCount","coordLengths","Set","feature","geometry","type","add","coordinates","length","point","coord","line","flatten","polygon","Error","properties","key","val","undefined","isNumeric","size","Math","max","Object","keys","filter","k","GlobalFeatureIdsDataType","Uint32Array","Uint16Array","points","positions","globalFeatureIds","featureIds","numericProps","Array","fields","lines","pathIndices","polygons","polygonIndices","primitivePolygonIndices","object","propName","indexMap","pointPosition","pointFeature","linePosition","linePath","lineFeature","polygonPosition","polygonObject","polygonRing","polygonFeature","handlePoint","push","keepStringProperties","handleMultiPoint","handleLineString","handleMultiLineString","handlePolygon","handleMultiPolygon","makeAccessorObjects","coords","set","fillNumericProperties","fillCoords","nPositions","fill","ring","returnObj","value","geomType","numericProp","index","numericPropName","numericKeys","props","includes","array","startVertex","arrays","concat","x","Number","isFinite"],"mappings":"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","sourcesContent":["import {Feature, GeoJsonProperties} from '@loaders.gl/schema';\nimport type {BinaryFeatures} from '@loaders.gl/schema';\n\nexport type GeojsonToBinaryOptions = {\n coordLength?: number;\n numericPropKeys?: string[];\n PositionDataType?: Function;\n};\n\n/** Convert GeoJSON features to flat binary arrays */\nexport function geojsonToBinary(\n features: Feature[],\n options: GeojsonToBinaryOptions = {}\n): BinaryFeatures {\n const firstPassData = firstPass(features);\n return secondPass(features, firstPassData, {\n coordLength: options.coordLength || firstPassData.coordLength,\n numericPropKeys: options.numericPropKeys || firstPassData.numericPropKeys,\n PositionDataType: options.PositionDataType || Float32Array\n });\n}\n\nexport const TEST_EXPORTS = {\n firstPass,\n secondPass\n};\n\ntype FirstPassData = {\n coordLength: number;\n numericPropKeys: string[];\n\n pointPositionsCount: number;\n pointFeaturesCount: number;\n linePositionsCount: number;\n linePathsCount: number;\n lineFeaturesCount: number;\n polygonPositionsCount: number;\n polygonObjectsCount: number;\n polygonRingsCount: number;\n polygonFeaturesCount: number;\n};\n\n/**\n * Initial scan over GeoJSON features\n * Counts number of coordinates of each geometry type and\n * keeps track of the max coordinate dimensions\n */\n// eslint-disable-next-line complexity, max-statements\nfunction firstPass(features: Feature[]): FirstPassData {\n // Counts the number of _positions_, so [x, y, z] counts as one\n let pointPositionsCount = 0;\n let pointFeaturesCount = 0;\n let linePositionsCount = 0;\n let linePathsCount = 0;\n let lineFeaturesCount = 0;\n let polygonPositionsCount = 0;\n let polygonObjectsCount = 0;\n let polygonRingsCount = 0;\n let polygonFeaturesCount = 0;\n const coordLengths = new Set<number>();\n const numericPropKeys = {};\n\n for (const feature of features) {\n const geometry = feature.geometry;\n switch (geometry.type) {\n case 'Point':\n pointFeaturesCount++;\n pointPositionsCount++;\n coordLengths.add(geometry.coordinates.length);\n break;\n case 'MultiPoint':\n pointFeaturesCount++;\n pointPositionsCount += geometry.coordinates.length;\n for (const point of geometry.coordinates) {\n coordLengths.add(point.length);\n }\n break;\n case 'LineString':\n lineFeaturesCount++;\n linePositionsCount += geometry.coordinates.length;\n linePathsCount++;\n\n for (const coord of geometry.coordinates) {\n coordLengths.add(coord.length);\n }\n break;\n case 'MultiLineString':\n lineFeaturesCount++;\n for (const line of geometry.coordinates) {\n linePositionsCount += line.length;\n linePathsCount++;\n\n // eslint-disable-next-line max-depth\n for (const coord of line) {\n coordLengths.add(coord.length);\n }\n }\n break;\n case 'Polygon':\n polygonFeaturesCount++;\n polygonObjectsCount++;\n polygonRingsCount += geometry.coordinates.length;\n polygonPositionsCount += flatten(geometry.coordinates).length;\n\n for (const coord of flatten(geometry.coordinates)) {\n coordLengths.add(coord.length);\n }\n break;\n case 'MultiPolygon':\n polygonFeaturesCount++;\n for (const polygon of geometry.coordinates) {\n polygonObjectsCount++;\n polygonRingsCount += polygon.length;\n polygonPositionsCount += flatten(polygon).length;\n\n // eslint-disable-next-line max-depth\n for (const coord of flatten(polygon)) {\n coordLengths.add(coord.length);\n }\n }\n break;\n default:\n throw new Error(`Unsupported geometry type: ${geometry.type}`);\n }\n\n if (feature.properties) {\n for (const key in feature.properties) {\n const val = feature.properties[key];\n\n // If property has not been seen before, or if property has been numeric\n // in all previous features, check if numeric in this feature\n // If not numeric, false is stored to prevent rechecking in the future\n numericPropKeys[key] =\n numericPropKeys[key] || numericPropKeys[key] === undefined\n ? isNumeric(val)\n : numericPropKeys[key];\n }\n }\n }\n\n return {\n coordLength: coordLengths.size > 0 ? Math.max(...coordLengths) : 2,\n\n pointPositionsCount,\n pointFeaturesCount,\n linePositionsCount,\n linePathsCount,\n lineFeaturesCount,\n polygonPositionsCount,\n polygonObjectsCount,\n polygonRingsCount,\n polygonFeaturesCount,\n\n // Array of keys whose values are always numeric\n numericPropKeys: Object.keys(numericPropKeys).filter((k) => numericPropKeys[k])\n };\n}\n\n/**\n * Second scan over GeoJSON features\n * Fills coordinates into pre-allocated typed arrays\n */\n// eslint-disable-next-line complexity\nfunction secondPass(\n features,\n firstPassData: FirstPassData,\n options: Required<GeojsonToBinaryOptions>\n) {\n const {\n pointPositionsCount,\n pointFeaturesCount,\n linePositionsCount,\n linePathsCount,\n lineFeaturesCount,\n polygonPositionsCount,\n polygonObjectsCount,\n polygonRingsCount,\n polygonFeaturesCount\n } = firstPassData;\n const {coordLength, numericPropKeys, PositionDataType = Float32Array} = options;\n const GlobalFeatureIdsDataType = features.length > 65535 ? Uint32Array : Uint16Array;\n const points = {\n // @ts-ignore Typescript doesn't like dynamic constructors\n positions: new PositionDataType(pointPositionsCount * coordLength),\n globalFeatureIds: new GlobalFeatureIdsDataType(pointPositionsCount),\n featureIds:\n pointFeaturesCount > 65535\n ? new Uint32Array(pointPositionsCount)\n : new Uint16Array(pointPositionsCount),\n numericProps: {},\n properties: Array<any>(),\n fields: Array<any>()\n };\n const lines = {\n // @ts-ignore Typescript doesn't like dynamic constructors\n positions: new PositionDataType(linePositionsCount * coordLength),\n pathIndices:\n linePositionsCount > 65535\n ? new Uint32Array(linePathsCount + 1)\n : new Uint16Array(linePathsCount + 1),\n globalFeatureIds: new GlobalFeatureIdsDataType(linePositionsCount),\n featureIds:\n lineFeaturesCount > 65535\n ? new Uint32Array(linePositionsCount)\n : new Uint16Array(linePositionsCount),\n numericProps: {},\n properties: Array<any>(),\n fields: Array<any>()\n };\n const polygons = {\n // @ts-ignore Typescript doesn't like dynamic constructors\n positions: new PositionDataType(polygonPositionsCount * coordLength),\n polygonIndices:\n polygonPositionsCount > 65535\n ? new Uint32Array(polygonObjectsCount + 1)\n : new Uint16Array(polygonObjectsCount + 1),\n primitivePolygonIndices:\n polygonPositionsCount > 65535\n ? new Uint32Array(polygonRingsCount + 1)\n : new Uint16Array(polygonRingsCount + 1),\n globalFeatureIds: new GlobalFeatureIdsDataType(polygonPositionsCount),\n featureIds:\n polygonFeaturesCount > 65535\n ? new Uint32Array(polygonPositionsCount)\n : new Uint16Array(polygonPositionsCount),\n numericProps: {},\n properties: Array<any>(),\n fields: Array<any>()\n };\n\n // Instantiate numeric properties arrays; one value per vertex\n for (const object of [points, lines, polygons]) {\n for (const propName of numericPropKeys || []) {\n // If property has been numeric in all previous features in which the property existed, check\n // if numeric in this feature\n object.numericProps[propName] = new Float32Array(object.positions.length / coordLength);\n }\n }\n\n // Set last element of path/polygon indices as positions length\n lines.pathIndices[linePathsCount] = linePositionsCount;\n polygons.polygonIndices[polygonObjectsCount] = polygonPositionsCount;\n polygons.primitivePolygonIndices[polygonRingsCount] = polygonPositionsCount;\n\n const indexMap = {\n pointPosition: 0,\n pointFeature: 0,\n linePosition: 0,\n linePath: 0,\n lineFeature: 0,\n polygonPosition: 0,\n polygonObject: 0,\n polygonRing: 0,\n polygonFeature: 0,\n feature: 0\n };\n\n for (const feature of features) {\n const geometry = feature.geometry;\n const properties: GeoJsonProperties = feature.properties || {};\n\n switch (geometry.type) {\n case 'Point':\n handlePoint(geometry.coordinates, points, indexMap, coordLength, properties);\n points.properties.push(keepStringProperties(properties, numericPropKeys));\n indexMap.pointFeature++;\n break;\n case 'MultiPoint':\n handleMultiPoint(geometry.coordinates, points, indexMap, coordLength, properties);\n points.properties.push(keepStringProperties(properties, numericPropKeys));\n indexMap.pointFeature++;\n break;\n case 'LineString':\n handleLineString(geometry.coordinates, lines, indexMap, coordLength, properties);\n lines.properties.push(keepStringProperties(properties, numericPropKeys));\n indexMap.lineFeature++;\n break;\n case 'MultiLineString':\n handleMultiLineString(geometry.coordinates, lines, indexMap, coordLength, properties);\n lines.properties.push(keepStringProperties(properties, numericPropKeys));\n indexMap.lineFeature++;\n break;\n case 'Polygon':\n handlePolygon(geometry.coordinates, polygons, indexMap, coordLength, properties);\n polygons.properties.push(keepStringProperties(properties, numericPropKeys));\n indexMap.polygonFeature++;\n break;\n case 'MultiPolygon':\n handleMultiPolygon(geometry.coordinates, polygons, indexMap, coordLength, properties);\n polygons.properties.push(keepStringProperties(properties, numericPropKeys));\n indexMap.polygonFeature++;\n break;\n default:\n throw new Error('Invalid geometry type');\n }\n\n indexMap.feature++;\n }\n\n // Wrap each array in an accessor object with value and size keys\n return makeAccessorObjects(points, lines, polygons, coordLength);\n}\n\n/** Fills Point coordinates into points object of arrays */\nfunction handlePoint(coords, points, indexMap, coordLength, properties) {\n points.positions.set(coords, indexMap.pointPosition * coordLength);\n points.globalFeatureIds[indexMap.pointPosition] = indexMap.feature;\n points.featureIds[indexMap.pointPosition] = indexMap.pointFeature;\n\n fillNumericProperties(points, properties, indexMap.pointPosition, 1);\n indexMap.pointPosition++;\n}\n\n/** Fills MultiPoint coordinates into points object of arrays */\nfunction handleMultiPoint(coords, points, indexMap, coordLength, properties) {\n for (const point of coords) {\n handlePoint(point, points, indexMap, coordLength, properties);\n }\n}\n\n/** Fills LineString coordinates into lines object of arrays */\nfunction handleLineString(coords, lines, indexMap, coordLength, properties) {\n lines.pathIndices[indexMap.linePath] = indexMap.linePosition;\n indexMap.linePath++;\n\n fillCoords(lines.positions, coords, indexMap.linePosition, coordLength);\n\n const nPositions = coords.length;\n fillNumericProperties(lines, properties, indexMap.linePosition, nPositions);\n\n lines.globalFeatureIds.set(\n new Uint32Array(nPositions).fill(indexMap.feature),\n indexMap.linePosition\n );\n lines.featureIds.set(\n new Uint32Array(nPositions).fill(indexMap.lineFeature),\n indexMap.linePosition\n );\n indexMap.linePosition += nPositions;\n}\n\n/** Fills MultiLineString coordinates into lines object of arrays */\nfunction handleMultiLineString(coords, lines, indexMap, coordLength, properties) {\n for (const line of coords) {\n handleLineString(line, lines, indexMap, coordLength, properties);\n }\n}\n\n/** Fills Polygon coordinates into polygons object of arrays */\nfunction handlePolygon(coords, polygons, indexMap, coordLength, properties) {\n polygons.polygonIndices[indexMap.polygonObject] = indexMap.polygonPosition;\n indexMap.polygonObject++;\n\n for (const ring of coords) {\n polygons.primitivePolygonIndices[indexMap.polygonRing] = indexMap.polygonPosition;\n indexMap.polygonRing++;\n\n fillCoords(polygons.positions, ring, indexMap.polygonPosition, coordLength);\n\n const nPositions = ring.length;\n fillNumericProperties(polygons, properties, indexMap.polygonPosition, nPositions);\n\n polygons.globalFeatureIds.set(\n new Uint32Array(nPositions).fill(indexMap.feature),\n indexMap.polygonPosition\n );\n polygons.featureIds.set(\n new Uint32Array(nPositions).fill(indexMap.polygonFeature),\n indexMap.polygonPosition\n );\n indexMap.polygonPosition += nPositions;\n }\n}\n\n/** Fills MultiPolygon coordinates into polygons object of arrays */\nfunction handleMultiPolygon(coords, polygons, indexMap, coordLength, properties) {\n for (const polygon of coords) {\n handlePolygon(polygon, polygons, indexMap, coordLength, properties);\n }\n}\n\n/** Wrap each array in an accessor object with value and size keys */\nfunction makeAccessorObjects(points, lines, polygons, coordLength): BinaryFeatures {\n const returnObj = {\n points: {\n ...points,\n positions: {value: points.positions, size: coordLength},\n globalFeatureIds: {value: points.globalFeatureIds, size: 1},\n featureIds: {value: points.featureIds, size: 1},\n type: 'Point'\n },\n lines: {\n ...lines,\n pathIndices: {value: lines.pathIndices, size: 1},\n positions: {value: lines.positions, size: coordLength},\n globalFeatureIds: {value: lines.globalFeatureIds, size: 1},\n featureIds: {value: lines.featureIds, size: 1},\n type: 'LineString'\n },\n polygons: {\n ...polygons,\n polygonIndices: {value: polygons.polygonIndices, size: 1},\n primitivePolygonIndices: {value: polygons.primitivePolygonIndices, size: 1},\n positions: {value: polygons.positions, size: coordLength},\n globalFeatureIds: {value: polygons.globalFeatureIds, size: 1},\n featureIds: {value: polygons.featureIds, size: 1},\n type: 'Polygon'\n }\n };\n\n for (const geomType in returnObj) {\n for (const numericProp in returnObj[geomType].numericProps) {\n returnObj[geomType].numericProps[numericProp] = {\n value: returnObj[geomType].numericProps[numericProp],\n size: 1\n };\n }\n }\n\n return returnObj as unknown as BinaryFeatures;\n}\n\n/** Add numeric properties to object */\nfunction fillNumericProperties(object, properties, index, length) {\n for (const numericPropName in object.numericProps) {\n if (numericPropName in properties) {\n object.numericProps[numericPropName].set(\n new Array(length).fill(properties[numericPropName]),\n index\n );\n }\n }\n}\n\n/** Keep string properties in object */\nfunction keepStringProperties(properties, numericKeys: string[]): GeoJsonProperties {\n const props = {};\n for (const key in properties) {\n if (!numericKeys.includes(key)) {\n props[key] = properties[key];\n }\n }\n return props;\n}\n\n/** @param coords is expected to be a list of arrays, each with length 2-3 */\nfunction fillCoords(array, coords, startVertex, coordLength): void {\n let index = startVertex * coordLength;\n for (const coord of coords) {\n array.set(coord, index);\n index += coordLength;\n }\n}\n\n// TODO - how does this work? Different `coordinates` have different nesting\nfunction flatten(arrays): number[][] {\n return [].concat(...arrays);\n}\n\nfunction isNumeric(x: any): boolean {\n return Number.isFinite(x);\n}\n"],"file":"geojson-to-binary.js"}
1
+ {"version":3,"sources":["../../../src/lib/geojson-to-binary.ts"],"names":["geojsonToBinary","features","options","firstPassData","firstPass","secondPass","coordLength","numericPropKeys","PositionDataType","Float32Array","TEST_EXPORTS","pointPositionsCount","pointFeaturesCount","linePositionsCount","linePathsCount","lineFeaturesCount","polygonPositionsCount","polygonObjectsCount","polygonRingsCount","polygonFeaturesCount","coordLengths","Set","propArrayTypes","feature","geometry","type","add","coordinates","length","point","coord","line","flatten","polygon","Error","properties","key","val","deduceArrayType","size","Math","max","Object","keys","filter","k","Array","GlobalFeatureIdsDataType","Uint32Array","Uint16Array","points","positions","globalFeatureIds","featureIds","numericProps","fields","lines","pathIndices","polygons","polygonIndices","primitivePolygonIndices","object","propName","TypedArray","indexMap","pointPosition","pointFeature","linePosition","linePath","lineFeature","polygonPosition","polygonObject","polygonRing","polygonFeature","handlePoint","push","keepStringProperties","handleMultiPoint","handleLineString","handleMultiLineString","handlePolygon","handleMultiPolygon","makeAccessorObjects","coords","set","fillNumericProperties","fillCoords","nPositions","fill","ring","returnObj","value","geomType","numericProp","index","numericPropName","numericKeys","props","includes","array","startVertex","arrays","concat","x","constructor","Number","isFinite","Float64Array","fround"],"mappings":"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","sourcesContent":["import {Feature, GeoJsonProperties} from '@loaders.gl/schema';\nimport type {BinaryFeatures} from '@loaders.gl/schema';\n\nexport type GeojsonToBinaryOptions = {\n coordLength?: number;\n numericPropKeys?: string[];\n PositionDataType?: Function;\n};\n\n/** Convert GeoJSON features to flat binary arrays */\nexport function geojsonToBinary(\n features: Feature[],\n options: GeojsonToBinaryOptions = {}\n): BinaryFeatures {\n const firstPassData = firstPass(features);\n return secondPass(features, firstPassData, {\n coordLength: options.coordLength || firstPassData.coordLength,\n numericPropKeys: options.numericPropKeys || firstPassData.numericPropKeys,\n PositionDataType: options.PositionDataType || Float32Array\n });\n}\n\nexport const TEST_EXPORTS = {\n firstPass,\n secondPass\n};\n\ntype PropArrayConstructor = Float32ArrayConstructor | Float64ArrayConstructor | ArrayConstructor;\n\ntype FirstPassData = {\n coordLength: number;\n numericPropKeys: string[];\n propArrayTypes: {[key: string]: PropArrayConstructor};\n\n pointPositionsCount: number;\n pointFeaturesCount: number;\n linePositionsCount: number;\n linePathsCount: number;\n lineFeaturesCount: number;\n polygonPositionsCount: number;\n polygonObjectsCount: number;\n polygonRingsCount: number;\n polygonFeaturesCount: number;\n};\n\n/**\n * Initial scan over GeoJSON features\n * Counts number of coordinates of each geometry type and\n * keeps track of the max coordinate dimensions\n */\n// eslint-disable-next-line complexity, max-statements\nfunction firstPass(features: Feature[]): FirstPassData {\n // Counts the number of _positions_, so [x, y, z] counts as one\n let pointPositionsCount = 0;\n let pointFeaturesCount = 0;\n let linePositionsCount = 0;\n let linePathsCount = 0;\n let lineFeaturesCount = 0;\n let polygonPositionsCount = 0;\n let polygonObjectsCount = 0;\n let polygonRingsCount = 0;\n let polygonFeaturesCount = 0;\n const coordLengths = new Set<number>();\n const propArrayTypes = {};\n\n for (const feature of features) {\n const geometry = feature.geometry;\n switch (geometry.type) {\n case 'Point':\n pointFeaturesCount++;\n pointPositionsCount++;\n coordLengths.add(geometry.coordinates.length);\n break;\n case 'MultiPoint':\n pointFeaturesCount++;\n pointPositionsCount += geometry.coordinates.length;\n for (const point of geometry.coordinates) {\n coordLengths.add(point.length);\n }\n break;\n case 'LineString':\n lineFeaturesCount++;\n linePositionsCount += geometry.coordinates.length;\n linePathsCount++;\n\n for (const coord of geometry.coordinates) {\n coordLengths.add(coord.length);\n }\n break;\n case 'MultiLineString':\n lineFeaturesCount++;\n for (const line of geometry.coordinates) {\n linePositionsCount += line.length;\n linePathsCount++;\n\n // eslint-disable-next-line max-depth\n for (const coord of line) {\n coordLengths.add(coord.length);\n }\n }\n break;\n case 'Polygon':\n polygonFeaturesCount++;\n polygonObjectsCount++;\n polygonRingsCount += geometry.coordinates.length;\n polygonPositionsCount += flatten(geometry.coordinates).length;\n\n for (const coord of flatten(geometry.coordinates)) {\n coordLengths.add(coord.length);\n }\n break;\n case 'MultiPolygon':\n polygonFeaturesCount++;\n for (const polygon of geometry.coordinates) {\n polygonObjectsCount++;\n polygonRingsCount += polygon.length;\n polygonPositionsCount += flatten(polygon).length;\n\n // eslint-disable-next-line max-depth\n for (const coord of flatten(polygon)) {\n coordLengths.add(coord.length);\n }\n }\n break;\n default:\n throw new Error(`Unsupported geometry type: ${geometry.type}`);\n }\n\n if (feature.properties) {\n for (const key in feature.properties) {\n const val = feature.properties[key];\n\n // If property has not been seen before, or if property has been numeric\n // in all previous features, check if numeric in this feature\n // If not numeric, Array is stored to prevent rechecking in the future\n // Additionally, detects if 64 bit precision is required\n propArrayTypes[key] = deduceArrayType(val, propArrayTypes[key]);\n }\n }\n }\n\n return {\n coordLength: coordLengths.size > 0 ? Math.max(...coordLengths) : 2,\n\n pointPositionsCount,\n pointFeaturesCount,\n linePositionsCount,\n linePathsCount,\n lineFeaturesCount,\n polygonPositionsCount,\n polygonObjectsCount,\n polygonRingsCount,\n polygonFeaturesCount,\n\n // Array of keys whose values are always numeric\n numericPropKeys: Object.keys(propArrayTypes).filter((k) => propArrayTypes[k] !== Array),\n propArrayTypes\n };\n}\n\n/**\n * Second scan over GeoJSON features\n * Fills coordinates into pre-allocated typed arrays\n */\n// eslint-disable-next-line complexity\nfunction secondPass(\n features,\n firstPassData: FirstPassData,\n options: Required<GeojsonToBinaryOptions>\n) {\n const {\n pointPositionsCount,\n pointFeaturesCount,\n linePositionsCount,\n linePathsCount,\n lineFeaturesCount,\n polygonPositionsCount,\n polygonObjectsCount,\n polygonRingsCount,\n propArrayTypes,\n polygonFeaturesCount\n } = firstPassData;\n const {coordLength, numericPropKeys, PositionDataType = Float32Array} = options;\n const GlobalFeatureIdsDataType = features.length > 65535 ? Uint32Array : Uint16Array;\n const points = {\n // @ts-ignore Typescript doesn't like dynamic constructors\n positions: new PositionDataType(pointPositionsCount * coordLength),\n globalFeatureIds: new GlobalFeatureIdsDataType(pointPositionsCount),\n featureIds:\n pointFeaturesCount > 65535\n ? new Uint32Array(pointPositionsCount)\n : new Uint16Array(pointPositionsCount),\n numericProps: {},\n properties: Array<any>(),\n fields: Array<any>()\n };\n const lines = {\n // @ts-ignore Typescript doesn't like dynamic constructors\n positions: new PositionDataType(linePositionsCount * coordLength),\n pathIndices:\n linePositionsCount > 65535\n ? new Uint32Array(linePathsCount + 1)\n : new Uint16Array(linePathsCount + 1),\n globalFeatureIds: new GlobalFeatureIdsDataType(linePositionsCount),\n featureIds:\n lineFeaturesCount > 65535\n ? new Uint32Array(linePositionsCount)\n : new Uint16Array(linePositionsCount),\n numericProps: {},\n properties: Array<any>(),\n fields: Array<any>()\n };\n const polygons = {\n // @ts-ignore Typescript doesn't like dynamic constructors\n positions: new PositionDataType(polygonPositionsCount * coordLength),\n polygonIndices:\n polygonPositionsCount > 65535\n ? new Uint32Array(polygonObjectsCount + 1)\n : new Uint16Array(polygonObjectsCount + 1),\n primitivePolygonIndices:\n polygonPositionsCount > 65535\n ? new Uint32Array(polygonRingsCount + 1)\n : new Uint16Array(polygonRingsCount + 1),\n globalFeatureIds: new GlobalFeatureIdsDataType(polygonPositionsCount),\n featureIds:\n polygonFeaturesCount > 65535\n ? new Uint32Array(polygonPositionsCount)\n : new Uint16Array(polygonPositionsCount),\n numericProps: {},\n properties: Array<any>(),\n fields: Array<any>()\n };\n\n // Instantiate numeric properties arrays; one value per vertex\n for (const object of [points, lines, polygons]) {\n for (const propName of numericPropKeys || []) {\n // If property has been numeric in all previous features in which the property existed, check\n // if numeric in this feature\n const TypedArray = propArrayTypes[propName];\n object.numericProps[propName] = new TypedArray(object.positions.length / coordLength);\n }\n }\n\n // Set last element of path/polygon indices as positions length\n lines.pathIndices[linePathsCount] = linePositionsCount;\n polygons.polygonIndices[polygonObjectsCount] = polygonPositionsCount;\n polygons.primitivePolygonIndices[polygonRingsCount] = polygonPositionsCount;\n\n const indexMap = {\n pointPosition: 0,\n pointFeature: 0,\n linePosition: 0,\n linePath: 0,\n lineFeature: 0,\n polygonPosition: 0,\n polygonObject: 0,\n polygonRing: 0,\n polygonFeature: 0,\n feature: 0\n };\n\n for (const feature of features) {\n const geometry = feature.geometry;\n const properties: GeoJsonProperties = feature.properties || {};\n\n switch (geometry.type) {\n case 'Point':\n handlePoint(geometry.coordinates, points, indexMap, coordLength, properties);\n points.properties.push(keepStringProperties(properties, numericPropKeys));\n indexMap.pointFeature++;\n break;\n case 'MultiPoint':\n handleMultiPoint(geometry.coordinates, points, indexMap, coordLength, properties);\n points.properties.push(keepStringProperties(properties, numericPropKeys));\n indexMap.pointFeature++;\n break;\n case 'LineString':\n handleLineString(geometry.coordinates, lines, indexMap, coordLength, properties);\n lines.properties.push(keepStringProperties(properties, numericPropKeys));\n indexMap.lineFeature++;\n break;\n case 'MultiLineString':\n handleMultiLineString(geometry.coordinates, lines, indexMap, coordLength, properties);\n lines.properties.push(keepStringProperties(properties, numericPropKeys));\n indexMap.lineFeature++;\n break;\n case 'Polygon':\n handlePolygon(geometry.coordinates, polygons, indexMap, coordLength, properties);\n polygons.properties.push(keepStringProperties(properties, numericPropKeys));\n indexMap.polygonFeature++;\n break;\n case 'MultiPolygon':\n handleMultiPolygon(geometry.coordinates, polygons, indexMap, coordLength, properties);\n polygons.properties.push(keepStringProperties(properties, numericPropKeys));\n indexMap.polygonFeature++;\n break;\n default:\n throw new Error('Invalid geometry type');\n }\n\n indexMap.feature++;\n }\n\n // Wrap each array in an accessor object with value and size keys\n return makeAccessorObjects(points, lines, polygons, coordLength);\n}\n\n/** Fills Point coordinates into points object of arrays */\nfunction handlePoint(coords, points, indexMap, coordLength, properties) {\n points.positions.set(coords, indexMap.pointPosition * coordLength);\n points.globalFeatureIds[indexMap.pointPosition] = indexMap.feature;\n points.featureIds[indexMap.pointPosition] = indexMap.pointFeature;\n\n fillNumericProperties(points, properties, indexMap.pointPosition, 1);\n indexMap.pointPosition++;\n}\n\n/** Fills MultiPoint coordinates into points object of arrays */\nfunction handleMultiPoint(coords, points, indexMap, coordLength, properties) {\n for (const point of coords) {\n handlePoint(point, points, indexMap, coordLength, properties);\n }\n}\n\n/** Fills LineString coordinates into lines object of arrays */\nfunction handleLineString(coords, lines, indexMap, coordLength, properties) {\n lines.pathIndices[indexMap.linePath] = indexMap.linePosition;\n indexMap.linePath++;\n\n fillCoords(lines.positions, coords, indexMap.linePosition, coordLength);\n\n const nPositions = coords.length;\n fillNumericProperties(lines, properties, indexMap.linePosition, nPositions);\n\n lines.globalFeatureIds.set(\n new Uint32Array(nPositions).fill(indexMap.feature),\n indexMap.linePosition\n );\n lines.featureIds.set(\n new Uint32Array(nPositions).fill(indexMap.lineFeature),\n indexMap.linePosition\n );\n indexMap.linePosition += nPositions;\n}\n\n/** Fills MultiLineString coordinates into lines object of arrays */\nfunction handleMultiLineString(coords, lines, indexMap, coordLength, properties) {\n for (const line of coords) {\n handleLineString(line, lines, indexMap, coordLength, properties);\n }\n}\n\n/** Fills Polygon coordinates into polygons object of arrays */\nfunction handlePolygon(coords, polygons, indexMap, coordLength, properties) {\n polygons.polygonIndices[indexMap.polygonObject] = indexMap.polygonPosition;\n indexMap.polygonObject++;\n\n for (const ring of coords) {\n polygons.primitivePolygonIndices[indexMap.polygonRing] = indexMap.polygonPosition;\n indexMap.polygonRing++;\n\n fillCoords(polygons.positions, ring, indexMap.polygonPosition, coordLength);\n\n const nPositions = ring.length;\n fillNumericProperties(polygons, properties, indexMap.polygonPosition, nPositions);\n\n polygons.globalFeatureIds.set(\n new Uint32Array(nPositions).fill(indexMap.feature),\n indexMap.polygonPosition\n );\n polygons.featureIds.set(\n new Uint32Array(nPositions).fill(indexMap.polygonFeature),\n indexMap.polygonPosition\n );\n indexMap.polygonPosition += nPositions;\n }\n}\n\n/** Fills MultiPolygon coordinates into polygons object of arrays */\nfunction handleMultiPolygon(coords, polygons, indexMap, coordLength, properties) {\n for (const polygon of coords) {\n handlePolygon(polygon, polygons, indexMap, coordLength, properties);\n }\n}\n\n/** Wrap each array in an accessor object with value and size keys */\nfunction makeAccessorObjects(points, lines, polygons, coordLength): BinaryFeatures {\n const returnObj = {\n points: {\n ...points,\n positions: {value: points.positions, size: coordLength},\n globalFeatureIds: {value: points.globalFeatureIds, size: 1},\n featureIds: {value: points.featureIds, size: 1},\n type: 'Point'\n },\n lines: {\n ...lines,\n pathIndices: {value: lines.pathIndices, size: 1},\n positions: {value: lines.positions, size: coordLength},\n globalFeatureIds: {value: lines.globalFeatureIds, size: 1},\n featureIds: {value: lines.featureIds, size: 1},\n type: 'LineString'\n },\n polygons: {\n ...polygons,\n polygonIndices: {value: polygons.polygonIndices, size: 1},\n primitivePolygonIndices: {value: polygons.primitivePolygonIndices, size: 1},\n positions: {value: polygons.positions, size: coordLength},\n globalFeatureIds: {value: polygons.globalFeatureIds, size: 1},\n featureIds: {value: polygons.featureIds, size: 1},\n type: 'Polygon'\n }\n };\n\n for (const geomType in returnObj) {\n for (const numericProp in returnObj[geomType].numericProps) {\n returnObj[geomType].numericProps[numericProp] = {\n value: returnObj[geomType].numericProps[numericProp],\n size: 1\n };\n }\n }\n\n return returnObj as unknown as BinaryFeatures;\n}\n\n/** Add numeric properties to object */\nfunction fillNumericProperties(object, properties, index, length) {\n for (const numericPropName in object.numericProps) {\n if (numericPropName in properties) {\n object.numericProps[numericPropName].set(\n new Array(length).fill(properties[numericPropName]),\n index\n );\n }\n }\n}\n\n/** Keep string properties in object */\nfunction keepStringProperties(properties, numericKeys: string[]): GeoJsonProperties {\n const props = {};\n for (const key in properties) {\n if (!numericKeys.includes(key)) {\n props[key] = properties[key];\n }\n }\n return props;\n}\n\n/** @param coords is expected to be a list of arrays, each with length 2-3 */\nfunction fillCoords(array, coords, startVertex, coordLength): void {\n let index = startVertex * coordLength;\n for (const coord of coords) {\n array.set(coord, index);\n index += coordLength;\n }\n}\n\n// TODO - how does this work? Different `coordinates` have different nesting\nfunction flatten(arrays): number[][] {\n return [].concat(...arrays);\n}\n\nfunction deduceArrayType(x: any, constructor: PropArrayConstructor): PropArrayConstructor {\n if (constructor === Array || !Number.isFinite(x)) {\n return Array;\n }\n\n // If this or previous value required 64bits use Float64Array\n return constructor === Float64Array || Math.fround(x) !== x ? Float64Array : Float32Array;\n}\n"],"file":"geojson-to-binary.js"}
@@ -6,6 +6,12 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.transformBinaryCoords = transformBinaryCoords;
7
7
  exports.transformGeoJsonCoords = transformGeoJsonCoords;
8
8
 
9
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
10
+
11
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
12
+
13
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
14
+
9
15
  function transformBinaryCoords(binaryFeatures, transformCoordinate) {
10
16
  if (binaryFeatures.points) {
11
17
  transformBinaryGeometryPositions(binaryFeatures.points, transformCoordinate);
@@ -23,20 +29,29 @@ function transformBinaryCoords(binaryFeatures, transformCoordinate) {
23
29
  }
24
30
 
25
31
  function transformBinaryGeometryPositions(binaryGeometry, fn) {
26
- const {
27
- positions
28
- } = binaryGeometry;
32
+ var positions = binaryGeometry.positions;
29
33
 
30
- for (let i = 0; i < positions.value.length; i += positions.size) {
31
- const coord = Array.from(positions.value.subarray(i, i + positions.size));
32
- const transformedCoord = fn(coord);
34
+ for (var i = 0; i < positions.value.length; i += positions.size) {
35
+ var _coord = Array.from(positions.value.subarray(i, i + positions.size));
36
+
37
+ var transformedCoord = fn(_coord);
33
38
  positions.value.set(transformedCoord, i);
34
39
  }
35
40
  }
36
41
 
37
42
  function transformGeoJsonCoords(features, fn) {
38
- for (const feature of features) {
39
- feature.geometry.coordinates = coordMap(feature.geometry.coordinates, fn);
43
+ var _iterator = _createForOfIteratorHelper(features),
44
+ _step;
45
+
46
+ try {
47
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
48
+ var feature = _step.value;
49
+ feature.geometry.coordinates = coordMap(feature.geometry.coordinates, fn);
50
+ }
51
+ } catch (err) {
52
+ _iterator.e(err);
53
+ } finally {
54
+ _iterator.f();
40
55
  }
41
56
 
42
57
  return features;
@@ -47,7 +62,7 @@ function coordMap(array, fn) {
47
62
  return fn(array);
48
63
  }
49
64
 
50
- return array.map(item => {
65
+ return array.map(function (item) {
51
66
  return coordMap(item, fn);
52
67
  });
53
68
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/transform.ts"],"names":["transformBinaryCoords","binaryFeatures","transformCoordinate","points","transformBinaryGeometryPositions","lines","polygons","binaryGeometry","fn","positions","i","value","length","size","coord","Array","from","subarray","transformedCoord","set","transformGeoJsonCoords","features","feature","geometry","coordinates","coordMap","array","isCoord","map","item","Number","isFinite"],"mappings":";;;;;;;;AAUO,SAASA,qBAAT,CACLC,cADK,EAELC,mBAFK,EAGW;AAChB,MAAID,cAAc,CAACE,MAAnB,EAA2B;AACzBC,IAAAA,gCAAgC,CAACH,cAAc,CAACE,MAAhB,EAAwBD,mBAAxB,CAAhC;AACD;;AACD,MAAID,cAAc,CAACI,KAAnB,EAA0B;AACxBD,IAAAA,gCAAgC,CAACH,cAAc,CAACI,KAAhB,EAAuBH,mBAAvB,CAAhC;AACD;;AACD,MAAID,cAAc,CAACK,QAAnB,EAA6B;AAC3BF,IAAAA,gCAAgC,CAACH,cAAc,CAACK,QAAhB,EAA0BJ,mBAA1B,CAAhC;AACD;;AACD,SAAOD,cAAP;AACD;;AAGD,SAASG,gCAAT,CAA0CG,cAA1C,EAA0EC,EAA1E,EAAmG;AACjG,QAAM;AAACC,IAAAA;AAAD,MAAcF,cAApB;;AACA,OAAK,IAAIG,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGD,SAAS,CAACE,KAAV,CAAgBC,MAApC,EAA4CF,CAAC,IAAID,SAAS,CAACI,IAA3D,EAAiE;AAE/D,UAAMC,KAAoB,GAAGC,KAAK,CAACC,IAAN,CAAWP,SAAS,CAACE,KAAV,CAAgBM,QAAhB,CAAyBP,CAAzB,EAA4BA,CAAC,GAAGD,SAAS,CAACI,IAA1C,CAAX,CAA7B;AACA,UAAMK,gBAAgB,GAAGV,EAAE,CAACM,KAAD,CAA3B;AAEAL,IAAAA,SAAS,CAACE,KAAV,CAAgBQ,GAAhB,CAAoBD,gBAApB,EAAsCR,CAAtC;AACD;AACF;;AASM,SAASU,sBAAT,CACLC,QADK,EAELb,EAFK,EAGK;AACV,OAAK,MAAMc,OAAX,IAAsBD,QAAtB,EAAgC;AAE9BC,IAAAA,OAAO,CAACC,QAAR,CAAiBC,WAAjB,GAA+BC,QAAQ,CAACH,OAAO,CAACC,QAAR,CAAiBC,WAAlB,EAA+BhB,EAA/B,CAAvC;AACD;;AACD,SAAOa,QAAP;AACD;;AAED,SAASI,QAAT,CAAkBC,KAAlB,EAAyBlB,EAAzB,EAA6B;AAC3B,MAAImB,OAAO,CAACD,KAAD,CAAX,EAAoB;AAClB,WAAOlB,EAAE,CAACkB,KAAD,CAAT;AACD;;AAED,SAAOA,KAAK,CAACE,GAAN,CAAWC,IAAD,IAAU;AACzB,WAAOJ,QAAQ,CAACI,IAAD,EAAOrB,EAAP,CAAf;AACD,GAFM,CAAP;AAGD;;AAED,SAASmB,OAAT,CAAiBD,KAAjB,EAAwB;AACtB,SAAOI,MAAM,CAACC,QAAP,CAAgBL,KAAK,CAAC,CAAD,CAArB,KAA6BI,MAAM,CAACC,QAAP,CAAgBL,KAAK,CAAC,CAAD,CAArB,CAApC;AACD","sourcesContent":["import type {BinaryFeatures, BinaryGeometry} from '@loaders.gl/schema';\n\ntype TransformCoordinate = (coord: number[]) => number[];\n\n/**\n * Apply transformation to every coordinate of binary features\n * @param binaryFeatures binary features\n * @param transformCoordinate Function to call on each coordinate\n * @return Transformed binary features\n */\nexport function transformBinaryCoords(\n binaryFeatures: BinaryFeatures,\n transformCoordinate: TransformCoordinate\n): BinaryFeatures {\n if (binaryFeatures.points) {\n transformBinaryGeometryPositions(binaryFeatures.points, transformCoordinate);\n }\n if (binaryFeatures.lines) {\n transformBinaryGeometryPositions(binaryFeatures.lines, transformCoordinate);\n }\n if (binaryFeatures.polygons) {\n transformBinaryGeometryPositions(binaryFeatures.polygons, transformCoordinate);\n }\n return binaryFeatures;\n}\n\n/** Transform one binary geometry */\nfunction transformBinaryGeometryPositions(binaryGeometry: BinaryGeometry, fn: TransformCoordinate) {\n const {positions} = binaryGeometry;\n for (let i = 0; i < positions.value.length; i += positions.size) {\n // @ts-ignore inclusion of bigint causes problems\n const coord: Array<number> = Array.from(positions.value.subarray(i, i + positions.size));\n const transformedCoord = fn(coord);\n // @ts-ignore typescript typing for .set seems to require bigint?\n positions.value.set(transformedCoord, i);\n }\n}\n\n/**\n * Apply transformation to every coordinate of GeoJSON features\n *\n * @param features Array of GeoJSON features\n * @param fn Function to call on each coordinate\n * @return Transformed GeoJSON features\n */\nexport function transformGeoJsonCoords(\n features: object[],\n fn: (coord: number[]) => number[]\n): object[] {\n for (const feature of features) {\n // @ts-ignore\n feature.geometry.coordinates = coordMap(feature.geometry.coordinates, fn);\n }\n return features;\n}\n\nfunction coordMap(array, fn) {\n if (isCoord(array)) {\n return fn(array);\n }\n\n return array.map((item) => {\n return coordMap(item, fn);\n });\n}\n\nfunction isCoord(array) {\n return Number.isFinite(array[0]) && Number.isFinite(array[1]);\n}\n"],"file":"transform.js"}
1
+ {"version":3,"sources":["../../../src/lib/transform.ts"],"names":["transformBinaryCoords","binaryFeatures","transformCoordinate","points","transformBinaryGeometryPositions","lines","polygons","binaryGeometry","fn","positions","i","value","length","size","coord","Array","from","subarray","transformedCoord","set","transformGeoJsonCoords","features","feature","geometry","coordinates","coordMap","array","isCoord","map","item","Number","isFinite"],"mappings":";;;;;;;;;;;;;;AAUO,SAASA,qBAAT,CACLC,cADK,EAELC,mBAFK,EAGW;AAChB,MAAID,cAAc,CAACE,MAAnB,EAA2B;AACzBC,IAAAA,gCAAgC,CAACH,cAAc,CAACE,MAAhB,EAAwBD,mBAAxB,CAAhC;AACD;;AACD,MAAID,cAAc,CAACI,KAAnB,EAA0B;AACxBD,IAAAA,gCAAgC,CAACH,cAAc,CAACI,KAAhB,EAAuBH,mBAAvB,CAAhC;AACD;;AACD,MAAID,cAAc,CAACK,QAAnB,EAA6B;AAC3BF,IAAAA,gCAAgC,CAACH,cAAc,CAACK,QAAhB,EAA0BJ,mBAA1B,CAAhC;AACD;;AACD,SAAOD,cAAP;AACD;;AAGD,SAASG,gCAAT,CAA0CG,cAA1C,EAA0EC,EAA1E,EAAmG;AACjG,MAAOC,SAAP,GAAoBF,cAApB,CAAOE,SAAP;;AACA,OAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGD,SAAS,CAACE,KAAV,CAAgBC,MAApC,EAA4CF,CAAC,IAAID,SAAS,CAACI,IAA3D,EAAiE;AAE/D,QAAMC,MAAoB,GAAGC,KAAK,CAACC,IAAN,CAAWP,SAAS,CAACE,KAAV,CAAgBM,QAAhB,CAAyBP,CAAzB,EAA4BA,CAAC,GAAGD,SAAS,CAACI,IAA1C,CAAX,CAA7B;;AACA,QAAMK,gBAAgB,GAAGV,EAAE,CAACM,MAAD,CAA3B;AAEAL,IAAAA,SAAS,CAACE,KAAV,CAAgBQ,GAAhB,CAAoBD,gBAApB,EAAsCR,CAAtC;AACD;AACF;;AASM,SAASU,sBAAT,CACLC,QADK,EAELb,EAFK,EAGK;AAAA,6CACYa,QADZ;AAAA;;AAAA;AACV,wDAAgC;AAAA,UAArBC,OAAqB;AAE9BA,MAAAA,OAAO,CAACC,QAAR,CAAiBC,WAAjB,GAA+BC,QAAQ,CAACH,OAAO,CAACC,QAAR,CAAiBC,WAAlB,EAA+BhB,EAA/B,CAAvC;AACD;AAJS;AAAA;AAAA;AAAA;AAAA;;AAKV,SAAOa,QAAP;AACD;;AAED,SAASI,QAAT,CAAkBC,KAAlB,EAAyBlB,EAAzB,EAA6B;AAC3B,MAAImB,OAAO,CAACD,KAAD,CAAX,EAAoB;AAClB,WAAOlB,EAAE,CAACkB,KAAD,CAAT;AACD;;AAED,SAAOA,KAAK,CAACE,GAAN,CAAU,UAACC,IAAD,EAAU;AACzB,WAAOJ,QAAQ,CAACI,IAAD,EAAOrB,EAAP,CAAf;AACD,GAFM,CAAP;AAGD;;AAED,SAASmB,OAAT,CAAiBD,KAAjB,EAAwB;AACtB,SAAOI,MAAM,CAACC,QAAP,CAAgBL,KAAK,CAAC,CAAD,CAArB,KAA6BI,MAAM,CAACC,QAAP,CAAgBL,KAAK,CAAC,CAAD,CAArB,CAApC;AACD","sourcesContent":["import type {BinaryFeatures, BinaryGeometry} from '@loaders.gl/schema';\n\ntype TransformCoordinate = (coord: number[]) => number[];\n\n/**\n * Apply transformation to every coordinate of binary features\n * @param binaryFeatures binary features\n * @param transformCoordinate Function to call on each coordinate\n * @return Transformed binary features\n */\nexport function transformBinaryCoords(\n binaryFeatures: BinaryFeatures,\n transformCoordinate: TransformCoordinate\n): BinaryFeatures {\n if (binaryFeatures.points) {\n transformBinaryGeometryPositions(binaryFeatures.points, transformCoordinate);\n }\n if (binaryFeatures.lines) {\n transformBinaryGeometryPositions(binaryFeatures.lines, transformCoordinate);\n }\n if (binaryFeatures.polygons) {\n transformBinaryGeometryPositions(binaryFeatures.polygons, transformCoordinate);\n }\n return binaryFeatures;\n}\n\n/** Transform one binary geometry */\nfunction transformBinaryGeometryPositions(binaryGeometry: BinaryGeometry, fn: TransformCoordinate) {\n const {positions} = binaryGeometry;\n for (let i = 0; i < positions.value.length; i += positions.size) {\n // @ts-ignore inclusion of bigint causes problems\n const coord: Array<number> = Array.from(positions.value.subarray(i, i + positions.size));\n const transformedCoord = fn(coord);\n // @ts-ignore typescript typing for .set seems to require bigint?\n positions.value.set(transformedCoord, i);\n }\n}\n\n/**\n * Apply transformation to every coordinate of GeoJSON features\n *\n * @param features Array of GeoJSON features\n * @param fn Function to call on each coordinate\n * @return Transformed GeoJSON features\n */\nexport function transformGeoJsonCoords(\n features: object[],\n fn: (coord: number[]) => number[]\n): object[] {\n for (const feature of features) {\n // @ts-ignore\n feature.geometry.coordinates = coordMap(feature.geometry.coordinates, fn);\n }\n return features;\n}\n\nfunction coordMap(array, fn) {\n if (isCoord(array)) {\n return fn(array);\n }\n\n return array.map((item) => {\n return coordMap(item, fn);\n });\n}\n\nfunction isCoord(array) {\n return Number.isFinite(array[0]) && Number.isFinite(array[1]);\n}\n"],"file":"transform.js"}
@@ -22,7 +22,7 @@ function firstPass(features) {
22
22
  let polygonRingsCount = 0;
23
23
  let polygonFeaturesCount = 0;
24
24
  const coordLengths = new Set();
25
- const numericPropKeys = {};
25
+ const propArrayTypes = {};
26
26
 
27
27
  for (const feature of features) {
28
28
  const geometry = feature.geometry;
@@ -103,7 +103,7 @@ function firstPass(features) {
103
103
  if (feature.properties) {
104
104
  for (const key in feature.properties) {
105
105
  const val = feature.properties[key];
106
- numericPropKeys[key] = numericPropKeys[key] || numericPropKeys[key] === undefined ? isNumeric(val) : numericPropKeys[key];
106
+ propArrayTypes[key] = deduceArrayType(val, propArrayTypes[key]);
107
107
  }
108
108
  }
109
109
  }
@@ -119,7 +119,8 @@ function firstPass(features) {
119
119
  polygonObjectsCount,
120
120
  polygonRingsCount,
121
121
  polygonFeaturesCount,
122
- numericPropKeys: Object.keys(numericPropKeys).filter(k => numericPropKeys[k])
122
+ numericPropKeys: Object.keys(propArrayTypes).filter(k => propArrayTypes[k] !== Array),
123
+ propArrayTypes
123
124
  };
124
125
  }
125
126
 
@@ -133,6 +134,7 @@ function secondPass(features, firstPassData, options) {
133
134
  polygonPositionsCount,
134
135
  polygonObjectsCount,
135
136
  polygonRingsCount,
137
+ propArrayTypes,
136
138
  polygonFeaturesCount
137
139
  } = firstPassData;
138
140
  const {
@@ -171,7 +173,8 @@ function secondPass(features, firstPassData, options) {
171
173
 
172
174
  for (const object of [points, lines, polygons]) {
173
175
  for (const propName of numericPropKeys || []) {
174
- object.numericProps[propName] = new Float32Array(object.positions.length / coordLength);
176
+ const TypedArray = propArrayTypes[propName];
177
+ object.numericProps[propName] = new TypedArray(object.positions.length / coordLength);
175
178
  }
176
179
  }
177
180
 
@@ -401,7 +404,11 @@ function flatten(arrays) {
401
404
  return [].concat(...arrays);
402
405
  }
403
406
 
404
- function isNumeric(x) {
405
- return Number.isFinite(x);
407
+ function deduceArrayType(x, constructor) {
408
+ if (constructor === Array || !Number.isFinite(x)) {
409
+ return Array;
410
+ }
411
+
412
+ return constructor === Float64Array || Math.fround(x) !== x ? Float64Array : Float32Array;
406
413
  }
407
414
  //# sourceMappingURL=geojson-to-binary.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/geojson-to-binary.ts"],"names":["geojsonToBinary","features","options","firstPassData","firstPass","secondPass","coordLength","numericPropKeys","PositionDataType","Float32Array","TEST_EXPORTS","pointPositionsCount","pointFeaturesCount","linePositionsCount","linePathsCount","lineFeaturesCount","polygonPositionsCount","polygonObjectsCount","polygonRingsCount","polygonFeaturesCount","coordLengths","Set","feature","geometry","type","add","coordinates","length","point","coord","line","flatten","polygon","Error","properties","key","val","undefined","isNumeric","size","Math","max","Object","keys","filter","k","GlobalFeatureIdsDataType","Uint32Array","Uint16Array","points","positions","globalFeatureIds","featureIds","numericProps","Array","fields","lines","pathIndices","polygons","polygonIndices","primitivePolygonIndices","object","propName","indexMap","pointPosition","pointFeature","linePosition","linePath","lineFeature","polygonPosition","polygonObject","polygonRing","polygonFeature","handlePoint","push","keepStringProperties","handleMultiPoint","handleLineString","handleMultiLineString","handlePolygon","handleMultiPolygon","makeAccessorObjects","coords","set","fillNumericProperties","fillCoords","nPositions","fill","ring","returnObj","value","geomType","numericProp","index","numericPropName","numericKeys","props","includes","array","startVertex","arrays","concat","x","Number","isFinite"],"mappings":"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","sourcesContent":["import {Feature, GeoJsonProperties} from '@loaders.gl/schema';\nimport type {BinaryFeatures} from '@loaders.gl/schema';\n\nexport type GeojsonToBinaryOptions = {\n coordLength?: number;\n numericPropKeys?: string[];\n PositionDataType?: Function;\n};\n\n/** Convert GeoJSON features to flat binary arrays */\nexport function geojsonToBinary(\n features: Feature[],\n options: GeojsonToBinaryOptions = {}\n): BinaryFeatures {\n const firstPassData = firstPass(features);\n return secondPass(features, firstPassData, {\n coordLength: options.coordLength || firstPassData.coordLength,\n numericPropKeys: options.numericPropKeys || firstPassData.numericPropKeys,\n PositionDataType: options.PositionDataType || Float32Array\n });\n}\n\nexport const TEST_EXPORTS = {\n firstPass,\n secondPass\n};\n\ntype FirstPassData = {\n coordLength: number;\n numericPropKeys: string[];\n\n pointPositionsCount: number;\n pointFeaturesCount: number;\n linePositionsCount: number;\n linePathsCount: number;\n lineFeaturesCount: number;\n polygonPositionsCount: number;\n polygonObjectsCount: number;\n polygonRingsCount: number;\n polygonFeaturesCount: number;\n};\n\n/**\n * Initial scan over GeoJSON features\n * Counts number of coordinates of each geometry type and\n * keeps track of the max coordinate dimensions\n */\n// eslint-disable-next-line complexity, max-statements\nfunction firstPass(features: Feature[]): FirstPassData {\n // Counts the number of _positions_, so [x, y, z] counts as one\n let pointPositionsCount = 0;\n let pointFeaturesCount = 0;\n let linePositionsCount = 0;\n let linePathsCount = 0;\n let lineFeaturesCount = 0;\n let polygonPositionsCount = 0;\n let polygonObjectsCount = 0;\n let polygonRingsCount = 0;\n let polygonFeaturesCount = 0;\n const coordLengths = new Set<number>();\n const numericPropKeys = {};\n\n for (const feature of features) {\n const geometry = feature.geometry;\n switch (geometry.type) {\n case 'Point':\n pointFeaturesCount++;\n pointPositionsCount++;\n coordLengths.add(geometry.coordinates.length);\n break;\n case 'MultiPoint':\n pointFeaturesCount++;\n pointPositionsCount += geometry.coordinates.length;\n for (const point of geometry.coordinates) {\n coordLengths.add(point.length);\n }\n break;\n case 'LineString':\n lineFeaturesCount++;\n linePositionsCount += geometry.coordinates.length;\n linePathsCount++;\n\n for (const coord of geometry.coordinates) {\n coordLengths.add(coord.length);\n }\n break;\n case 'MultiLineString':\n lineFeaturesCount++;\n for (const line of geometry.coordinates) {\n linePositionsCount += line.length;\n linePathsCount++;\n\n // eslint-disable-next-line max-depth\n for (const coord of line) {\n coordLengths.add(coord.length);\n }\n }\n break;\n case 'Polygon':\n polygonFeaturesCount++;\n polygonObjectsCount++;\n polygonRingsCount += geometry.coordinates.length;\n polygonPositionsCount += flatten(geometry.coordinates).length;\n\n for (const coord of flatten(geometry.coordinates)) {\n coordLengths.add(coord.length);\n }\n break;\n case 'MultiPolygon':\n polygonFeaturesCount++;\n for (const polygon of geometry.coordinates) {\n polygonObjectsCount++;\n polygonRingsCount += polygon.length;\n polygonPositionsCount += flatten(polygon).length;\n\n // eslint-disable-next-line max-depth\n for (const coord of flatten(polygon)) {\n coordLengths.add(coord.length);\n }\n }\n break;\n default:\n throw new Error(`Unsupported geometry type: ${geometry.type}`);\n }\n\n if (feature.properties) {\n for (const key in feature.properties) {\n const val = feature.properties[key];\n\n // If property has not been seen before, or if property has been numeric\n // in all previous features, check if numeric in this feature\n // If not numeric, false is stored to prevent rechecking in the future\n numericPropKeys[key] =\n numericPropKeys[key] || numericPropKeys[key] === undefined\n ? isNumeric(val)\n : numericPropKeys[key];\n }\n }\n }\n\n return {\n coordLength: coordLengths.size > 0 ? Math.max(...coordLengths) : 2,\n\n pointPositionsCount,\n pointFeaturesCount,\n linePositionsCount,\n linePathsCount,\n lineFeaturesCount,\n polygonPositionsCount,\n polygonObjectsCount,\n polygonRingsCount,\n polygonFeaturesCount,\n\n // Array of keys whose values are always numeric\n numericPropKeys: Object.keys(numericPropKeys).filter((k) => numericPropKeys[k])\n };\n}\n\n/**\n * Second scan over GeoJSON features\n * Fills coordinates into pre-allocated typed arrays\n */\n// eslint-disable-next-line complexity\nfunction secondPass(\n features,\n firstPassData: FirstPassData,\n options: Required<GeojsonToBinaryOptions>\n) {\n const {\n pointPositionsCount,\n pointFeaturesCount,\n linePositionsCount,\n linePathsCount,\n lineFeaturesCount,\n polygonPositionsCount,\n polygonObjectsCount,\n polygonRingsCount,\n polygonFeaturesCount\n } = firstPassData;\n const {coordLength, numericPropKeys, PositionDataType = Float32Array} = options;\n const GlobalFeatureIdsDataType = features.length > 65535 ? Uint32Array : Uint16Array;\n const points = {\n // @ts-ignore Typescript doesn't like dynamic constructors\n positions: new PositionDataType(pointPositionsCount * coordLength),\n globalFeatureIds: new GlobalFeatureIdsDataType(pointPositionsCount),\n featureIds:\n pointFeaturesCount > 65535\n ? new Uint32Array(pointPositionsCount)\n : new Uint16Array(pointPositionsCount),\n numericProps: {},\n properties: Array<any>(),\n fields: Array<any>()\n };\n const lines = {\n // @ts-ignore Typescript doesn't like dynamic constructors\n positions: new PositionDataType(linePositionsCount * coordLength),\n pathIndices:\n linePositionsCount > 65535\n ? new Uint32Array(linePathsCount + 1)\n : new Uint16Array(linePathsCount + 1),\n globalFeatureIds: new GlobalFeatureIdsDataType(linePositionsCount),\n featureIds:\n lineFeaturesCount > 65535\n ? new Uint32Array(linePositionsCount)\n : new Uint16Array(linePositionsCount),\n numericProps: {},\n properties: Array<any>(),\n fields: Array<any>()\n };\n const polygons = {\n // @ts-ignore Typescript doesn't like dynamic constructors\n positions: new PositionDataType(polygonPositionsCount * coordLength),\n polygonIndices:\n polygonPositionsCount > 65535\n ? new Uint32Array(polygonObjectsCount + 1)\n : new Uint16Array(polygonObjectsCount + 1),\n primitivePolygonIndices:\n polygonPositionsCount > 65535\n ? new Uint32Array(polygonRingsCount + 1)\n : new Uint16Array(polygonRingsCount + 1),\n globalFeatureIds: new GlobalFeatureIdsDataType(polygonPositionsCount),\n featureIds:\n polygonFeaturesCount > 65535\n ? new Uint32Array(polygonPositionsCount)\n : new Uint16Array(polygonPositionsCount),\n numericProps: {},\n properties: Array<any>(),\n fields: Array<any>()\n };\n\n // Instantiate numeric properties arrays; one value per vertex\n for (const object of [points, lines, polygons]) {\n for (const propName of numericPropKeys || []) {\n // If property has been numeric in all previous features in which the property existed, check\n // if numeric in this feature\n object.numericProps[propName] = new Float32Array(object.positions.length / coordLength);\n }\n }\n\n // Set last element of path/polygon indices as positions length\n lines.pathIndices[linePathsCount] = linePositionsCount;\n polygons.polygonIndices[polygonObjectsCount] = polygonPositionsCount;\n polygons.primitivePolygonIndices[polygonRingsCount] = polygonPositionsCount;\n\n const indexMap = {\n pointPosition: 0,\n pointFeature: 0,\n linePosition: 0,\n linePath: 0,\n lineFeature: 0,\n polygonPosition: 0,\n polygonObject: 0,\n polygonRing: 0,\n polygonFeature: 0,\n feature: 0\n };\n\n for (const feature of features) {\n const geometry = feature.geometry;\n const properties: GeoJsonProperties = feature.properties || {};\n\n switch (geometry.type) {\n case 'Point':\n handlePoint(geometry.coordinates, points, indexMap, coordLength, properties);\n points.properties.push(keepStringProperties(properties, numericPropKeys));\n indexMap.pointFeature++;\n break;\n case 'MultiPoint':\n handleMultiPoint(geometry.coordinates, points, indexMap, coordLength, properties);\n points.properties.push(keepStringProperties(properties, numericPropKeys));\n indexMap.pointFeature++;\n break;\n case 'LineString':\n handleLineString(geometry.coordinates, lines, indexMap, coordLength, properties);\n lines.properties.push(keepStringProperties(properties, numericPropKeys));\n indexMap.lineFeature++;\n break;\n case 'MultiLineString':\n handleMultiLineString(geometry.coordinates, lines, indexMap, coordLength, properties);\n lines.properties.push(keepStringProperties(properties, numericPropKeys));\n indexMap.lineFeature++;\n break;\n case 'Polygon':\n handlePolygon(geometry.coordinates, polygons, indexMap, coordLength, properties);\n polygons.properties.push(keepStringProperties(properties, numericPropKeys));\n indexMap.polygonFeature++;\n break;\n case 'MultiPolygon':\n handleMultiPolygon(geometry.coordinates, polygons, indexMap, coordLength, properties);\n polygons.properties.push(keepStringProperties(properties, numericPropKeys));\n indexMap.polygonFeature++;\n break;\n default:\n throw new Error('Invalid geometry type');\n }\n\n indexMap.feature++;\n }\n\n // Wrap each array in an accessor object with value and size keys\n return makeAccessorObjects(points, lines, polygons, coordLength);\n}\n\n/** Fills Point coordinates into points object of arrays */\nfunction handlePoint(coords, points, indexMap, coordLength, properties) {\n points.positions.set(coords, indexMap.pointPosition * coordLength);\n points.globalFeatureIds[indexMap.pointPosition] = indexMap.feature;\n points.featureIds[indexMap.pointPosition] = indexMap.pointFeature;\n\n fillNumericProperties(points, properties, indexMap.pointPosition, 1);\n indexMap.pointPosition++;\n}\n\n/** Fills MultiPoint coordinates into points object of arrays */\nfunction handleMultiPoint(coords, points, indexMap, coordLength, properties) {\n for (const point of coords) {\n handlePoint(point, points, indexMap, coordLength, properties);\n }\n}\n\n/** Fills LineString coordinates into lines object of arrays */\nfunction handleLineString(coords, lines, indexMap, coordLength, properties) {\n lines.pathIndices[indexMap.linePath] = indexMap.linePosition;\n indexMap.linePath++;\n\n fillCoords(lines.positions, coords, indexMap.linePosition, coordLength);\n\n const nPositions = coords.length;\n fillNumericProperties(lines, properties, indexMap.linePosition, nPositions);\n\n lines.globalFeatureIds.set(\n new Uint32Array(nPositions).fill(indexMap.feature),\n indexMap.linePosition\n );\n lines.featureIds.set(\n new Uint32Array(nPositions).fill(indexMap.lineFeature),\n indexMap.linePosition\n );\n indexMap.linePosition += nPositions;\n}\n\n/** Fills MultiLineString coordinates into lines object of arrays */\nfunction handleMultiLineString(coords, lines, indexMap, coordLength, properties) {\n for (const line of coords) {\n handleLineString(line, lines, indexMap, coordLength, properties);\n }\n}\n\n/** Fills Polygon coordinates into polygons object of arrays */\nfunction handlePolygon(coords, polygons, indexMap, coordLength, properties) {\n polygons.polygonIndices[indexMap.polygonObject] = indexMap.polygonPosition;\n indexMap.polygonObject++;\n\n for (const ring of coords) {\n polygons.primitivePolygonIndices[indexMap.polygonRing] = indexMap.polygonPosition;\n indexMap.polygonRing++;\n\n fillCoords(polygons.positions, ring, indexMap.polygonPosition, coordLength);\n\n const nPositions = ring.length;\n fillNumericProperties(polygons, properties, indexMap.polygonPosition, nPositions);\n\n polygons.globalFeatureIds.set(\n new Uint32Array(nPositions).fill(indexMap.feature),\n indexMap.polygonPosition\n );\n polygons.featureIds.set(\n new Uint32Array(nPositions).fill(indexMap.polygonFeature),\n indexMap.polygonPosition\n );\n indexMap.polygonPosition += nPositions;\n }\n}\n\n/** Fills MultiPolygon coordinates into polygons object of arrays */\nfunction handleMultiPolygon(coords, polygons, indexMap, coordLength, properties) {\n for (const polygon of coords) {\n handlePolygon(polygon, polygons, indexMap, coordLength, properties);\n }\n}\n\n/** Wrap each array in an accessor object with value and size keys */\nfunction makeAccessorObjects(points, lines, polygons, coordLength): BinaryFeatures {\n const returnObj = {\n points: {\n ...points,\n positions: {value: points.positions, size: coordLength},\n globalFeatureIds: {value: points.globalFeatureIds, size: 1},\n featureIds: {value: points.featureIds, size: 1},\n type: 'Point'\n },\n lines: {\n ...lines,\n pathIndices: {value: lines.pathIndices, size: 1},\n positions: {value: lines.positions, size: coordLength},\n globalFeatureIds: {value: lines.globalFeatureIds, size: 1},\n featureIds: {value: lines.featureIds, size: 1},\n type: 'LineString'\n },\n polygons: {\n ...polygons,\n polygonIndices: {value: polygons.polygonIndices, size: 1},\n primitivePolygonIndices: {value: polygons.primitivePolygonIndices, size: 1},\n positions: {value: polygons.positions, size: coordLength},\n globalFeatureIds: {value: polygons.globalFeatureIds, size: 1},\n featureIds: {value: polygons.featureIds, size: 1},\n type: 'Polygon'\n }\n };\n\n for (const geomType in returnObj) {\n for (const numericProp in returnObj[geomType].numericProps) {\n returnObj[geomType].numericProps[numericProp] = {\n value: returnObj[geomType].numericProps[numericProp],\n size: 1\n };\n }\n }\n\n return returnObj as unknown as BinaryFeatures;\n}\n\n/** Add numeric properties to object */\nfunction fillNumericProperties(object, properties, index, length) {\n for (const numericPropName in object.numericProps) {\n if (numericPropName in properties) {\n object.numericProps[numericPropName].set(\n new Array(length).fill(properties[numericPropName]),\n index\n );\n }\n }\n}\n\n/** Keep string properties in object */\nfunction keepStringProperties(properties, numericKeys: string[]): GeoJsonProperties {\n const props = {};\n for (const key in properties) {\n if (!numericKeys.includes(key)) {\n props[key] = properties[key];\n }\n }\n return props;\n}\n\n/** @param coords is expected to be a list of arrays, each with length 2-3 */\nfunction fillCoords(array, coords, startVertex, coordLength): void {\n let index = startVertex * coordLength;\n for (const coord of coords) {\n array.set(coord, index);\n index += coordLength;\n }\n}\n\n// TODO - how does this work? Different `coordinates` have different nesting\nfunction flatten(arrays): number[][] {\n return [].concat(...arrays);\n}\n\nfunction isNumeric(x: any): boolean {\n return Number.isFinite(x);\n}\n"],"file":"geojson-to-binary.js"}
1
+ {"version":3,"sources":["../../../src/lib/geojson-to-binary.ts"],"names":["geojsonToBinary","features","options","firstPassData","firstPass","secondPass","coordLength","numericPropKeys","PositionDataType","Float32Array","TEST_EXPORTS","pointPositionsCount","pointFeaturesCount","linePositionsCount","linePathsCount","lineFeaturesCount","polygonPositionsCount","polygonObjectsCount","polygonRingsCount","polygonFeaturesCount","coordLengths","Set","propArrayTypes","feature","geometry","type","add","coordinates","length","point","coord","line","flatten","polygon","Error","properties","key","val","deduceArrayType","size","Math","max","Object","keys","filter","k","Array","GlobalFeatureIdsDataType","Uint32Array","Uint16Array","points","positions","globalFeatureIds","featureIds","numericProps","fields","lines","pathIndices","polygons","polygonIndices","primitivePolygonIndices","object","propName","TypedArray","indexMap","pointPosition","pointFeature","linePosition","linePath","lineFeature","polygonPosition","polygonObject","polygonRing","polygonFeature","handlePoint","push","keepStringProperties","handleMultiPoint","handleLineString","handleMultiLineString","handlePolygon","handleMultiPolygon","makeAccessorObjects","coords","set","fillNumericProperties","fillCoords","nPositions","fill","ring","returnObj","value","geomType","numericProp","index","numericPropName","numericKeys","props","includes","array","startVertex","arrays","concat","x","constructor","Number","isFinite","Float64Array","fround"],"mappings":"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","sourcesContent":["import {Feature, GeoJsonProperties} from '@loaders.gl/schema';\nimport type {BinaryFeatures} from '@loaders.gl/schema';\n\nexport type GeojsonToBinaryOptions = {\n coordLength?: number;\n numericPropKeys?: string[];\n PositionDataType?: Function;\n};\n\n/** Convert GeoJSON features to flat binary arrays */\nexport function geojsonToBinary(\n features: Feature[],\n options: GeojsonToBinaryOptions = {}\n): BinaryFeatures {\n const firstPassData = firstPass(features);\n return secondPass(features, firstPassData, {\n coordLength: options.coordLength || firstPassData.coordLength,\n numericPropKeys: options.numericPropKeys || firstPassData.numericPropKeys,\n PositionDataType: options.PositionDataType || Float32Array\n });\n}\n\nexport const TEST_EXPORTS = {\n firstPass,\n secondPass\n};\n\ntype PropArrayConstructor = Float32ArrayConstructor | Float64ArrayConstructor | ArrayConstructor;\n\ntype FirstPassData = {\n coordLength: number;\n numericPropKeys: string[];\n propArrayTypes: {[key: string]: PropArrayConstructor};\n\n pointPositionsCount: number;\n pointFeaturesCount: number;\n linePositionsCount: number;\n linePathsCount: number;\n lineFeaturesCount: number;\n polygonPositionsCount: number;\n polygonObjectsCount: number;\n polygonRingsCount: number;\n polygonFeaturesCount: number;\n};\n\n/**\n * Initial scan over GeoJSON features\n * Counts number of coordinates of each geometry type and\n * keeps track of the max coordinate dimensions\n */\n// eslint-disable-next-line complexity, max-statements\nfunction firstPass(features: Feature[]): FirstPassData {\n // Counts the number of _positions_, so [x, y, z] counts as one\n let pointPositionsCount = 0;\n let pointFeaturesCount = 0;\n let linePositionsCount = 0;\n let linePathsCount = 0;\n let lineFeaturesCount = 0;\n let polygonPositionsCount = 0;\n let polygonObjectsCount = 0;\n let polygonRingsCount = 0;\n let polygonFeaturesCount = 0;\n const coordLengths = new Set<number>();\n const propArrayTypes = {};\n\n for (const feature of features) {\n const geometry = feature.geometry;\n switch (geometry.type) {\n case 'Point':\n pointFeaturesCount++;\n pointPositionsCount++;\n coordLengths.add(geometry.coordinates.length);\n break;\n case 'MultiPoint':\n pointFeaturesCount++;\n pointPositionsCount += geometry.coordinates.length;\n for (const point of geometry.coordinates) {\n coordLengths.add(point.length);\n }\n break;\n case 'LineString':\n lineFeaturesCount++;\n linePositionsCount += geometry.coordinates.length;\n linePathsCount++;\n\n for (const coord of geometry.coordinates) {\n coordLengths.add(coord.length);\n }\n break;\n case 'MultiLineString':\n lineFeaturesCount++;\n for (const line of geometry.coordinates) {\n linePositionsCount += line.length;\n linePathsCount++;\n\n // eslint-disable-next-line max-depth\n for (const coord of line) {\n coordLengths.add(coord.length);\n }\n }\n break;\n case 'Polygon':\n polygonFeaturesCount++;\n polygonObjectsCount++;\n polygonRingsCount += geometry.coordinates.length;\n polygonPositionsCount += flatten(geometry.coordinates).length;\n\n for (const coord of flatten(geometry.coordinates)) {\n coordLengths.add(coord.length);\n }\n break;\n case 'MultiPolygon':\n polygonFeaturesCount++;\n for (const polygon of geometry.coordinates) {\n polygonObjectsCount++;\n polygonRingsCount += polygon.length;\n polygonPositionsCount += flatten(polygon).length;\n\n // eslint-disable-next-line max-depth\n for (const coord of flatten(polygon)) {\n coordLengths.add(coord.length);\n }\n }\n break;\n default:\n throw new Error(`Unsupported geometry type: ${geometry.type}`);\n }\n\n if (feature.properties) {\n for (const key in feature.properties) {\n const val = feature.properties[key];\n\n // If property has not been seen before, or if property has been numeric\n // in all previous features, check if numeric in this feature\n // If not numeric, Array is stored to prevent rechecking in the future\n // Additionally, detects if 64 bit precision is required\n propArrayTypes[key] = deduceArrayType(val, propArrayTypes[key]);\n }\n }\n }\n\n return {\n coordLength: coordLengths.size > 0 ? Math.max(...coordLengths) : 2,\n\n pointPositionsCount,\n pointFeaturesCount,\n linePositionsCount,\n linePathsCount,\n lineFeaturesCount,\n polygonPositionsCount,\n polygonObjectsCount,\n polygonRingsCount,\n polygonFeaturesCount,\n\n // Array of keys whose values are always numeric\n numericPropKeys: Object.keys(propArrayTypes).filter((k) => propArrayTypes[k] !== Array),\n propArrayTypes\n };\n}\n\n/**\n * Second scan over GeoJSON features\n * Fills coordinates into pre-allocated typed arrays\n */\n// eslint-disable-next-line complexity\nfunction secondPass(\n features,\n firstPassData: FirstPassData,\n options: Required<GeojsonToBinaryOptions>\n) {\n const {\n pointPositionsCount,\n pointFeaturesCount,\n linePositionsCount,\n linePathsCount,\n lineFeaturesCount,\n polygonPositionsCount,\n polygonObjectsCount,\n polygonRingsCount,\n propArrayTypes,\n polygonFeaturesCount\n } = firstPassData;\n const {coordLength, numericPropKeys, PositionDataType = Float32Array} = options;\n const GlobalFeatureIdsDataType = features.length > 65535 ? Uint32Array : Uint16Array;\n const points = {\n // @ts-ignore Typescript doesn't like dynamic constructors\n positions: new PositionDataType(pointPositionsCount * coordLength),\n globalFeatureIds: new GlobalFeatureIdsDataType(pointPositionsCount),\n featureIds:\n pointFeaturesCount > 65535\n ? new Uint32Array(pointPositionsCount)\n : new Uint16Array(pointPositionsCount),\n numericProps: {},\n properties: Array<any>(),\n fields: Array<any>()\n };\n const lines = {\n // @ts-ignore Typescript doesn't like dynamic constructors\n positions: new PositionDataType(linePositionsCount * coordLength),\n pathIndices:\n linePositionsCount > 65535\n ? new Uint32Array(linePathsCount + 1)\n : new Uint16Array(linePathsCount + 1),\n globalFeatureIds: new GlobalFeatureIdsDataType(linePositionsCount),\n featureIds:\n lineFeaturesCount > 65535\n ? new Uint32Array(linePositionsCount)\n : new Uint16Array(linePositionsCount),\n numericProps: {},\n properties: Array<any>(),\n fields: Array<any>()\n };\n const polygons = {\n // @ts-ignore Typescript doesn't like dynamic constructors\n positions: new PositionDataType(polygonPositionsCount * coordLength),\n polygonIndices:\n polygonPositionsCount > 65535\n ? new Uint32Array(polygonObjectsCount + 1)\n : new Uint16Array(polygonObjectsCount + 1),\n primitivePolygonIndices:\n polygonPositionsCount > 65535\n ? new Uint32Array(polygonRingsCount + 1)\n : new Uint16Array(polygonRingsCount + 1),\n globalFeatureIds: new GlobalFeatureIdsDataType(polygonPositionsCount),\n featureIds:\n polygonFeaturesCount > 65535\n ? new Uint32Array(polygonPositionsCount)\n : new Uint16Array(polygonPositionsCount),\n numericProps: {},\n properties: Array<any>(),\n fields: Array<any>()\n };\n\n // Instantiate numeric properties arrays; one value per vertex\n for (const object of [points, lines, polygons]) {\n for (const propName of numericPropKeys || []) {\n // If property has been numeric in all previous features in which the property existed, check\n // if numeric in this feature\n const TypedArray = propArrayTypes[propName];\n object.numericProps[propName] = new TypedArray(object.positions.length / coordLength);\n }\n }\n\n // Set last element of path/polygon indices as positions length\n lines.pathIndices[linePathsCount] = linePositionsCount;\n polygons.polygonIndices[polygonObjectsCount] = polygonPositionsCount;\n polygons.primitivePolygonIndices[polygonRingsCount] = polygonPositionsCount;\n\n const indexMap = {\n pointPosition: 0,\n pointFeature: 0,\n linePosition: 0,\n linePath: 0,\n lineFeature: 0,\n polygonPosition: 0,\n polygonObject: 0,\n polygonRing: 0,\n polygonFeature: 0,\n feature: 0\n };\n\n for (const feature of features) {\n const geometry = feature.geometry;\n const properties: GeoJsonProperties = feature.properties || {};\n\n switch (geometry.type) {\n case 'Point':\n handlePoint(geometry.coordinates, points, indexMap, coordLength, properties);\n points.properties.push(keepStringProperties(properties, numericPropKeys));\n indexMap.pointFeature++;\n break;\n case 'MultiPoint':\n handleMultiPoint(geometry.coordinates, points, indexMap, coordLength, properties);\n points.properties.push(keepStringProperties(properties, numericPropKeys));\n indexMap.pointFeature++;\n break;\n case 'LineString':\n handleLineString(geometry.coordinates, lines, indexMap, coordLength, properties);\n lines.properties.push(keepStringProperties(properties, numericPropKeys));\n indexMap.lineFeature++;\n break;\n case 'MultiLineString':\n handleMultiLineString(geometry.coordinates, lines, indexMap, coordLength, properties);\n lines.properties.push(keepStringProperties(properties, numericPropKeys));\n indexMap.lineFeature++;\n break;\n case 'Polygon':\n handlePolygon(geometry.coordinates, polygons, indexMap, coordLength, properties);\n polygons.properties.push(keepStringProperties(properties, numericPropKeys));\n indexMap.polygonFeature++;\n break;\n case 'MultiPolygon':\n handleMultiPolygon(geometry.coordinates, polygons, indexMap, coordLength, properties);\n polygons.properties.push(keepStringProperties(properties, numericPropKeys));\n indexMap.polygonFeature++;\n break;\n default:\n throw new Error('Invalid geometry type');\n }\n\n indexMap.feature++;\n }\n\n // Wrap each array in an accessor object with value and size keys\n return makeAccessorObjects(points, lines, polygons, coordLength);\n}\n\n/** Fills Point coordinates into points object of arrays */\nfunction handlePoint(coords, points, indexMap, coordLength, properties) {\n points.positions.set(coords, indexMap.pointPosition * coordLength);\n points.globalFeatureIds[indexMap.pointPosition] = indexMap.feature;\n points.featureIds[indexMap.pointPosition] = indexMap.pointFeature;\n\n fillNumericProperties(points, properties, indexMap.pointPosition, 1);\n indexMap.pointPosition++;\n}\n\n/** Fills MultiPoint coordinates into points object of arrays */\nfunction handleMultiPoint(coords, points, indexMap, coordLength, properties) {\n for (const point of coords) {\n handlePoint(point, points, indexMap, coordLength, properties);\n }\n}\n\n/** Fills LineString coordinates into lines object of arrays */\nfunction handleLineString(coords, lines, indexMap, coordLength, properties) {\n lines.pathIndices[indexMap.linePath] = indexMap.linePosition;\n indexMap.linePath++;\n\n fillCoords(lines.positions, coords, indexMap.linePosition, coordLength);\n\n const nPositions = coords.length;\n fillNumericProperties(lines, properties, indexMap.linePosition, nPositions);\n\n lines.globalFeatureIds.set(\n new Uint32Array(nPositions).fill(indexMap.feature),\n indexMap.linePosition\n );\n lines.featureIds.set(\n new Uint32Array(nPositions).fill(indexMap.lineFeature),\n indexMap.linePosition\n );\n indexMap.linePosition += nPositions;\n}\n\n/** Fills MultiLineString coordinates into lines object of arrays */\nfunction handleMultiLineString(coords, lines, indexMap, coordLength, properties) {\n for (const line of coords) {\n handleLineString(line, lines, indexMap, coordLength, properties);\n }\n}\n\n/** Fills Polygon coordinates into polygons object of arrays */\nfunction handlePolygon(coords, polygons, indexMap, coordLength, properties) {\n polygons.polygonIndices[indexMap.polygonObject] = indexMap.polygonPosition;\n indexMap.polygonObject++;\n\n for (const ring of coords) {\n polygons.primitivePolygonIndices[indexMap.polygonRing] = indexMap.polygonPosition;\n indexMap.polygonRing++;\n\n fillCoords(polygons.positions, ring, indexMap.polygonPosition, coordLength);\n\n const nPositions = ring.length;\n fillNumericProperties(polygons, properties, indexMap.polygonPosition, nPositions);\n\n polygons.globalFeatureIds.set(\n new Uint32Array(nPositions).fill(indexMap.feature),\n indexMap.polygonPosition\n );\n polygons.featureIds.set(\n new Uint32Array(nPositions).fill(indexMap.polygonFeature),\n indexMap.polygonPosition\n );\n indexMap.polygonPosition += nPositions;\n }\n}\n\n/** Fills MultiPolygon coordinates into polygons object of arrays */\nfunction handleMultiPolygon(coords, polygons, indexMap, coordLength, properties) {\n for (const polygon of coords) {\n handlePolygon(polygon, polygons, indexMap, coordLength, properties);\n }\n}\n\n/** Wrap each array in an accessor object with value and size keys */\nfunction makeAccessorObjects(points, lines, polygons, coordLength): BinaryFeatures {\n const returnObj = {\n points: {\n ...points,\n positions: {value: points.positions, size: coordLength},\n globalFeatureIds: {value: points.globalFeatureIds, size: 1},\n featureIds: {value: points.featureIds, size: 1},\n type: 'Point'\n },\n lines: {\n ...lines,\n pathIndices: {value: lines.pathIndices, size: 1},\n positions: {value: lines.positions, size: coordLength},\n globalFeatureIds: {value: lines.globalFeatureIds, size: 1},\n featureIds: {value: lines.featureIds, size: 1},\n type: 'LineString'\n },\n polygons: {\n ...polygons,\n polygonIndices: {value: polygons.polygonIndices, size: 1},\n primitivePolygonIndices: {value: polygons.primitivePolygonIndices, size: 1},\n positions: {value: polygons.positions, size: coordLength},\n globalFeatureIds: {value: polygons.globalFeatureIds, size: 1},\n featureIds: {value: polygons.featureIds, size: 1},\n type: 'Polygon'\n }\n };\n\n for (const geomType in returnObj) {\n for (const numericProp in returnObj[geomType].numericProps) {\n returnObj[geomType].numericProps[numericProp] = {\n value: returnObj[geomType].numericProps[numericProp],\n size: 1\n };\n }\n }\n\n return returnObj as unknown as BinaryFeatures;\n}\n\n/** Add numeric properties to object */\nfunction fillNumericProperties(object, properties, index, length) {\n for (const numericPropName in object.numericProps) {\n if (numericPropName in properties) {\n object.numericProps[numericPropName].set(\n new Array(length).fill(properties[numericPropName]),\n index\n );\n }\n }\n}\n\n/** Keep string properties in object */\nfunction keepStringProperties(properties, numericKeys: string[]): GeoJsonProperties {\n const props = {};\n for (const key in properties) {\n if (!numericKeys.includes(key)) {\n props[key] = properties[key];\n }\n }\n return props;\n}\n\n/** @param coords is expected to be a list of arrays, each with length 2-3 */\nfunction fillCoords(array, coords, startVertex, coordLength): void {\n let index = startVertex * coordLength;\n for (const coord of coords) {\n array.set(coord, index);\n index += coordLength;\n }\n}\n\n// TODO - how does this work? Different `coordinates` have different nesting\nfunction flatten(arrays): number[][] {\n return [].concat(...arrays);\n}\n\nfunction deduceArrayType(x: any, constructor: PropArrayConstructor): PropArrayConstructor {\n if (constructor === Array || !Number.isFinite(x)) {\n return Array;\n }\n\n // If this or previous value required 64bits use Float64Array\n return constructor === Float64Array || Math.fround(x) !== x ? Float64Array : Float32Array;\n}\n"],"file":"geojson-to-binary.js"}
@@ -11,9 +11,13 @@ export declare const TEST_EXPORTS: {
11
11
  firstPass: typeof firstPass;
12
12
  secondPass: typeof secondPass;
13
13
  };
14
+ declare type PropArrayConstructor = Float32ArrayConstructor | Float64ArrayConstructor | ArrayConstructor;
14
15
  declare type FirstPassData = {
15
16
  coordLength: number;
16
17
  numericPropKeys: string[];
18
+ propArrayTypes: {
19
+ [key: string]: PropArrayConstructor;
20
+ };
17
21
  pointPositionsCount: number;
18
22
  pointFeaturesCount: number;
19
23
  linePositionsCount: number;
@@ -1 +1 @@
1
- {"version":3,"file":"geojson-to-binary.d.ts","sourceRoot":"","sources":["../../src/lib/geojson-to-binary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAoB,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,oBAAoB,CAAC;AAEvD,oBAAY,sBAAsB,GAAG;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,gBAAgB,CAAC,EAAE,QAAQ,CAAC;CAC7B,CAAC;AAEF,qDAAqD;AACrD,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,OAAO,EAAE,EACnB,OAAO,GAAE,sBAA2B,GACnC,cAAc,CAOhB;AAED,eAAO,MAAM,YAAY;;;CAGxB,CAAC;AAEF,aAAK,aAAa,GAAG;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,EAAE,CAAC;IAE1B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oBAAoB,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF;;;;GAIG;AAEH,iBAAS,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,aAAa,CA4GrD;AAED;;;GAGG;AAEH,iBAAS,UAAU,CACjB,QAAQ,KAAA,EACR,aAAa,EAAE,aAAa,EAC5B,OAAO,EAAE,QAAQ,CAAC,sBAAsB,CAAC,kBAuI1C"}
1
+ {"version":3,"file":"geojson-to-binary.d.ts","sourceRoot":"","sources":["../../src/lib/geojson-to-binary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAoB,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,oBAAoB,CAAC;AAEvD,oBAAY,sBAAsB,GAAG;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,gBAAgB,CAAC,EAAE,QAAQ,CAAC;CAC7B,CAAC;AAEF,qDAAqD;AACrD,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,OAAO,EAAE,EACnB,OAAO,GAAE,sBAA2B,GACnC,cAAc,CAOhB;AAED,eAAO,MAAM,YAAY;;;CAGxB,CAAC;AAEF,aAAK,oBAAoB,GAAG,uBAAuB,GAAG,uBAAuB,GAAG,gBAAgB,CAAC;AAEjG,aAAK,aAAa,GAAG;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,EAAE;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,oBAAoB,CAAA;KAAC,CAAC;IAEtD,mBAAmB,EAAE,MAAM,CAAC;IAC5B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oBAAoB,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF;;;;GAIG;AAEH,iBAAS,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,aAAa,CA2GrD;AAED;;;GAGG;AAEH,iBAAS,UAAU,CACjB,QAAQ,KAAA,EACR,aAAa,EAAE,aAAa,EAC5B,OAAO,EAAE,QAAQ,CAAC,sBAAsB,CAAC,kBAyI1C"}
@@ -33,7 +33,7 @@ function firstPass(features) {
33
33
  let polygonRingsCount = 0;
34
34
  let polygonFeaturesCount = 0;
35
35
  const coordLengths = new Set();
36
- const numericPropKeys = {};
36
+ const propArrayTypes = {};
37
37
  for (const feature of features) {
38
38
  const geometry = feature.geometry;
39
39
  switch (geometry.type) {
@@ -97,11 +97,9 @@ function firstPass(features) {
97
97
  const val = feature.properties[key];
98
98
  // If property has not been seen before, or if property has been numeric
99
99
  // in all previous features, check if numeric in this feature
100
- // If not numeric, false is stored to prevent rechecking in the future
101
- numericPropKeys[key] =
102
- numericPropKeys[key] || numericPropKeys[key] === undefined
103
- ? isNumeric(val)
104
- : numericPropKeys[key];
100
+ // If not numeric, Array is stored to prevent rechecking in the future
101
+ // Additionally, detects if 64 bit precision is required
102
+ propArrayTypes[key] = deduceArrayType(val, propArrayTypes[key]);
105
103
  }
106
104
  }
107
105
  }
@@ -117,7 +115,8 @@ function firstPass(features) {
117
115
  polygonRingsCount,
118
116
  polygonFeaturesCount,
119
117
  // Array of keys whose values are always numeric
120
- numericPropKeys: Object.keys(numericPropKeys).filter((k) => numericPropKeys[k])
118
+ numericPropKeys: Object.keys(propArrayTypes).filter((k) => propArrayTypes[k] !== Array),
119
+ propArrayTypes
121
120
  };
122
121
  }
123
122
  /**
@@ -126,7 +125,7 @@ function firstPass(features) {
126
125
  */
127
126
  // eslint-disable-next-line complexity
128
127
  function secondPass(features, firstPassData, options) {
129
- const { pointPositionsCount, pointFeaturesCount, linePositionsCount, linePathsCount, lineFeaturesCount, polygonPositionsCount, polygonObjectsCount, polygonRingsCount, polygonFeaturesCount } = firstPassData;
128
+ const { pointPositionsCount, pointFeaturesCount, linePositionsCount, linePathsCount, lineFeaturesCount, polygonPositionsCount, polygonObjectsCount, polygonRingsCount, propArrayTypes, polygonFeaturesCount } = firstPassData;
130
129
  const { coordLength, numericPropKeys, PositionDataType = Float32Array } = options;
131
130
  const GlobalFeatureIdsDataType = features.length > 65535 ? Uint32Array : Uint16Array;
132
131
  const points = {
@@ -176,7 +175,8 @@ function secondPass(features, firstPassData, options) {
176
175
  for (const propName of numericPropKeys || []) {
177
176
  // If property has been numeric in all previous features in which the property existed, check
178
177
  // if numeric in this feature
179
- object.numericProps[propName] = new Float32Array(object.positions.length / coordLength);
178
+ const TypedArray = propArrayTypes[propName];
179
+ object.numericProps[propName] = new TypedArray(object.positions.length / coordLength);
180
180
  }
181
181
  }
182
182
  // Set last element of path/polygon indices as positions length
@@ -357,6 +357,10 @@ function fillCoords(array, coords, startVertex, coordLength) {
357
357
  function flatten(arrays) {
358
358
  return [].concat(...arrays);
359
359
  }
360
- function isNumeric(x) {
361
- return Number.isFinite(x);
360
+ function deduceArrayType(x, constructor) {
361
+ if (constructor === Array || !Number.isFinite(x)) {
362
+ return Array;
363
+ }
364
+ // If this or previous value required 64bits use Float64Array
365
+ return constructor === Float64Array || Math.fround(x) !== x ? Float64Array : Float32Array;
362
366
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@loaders.gl/gis",
3
3
  "description": "Helpers for GIS category data",
4
- "version": "3.1.0-beta.3",
4
+ "version": "3.1.0",
5
5
  "license": "MIT",
6
6
  "publishConfig": {
7
7
  "access": "public"
@@ -24,13 +24,13 @@
24
24
  "README.md"
25
25
  ],
26
26
  "dependencies": {
27
- "@loaders.gl/loader-utils": "3.1.0-beta.3",
28
- "@loaders.gl/schema": "3.1.0-beta.3",
27
+ "@loaders.gl/loader-utils": "3.1.0",
28
+ "@loaders.gl/schema": "3.1.0",
29
29
  "@mapbox/vector-tile": "^1.3.1",
30
30
  "pbf": "^3.2.1"
31
31
  },
32
32
  "devDependencies": {
33
33
  "@math.gl/proj4": "^3.5.1"
34
34
  },
35
- "gitHead": "3537c382b3ea4e092b24b6f94c3edee72076039c"
35
+ "gitHead": "b02a011b5a6d6aa6c5870819045c70db168cb930"
36
36
  }