@maplibre/mlt 1.1.7 → 1.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/decoding/bigEndianDecode.d.ts +1 -1
- package/dist/decoding/bigEndianDecode.js.map +1 -1
- package/dist/decoding/decodingTestUtils.d.ts +3 -2
- package/dist/decoding/decodingTestUtils.js +21 -22
- package/dist/decoding/decodingTestUtils.js.map +1 -1
- package/dist/decoding/fastPforDecoder.d.ts +5 -6
- package/dist/decoding/fastPforDecoder.js +6 -6
- package/dist/decoding/fastPforDecoder.js.map +1 -1
- package/dist/decoding/fastPforShared.d.ts +0 -2
- package/dist/decoding/fastPforShared.js.map +1 -1
- package/dist/decoding/fastPforUnpack.d.ts +23 -23
- package/dist/decoding/fastPforUnpack.js.map +1 -1
- package/dist/decoding/geometryDecoder.js +41 -41
- package/dist/decoding/geometryDecoder.js.map +1 -1
- package/dist/decoding/intWrapper.js +0 -1
- package/dist/decoding/intWrapper.js.map +1 -1
- package/dist/decoding/integerDecodingUtils.d.ts +21 -17
- package/dist/decoding/integerDecodingUtils.js +71 -30
- package/dist/decoding/integerDecodingUtils.js.map +1 -1
- package/dist/decoding/integerStreamDecoder.d.ts +14 -10
- package/dist/decoding/integerStreamDecoder.js +150 -63
- package/dist/decoding/integerStreamDecoder.js.map +1 -1
- package/dist/decoding/propertyDecoder.js +33 -27
- package/dist/decoding/propertyDecoder.js.map +1 -1
- package/dist/decoding/stringDecoder.d.ts +1 -1
- package/dist/decoding/stringDecoder.js +32 -30
- package/dist/decoding/stringDecoder.js.map +1 -1
- package/dist/decoding/unpackNullableUtils.d.ts +2 -2
- package/dist/decoding/unpackNullableUtils.js.map +1 -1
- package/dist/encoding/bigEndianEncode.d.ts +1 -1
- package/dist/encoding/bigEndianEncode.js.map +1 -1
- package/dist/encoding/constGeometryVectorEncoder.js +9 -9
- package/dist/encoding/constGeometryVectorEncoder.js.map +1 -1
- package/dist/encoding/encodingUtils.d.ts +1 -1
- package/dist/encoding/encodingUtils.js +1 -1
- package/dist/encoding/encodingUtils.js.map +1 -1
- package/dist/encoding/fastPforEncoder.d.ts +4 -5
- package/dist/encoding/fastPforEncoder.js +4 -4
- package/dist/encoding/fastPforEncoder.js.map +1 -1
- package/dist/encoding/integerEncodingUtils.d.ts +14 -14
- package/dist/encoding/integerEncodingUtils.js +39 -31
- package/dist/encoding/integerEncodingUtils.js.map +1 -1
- package/dist/encoding/integerStreamEncoder.d.ts +2 -1
- package/dist/encoding/integerStreamEncoder.js +52 -18
- package/dist/encoding/integerStreamEncoder.js.map +1 -1
- package/dist/encoding/propertyEncoder.js +9 -16
- package/dist/encoding/propertyEncoder.js.map +1 -1
- package/dist/encoding/stringEncoder.js +9 -42
- package/dist/encoding/stringEncoder.js.map +1 -1
- package/dist/metadata/tile/logicalStreamType.d.ts +5 -9
- package/dist/metadata/tile/logicalStreamType.js +1 -19
- package/dist/metadata/tile/logicalStreamType.js.map +1 -1
- package/dist/metadata/tile/physicalLevelTechnique.d.ts +1 -5
- package/dist/metadata/tile/physicalLevelTechnique.js +0 -4
- package/dist/metadata/tile/physicalLevelTechnique.js.map +1 -1
- package/dist/metadata/tile/streamMetadataDecoder.d.ts +1 -1
- package/dist/metadata/tile/streamMetadataDecoder.js +9 -4
- package/dist/metadata/tile/streamMetadataDecoder.js.map +1 -1
- package/dist/mltDecoder.js +25 -29
- package/dist/mltDecoder.js.map +1 -1
- package/dist/vector/constant/{intConstVector.d.ts → int32ConstVector.d.ts} +2 -2
- package/dist/vector/constant/int32ConstVector.js +10 -0
- package/dist/vector/constant/int32ConstVector.js.map +1 -0
- package/dist/vector/constant/{longConstVector.d.ts → int64ConstVector.d.ts} +2 -2
- package/dist/vector/constant/int64ConstVector.js +10 -0
- package/dist/vector/constant/int64ConstVector.js.map +1 -0
- package/dist/vector/dictionary/stringDictionaryVector.d.ts +1 -1
- package/dist/vector/dictionary/stringDictionaryVector.js +0 -1
- package/dist/vector/dictionary/stringDictionaryVector.js.map +1 -1
- package/dist/vector/featureTable.d.ts +4 -4
- package/dist/vector/featureTable.js +9 -14
- package/dist/vector/featureTable.js.map +1 -1
- package/dist/vector/filter/flatSelectionVector.js +0 -2
- package/dist/vector/filter/flatSelectionVector.js.map +1 -1
- package/dist/vector/filter/sequenceSelectionVector.js +1 -5
- package/dist/vector/filter/sequenceSelectionVector.js.map +1 -1
- package/dist/vector/flat/bitVector.js +0 -2
- package/dist/vector/flat/bitVector.js.map +1 -1
- package/dist/vector/flat/booleanFlatVector.js +0 -1
- package/dist/vector/flat/booleanFlatVector.js.map +1 -1
- package/dist/vector/flat/{intFlatVector.d.ts → int32FlatVector.d.ts} +1 -1
- package/dist/vector/flat/{intFlatVector.js → int32FlatVector.js} +2 -2
- package/dist/vector/flat/int32FlatVector.js.map +1 -0
- package/dist/vector/flat/{longFlatVector.d.ts → int64FlatVector.d.ts} +1 -1
- package/dist/vector/flat/{longFlatVector.js → int64FlatVector.js} +2 -2
- package/dist/vector/flat/int64FlatVector.js.map +1 -0
- package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.d.ts +1 -1
- package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.js +1 -7
- package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.js.map +1 -1
- package/dist/vector/geometry/constGeometryVector.d.ts +3 -3
- package/dist/vector/geometry/constGeometryVector.js +0 -2
- package/dist/vector/geometry/constGeometryVector.js.map +1 -1
- package/dist/vector/geometry/constGpuVector.d.ts +2 -2
- package/dist/vector/geometry/constGpuVector.js +0 -2
- package/dist/vector/geometry/constGpuVector.js.map +1 -1
- package/dist/vector/geometry/flatGeometryVector.d.ts +3 -3
- package/dist/vector/geometry/flatGeometryVector.js +1 -5
- package/dist/vector/geometry/flatGeometryVector.js.map +1 -1
- package/dist/vector/geometry/flatGpuVector.d.ts +2 -2
- package/dist/vector/geometry/flatGpuVector.js +0 -1
- package/dist/vector/geometry/flatGpuVector.js.map +1 -1
- package/dist/vector/geometry/geometryVector.d.ts +3 -3
- package/dist/vector/geometry/geometryVector.js +0 -5
- package/dist/vector/geometry/geometryVector.js.map +1 -1
- package/dist/vector/geometry/geometryVectorConverter.js.map +1 -1
- package/dist/vector/geometry/gpuVector.d.ts +4 -4
- package/dist/vector/geometry/gpuVector.js +0 -4
- package/dist/vector/geometry/gpuVector.js.map +1 -1
- package/dist/vector/geometry/topologyVector.d.ts +3 -3
- package/dist/vector/geometry/topologyVector.js.map +1 -1
- package/dist/vector/idVector.d.ts +8 -0
- package/dist/vector/idVector.js +2 -0
- package/dist/vector/idVector.js.map +1 -0
- package/dist/vector/sequence/{intSequenceVector.d.ts → int32SequenceVector.d.ts} +1 -1
- package/dist/vector/sequence/{intSequenceVector.js → int32SequenceVector.js} +2 -2
- package/dist/vector/sequence/int32SequenceVector.js.map +1 -0
- package/dist/vector/sequence/{longSequenceVector.d.ts → int64SequenceVector.d.ts} +1 -1
- package/dist/vector/sequence/{longSequenceVector.js → int64SequenceVector.js} +2 -2
- package/dist/vector/sequence/int64SequenceVector.js.map +1 -0
- package/dist/vector/sequence/sequenceVector.js +0 -1
- package/dist/vector/sequence/sequenceVector.js.map +1 -1
- package/dist/vector/variableSizeVector.js +0 -1
- package/dist/vector/variableSizeVector.js.map +1 -1
- package/dist/vector/vector.js +0 -4
- package/dist/vector/vector.js.map +1 -1
- package/package.json +7 -7
- package/dist/vector/constant/intConstVector.js +0 -10
- package/dist/vector/constant/intConstVector.js.map +0 -1
- package/dist/vector/constant/longConstVector.js +0 -10
- package/dist/vector/constant/longConstVector.js.map +0 -1
- package/dist/vector/flat/intFlatVector.js.map +0 -1
- package/dist/vector/flat/longFlatVector.js.map +0 -1
- package/dist/vector/intVector.d.ts +0 -8
- package/dist/vector/intVector.js +0 -2
- package/dist/vector/intVector.js.map +0 -1
- package/dist/vector/sequence/intSequenceVector.js.map +0 -1
- package/dist/vector/sequence/longSequenceVector.js.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { decodeStreamMetadata } from "../metadata/tile/streamMetadataDecoder";
|
|
2
|
-
import {
|
|
2
|
+
import { decodeSignedInt32Stream, decodeLengthStreamToOffsetBuffer, decodeUnsignedConstInt32Stream, decodeUnsignedInt32Stream, getVectorType, } from "./integerStreamDecoder";
|
|
3
3
|
import { VectorType } from "../vector/vectorType";
|
|
4
4
|
import { PhysicalStreamType } from "../metadata/tile/physicalStreamType";
|
|
5
5
|
import { LengthType } from "../metadata/tile/lengthType";
|
|
@@ -13,20 +13,20 @@ import { createFlatGpuVector } from "../vector/geometry/flatGpuVector";
|
|
|
13
13
|
export function decodeGeometryColumn(tile, numStreams, offset, numFeatures, scalingData) {
|
|
14
14
|
const geometryTypeMetadata = decodeStreamMetadata(tile, offset);
|
|
15
15
|
const geometryTypesVectorType = getVectorType(geometryTypeMetadata, numFeatures, tile, offset);
|
|
16
|
-
let vertexOffsets
|
|
17
|
-
let vertexBuffer
|
|
18
|
-
let mortonSettings
|
|
19
|
-
let indexBuffer
|
|
16
|
+
let vertexOffsets;
|
|
17
|
+
let vertexBuffer;
|
|
18
|
+
let mortonSettings;
|
|
19
|
+
let indexBuffer;
|
|
20
20
|
if (geometryTypesVectorType === VectorType.CONST) {
|
|
21
|
-
/* All geometries in the
|
|
22
|
-
const geometryType =
|
|
21
|
+
/* All geometries in the column have the same geometry type */
|
|
22
|
+
const geometryType = decodeUnsignedConstInt32Stream(tile, offset, geometryTypeMetadata);
|
|
23
23
|
// Variables for const geometry path (directly decoded as offsets)
|
|
24
|
-
let geometryOffsets
|
|
25
|
-
let partOffsets
|
|
26
|
-
let ringOffsets
|
|
24
|
+
let geometryOffsets;
|
|
25
|
+
let partOffsets;
|
|
26
|
+
let ringOffsets;
|
|
27
27
|
//TODO: use geometryOffsets for that? -> but then tessellated polygons can't be used with normal polygons
|
|
28
28
|
// in one FeatureTable?
|
|
29
|
-
let triangleOffsets
|
|
29
|
+
let triangleOffsets;
|
|
30
30
|
for (let i = 0; i < numStreams - 1; i++) {
|
|
31
31
|
const geometryStreamMetadata = decodeStreamMetadata(tile, offset);
|
|
32
32
|
switch (geometryStreamMetadata.physicalStreamType) {
|
|
@@ -48,17 +48,17 @@ export function decodeGeometryColumn(tile, numStreams, offset, numFeatures, scal
|
|
|
48
48
|
case PhysicalStreamType.OFFSET: {
|
|
49
49
|
switch (geometryStreamMetadata.logicalStreamType.offsetType) {
|
|
50
50
|
case OffsetType.VERTEX:
|
|
51
|
-
vertexOffsets =
|
|
51
|
+
vertexOffsets = decodeUnsignedInt32Stream(tile, offset, geometryStreamMetadata);
|
|
52
52
|
break;
|
|
53
53
|
case OffsetType.INDEX:
|
|
54
|
-
indexBuffer =
|
|
54
|
+
indexBuffer = decodeUnsignedInt32Stream(tile, offset, geometryStreamMetadata);
|
|
55
55
|
break;
|
|
56
56
|
}
|
|
57
57
|
break;
|
|
58
58
|
}
|
|
59
59
|
case PhysicalStreamType.DATA: {
|
|
60
60
|
if (DictionaryType.VERTEX === geometryStreamMetadata.logicalStreamType.dictionaryType) {
|
|
61
|
-
vertexBuffer =
|
|
61
|
+
vertexBuffer = decodeSignedInt32Stream(tile, offset, geometryStreamMetadata, scalingData);
|
|
62
62
|
}
|
|
63
63
|
else {
|
|
64
64
|
const mortonMetadata = geometryStreamMetadata;
|
|
@@ -66,14 +66,14 @@ export function decodeGeometryColumn(tile, numStreams, offset, numFeatures, scal
|
|
|
66
66
|
numBits: mortonMetadata.numBits,
|
|
67
67
|
coordinateShift: mortonMetadata.coordinateShift,
|
|
68
68
|
};
|
|
69
|
-
vertexBuffer =
|
|
69
|
+
vertexBuffer = decodeUnsignedInt32Stream(tile, offset, geometryStreamMetadata, scalingData);
|
|
70
70
|
}
|
|
71
71
|
break;
|
|
72
72
|
}
|
|
73
73
|
}
|
|
74
74
|
}
|
|
75
|
-
if (indexBuffer
|
|
76
|
-
if (geometryOffsets
|
|
75
|
+
if (indexBuffer) {
|
|
76
|
+
if (geometryOffsets !== undefined || partOffsets !== undefined) {
|
|
77
77
|
/* Case when the indices of a Polygon outline are encoded in the tile */
|
|
78
78
|
const topologyVector = { geometryOffsets, partOffsets, ringOffsets };
|
|
79
79
|
return createConstGpuVector(numFeatures, geometryType, triangleOffsets, indexBuffer, vertexBuffer, topologyVector);
|
|
@@ -81,33 +81,33 @@ export function decodeGeometryColumn(tile, numStreams, offset, numFeatures, scal
|
|
|
81
81
|
/* Case when the no Polygon outlines are encoded in the tile */
|
|
82
82
|
return createConstGpuVector(numFeatures, geometryType, triangleOffsets, indexBuffer, vertexBuffer);
|
|
83
83
|
}
|
|
84
|
-
return mortonSettings ===
|
|
84
|
+
return mortonSettings === undefined
|
|
85
85
|
? /* Currently only 2D coordinates (Vec2) are implemented in the encoder */
|
|
86
86
|
createConstGeometryVector(numFeatures, geometryType, { geometryOffsets, partOffsets, ringOffsets }, vertexOffsets, vertexBuffer)
|
|
87
87
|
: createMortonEncodedConstGeometryVector(numFeatures, geometryType, { geometryOffsets, partOffsets, ringOffsets }, vertexOffsets, vertexBuffer, mortonSettings);
|
|
88
88
|
}
|
|
89
89
|
/* Different geometry types are mixed in the geometry column */
|
|
90
|
-
const geometryTypeVector =
|
|
90
|
+
const geometryTypeVector = decodeUnsignedInt32Stream(tile, offset, geometryTypeMetadata);
|
|
91
91
|
// Variables for flat geometry path (decoded as lengths, then converted to offsets)
|
|
92
|
-
let geometryLengths
|
|
93
|
-
let partLengths
|
|
94
|
-
let ringLengths
|
|
92
|
+
let geometryLengths;
|
|
93
|
+
let partLengths;
|
|
94
|
+
let ringLengths;
|
|
95
95
|
//TODO: use geometryOffsets for that? -> but then tessellated polygons can't be used with normal polygons
|
|
96
96
|
// in one FeatureTable?
|
|
97
|
-
let triangleOffsets
|
|
97
|
+
let triangleOffsets;
|
|
98
98
|
for (let i = 0; i < numStreams - 1; i++) {
|
|
99
99
|
const geometryStreamMetadata = decodeStreamMetadata(tile, offset);
|
|
100
100
|
switch (geometryStreamMetadata.physicalStreamType) {
|
|
101
101
|
case PhysicalStreamType.LENGTH:
|
|
102
102
|
switch (geometryStreamMetadata.logicalStreamType.lengthType) {
|
|
103
103
|
case LengthType.GEOMETRIES:
|
|
104
|
-
geometryLengths =
|
|
104
|
+
geometryLengths = decodeUnsignedInt32Stream(tile, offset, geometryStreamMetadata);
|
|
105
105
|
break;
|
|
106
106
|
case LengthType.PARTS:
|
|
107
|
-
partLengths =
|
|
107
|
+
partLengths = decodeUnsignedInt32Stream(tile, offset, geometryStreamMetadata);
|
|
108
108
|
break;
|
|
109
109
|
case LengthType.RINGS:
|
|
110
|
-
ringLengths =
|
|
110
|
+
ringLengths = decodeUnsignedInt32Stream(tile, offset, geometryStreamMetadata);
|
|
111
111
|
break;
|
|
112
112
|
case LengthType.TRIANGLES:
|
|
113
113
|
triangleOffsets = decodeLengthStreamToOffsetBuffer(tile, offset, geometryStreamMetadata);
|
|
@@ -116,16 +116,16 @@ export function decodeGeometryColumn(tile, numStreams, offset, numFeatures, scal
|
|
|
116
116
|
case PhysicalStreamType.OFFSET:
|
|
117
117
|
switch (geometryStreamMetadata.logicalStreamType.offsetType) {
|
|
118
118
|
case OffsetType.VERTEX:
|
|
119
|
-
vertexOffsets =
|
|
119
|
+
vertexOffsets = decodeUnsignedInt32Stream(tile, offset, geometryStreamMetadata);
|
|
120
120
|
break;
|
|
121
121
|
case OffsetType.INDEX:
|
|
122
|
-
indexBuffer =
|
|
122
|
+
indexBuffer = decodeUnsignedInt32Stream(tile, offset, geometryStreamMetadata);
|
|
123
123
|
break;
|
|
124
124
|
}
|
|
125
125
|
break;
|
|
126
126
|
case PhysicalStreamType.DATA:
|
|
127
127
|
if (DictionaryType.VERTEX === geometryStreamMetadata.logicalStreamType.dictionaryType) {
|
|
128
|
-
vertexBuffer =
|
|
128
|
+
vertexBuffer = decodeSignedInt32Stream(tile, offset, geometryStreamMetadata, scalingData);
|
|
129
129
|
}
|
|
130
130
|
else {
|
|
131
131
|
const mortonMetadata = geometryStreamMetadata;
|
|
@@ -133,39 +133,39 @@ export function decodeGeometryColumn(tile, numStreams, offset, numFeatures, scal
|
|
|
133
133
|
numBits: mortonMetadata.numBits,
|
|
134
134
|
coordinateShift: mortonMetadata.coordinateShift,
|
|
135
135
|
};
|
|
136
|
-
vertexBuffer =
|
|
136
|
+
vertexBuffer = decodeUnsignedInt32Stream(tile, offset, geometryStreamMetadata, scalingData);
|
|
137
137
|
}
|
|
138
138
|
break;
|
|
139
139
|
}
|
|
140
140
|
}
|
|
141
141
|
// TODO: refactor the following instructions -> decode in one pass for performance reasons
|
|
142
142
|
/* Calculate the offsets from the length buffer for util access */
|
|
143
|
-
let geometryOffsets
|
|
144
|
-
let partOffsets
|
|
145
|
-
let ringOffsets
|
|
146
|
-
if (geometryLengths
|
|
143
|
+
let geometryOffsets;
|
|
144
|
+
let partOffsets;
|
|
145
|
+
let ringOffsets;
|
|
146
|
+
if (geometryLengths) {
|
|
147
147
|
geometryOffsets = decodeRootLengthStream(geometryTypeVector, geometryLengths, 2);
|
|
148
|
-
if (partLengths
|
|
148
|
+
if (partLengths && ringLengths) {
|
|
149
149
|
partOffsets = decodeLevel1LengthStream(geometryTypeVector, geometryOffsets, partLengths, false);
|
|
150
150
|
ringOffsets = decodeLevel2LengthStream(geometryTypeVector, geometryOffsets, partOffsets, ringLengths);
|
|
151
151
|
}
|
|
152
|
-
else if (partLengths
|
|
152
|
+
else if (partLengths) {
|
|
153
153
|
partOffsets = decodeLevel1WithoutRingBufferLengthStream(geometryTypeVector, geometryOffsets, partLengths);
|
|
154
154
|
}
|
|
155
155
|
}
|
|
156
|
-
else if (partLengths
|
|
156
|
+
else if (partLengths && ringLengths) {
|
|
157
157
|
partOffsets = decodeRootLengthStream(geometryTypeVector, partLengths, 1);
|
|
158
158
|
ringOffsets = decodeLevel1LengthStream(geometryTypeVector, partOffsets, ringLengths, true);
|
|
159
159
|
}
|
|
160
|
-
else if (partLengths
|
|
160
|
+
else if (partLengths) {
|
|
161
161
|
partOffsets = decodeRootLengthStream(geometryTypeVector, partLengths, 0);
|
|
162
162
|
}
|
|
163
|
-
if (indexBuffer
|
|
163
|
+
if (indexBuffer && !partOffsets) {
|
|
164
164
|
/* Case when the indices of a Polygon outline are not encoded in the data so no
|
|
165
165
|
* topology data are present in the tile */
|
|
166
166
|
return createFlatGpuVector(geometryTypeVector, triangleOffsets, indexBuffer, vertexBuffer);
|
|
167
167
|
}
|
|
168
|
-
if (indexBuffer
|
|
168
|
+
if (indexBuffer) {
|
|
169
169
|
/* Case when the indices of a Polygon outline are encoded in the tile */
|
|
170
170
|
return createFlatGpuVector(geometryTypeVector, triangleOffsets, indexBuffer, vertexBuffer, {
|
|
171
171
|
geometryOffsets,
|
|
@@ -173,7 +173,7 @@ export function decodeGeometryColumn(tile, numStreams, offset, numFeatures, scal
|
|
|
173
173
|
ringOffsets,
|
|
174
174
|
});
|
|
175
175
|
}
|
|
176
|
-
return mortonSettings ===
|
|
176
|
+
return mortonSettings === undefined /* Currently only 2D coordinates (Vec2) are implemented in the encoder */
|
|
177
177
|
? createFlatGeometryVector(geometryTypeVector, { geometryOffsets, partOffsets, ringOffsets }, vertexOffsets, vertexBuffer)
|
|
178
178
|
: createFlatGeometryVectorMortonEncoded(geometryTypeVector, { geometryOffsets, partOffsets, ringOffsets }, vertexOffsets, vertexBuffer, mortonSettings);
|
|
179
179
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"geometryDecoder.js","sourceRoot":"","sources":["../../src/decoding/geometryDecoder.ts"],"names":[],"mappings":"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","sourcesContent":["import { decodeStreamMetadata, type MortonEncodedStreamMetadata } from \"../metadata/tile/streamMetadataDecoder\";\nimport type IntWrapper from \"./intWrapper\";\nimport {\n decodeConstIntStream,\n decodeIntStream,\n decodeLengthStreamToOffsetBuffer,\n getVectorType,\n} from \"./integerStreamDecoder\";\nimport { VectorType } from \"../vector/vectorType\";\nimport { PhysicalStreamType } from \"../metadata/tile/physicalStreamType\";\nimport { LengthType } from \"../metadata/tile/lengthType\";\nimport { DictionaryType } from \"../metadata/tile/dictionaryType\";\nimport {\n createConstGeometryVector,\n createMortonEncodedConstGeometryVector,\n} from \"../vector/geometry/constGeometryVector\";\nimport { createFlatGeometryVector, createFlatGeometryVectorMortonEncoded } from \"../vector/geometry/flatGeometryVector\";\nimport { OffsetType } from \"../metadata/tile/offsetType\";\nimport { createConstGpuVector } from \"../vector/geometry/constGpuVector\";\nimport { createFlatGpuVector } from \"../vector/geometry/flatGpuVector\";\nimport type { GeometryVector, MortonSettings } from \"../vector/geometry/geometryVector\";\nimport type { GpuVector } from \"../vector/geometry/gpuVector\";\nimport type GeometryScaling from \"./geometryScaling\";\n\n// TODO: get rid of numFeatures parameter\nexport function decodeGeometryColumn(\n tile: Uint8Array,\n numStreams: number,\n offset: IntWrapper,\n numFeatures: number,\n scalingData?: GeometryScaling,\n): GeometryVector | GpuVector {\n const geometryTypeMetadata = decodeStreamMetadata(tile, offset);\n const geometryTypesVectorType = getVectorType(geometryTypeMetadata, numFeatures, tile, offset);\n\n let vertexOffsets: Int32Array = null;\n let vertexBuffer: Int32Array = null;\n let mortonSettings: MortonSettings = null;\n let indexBuffer: Int32Array = null;\n\n if (geometryTypesVectorType === VectorType.CONST) {\n /* All geometries in the colum have the same geometry type */\n const geometryType = decodeConstIntStream(tile, offset, geometryTypeMetadata, false);\n\n // Variables for const geometry path (directly decoded as offsets)\n let geometryOffsets: Uint32Array = null;\n let partOffsets: Uint32Array = null;\n let ringOffsets: Uint32Array = null;\n //TODO: use geometryOffsets for that? -> but then tessellated polygons can't be used with normal polygons\n // in one FeatureTable?\n let triangleOffsets: Uint32Array = null;\n\n for (let i = 0; i < numStreams - 1; i++) {\n const geometryStreamMetadata = decodeStreamMetadata(tile, offset);\n switch (geometryStreamMetadata.physicalStreamType) {\n case PhysicalStreamType.LENGTH:\n switch (geometryStreamMetadata.logicalStreamType.lengthType) {\n case LengthType.GEOMETRIES:\n geometryOffsets = decodeLengthStreamToOffsetBuffer(tile, offset, geometryStreamMetadata);\n break;\n case LengthType.PARTS:\n partOffsets = decodeLengthStreamToOffsetBuffer(tile, offset, geometryStreamMetadata);\n break;\n case LengthType.RINGS:\n ringOffsets = decodeLengthStreamToOffsetBuffer(tile, offset, geometryStreamMetadata);\n break;\n case LengthType.TRIANGLES:\n triangleOffsets = decodeLengthStreamToOffsetBuffer(tile, offset, geometryStreamMetadata);\n }\n break;\n case PhysicalStreamType.OFFSET: {\n switch (geometryStreamMetadata.logicalStreamType.offsetType) {\n case OffsetType.VERTEX:\n vertexOffsets = decodeIntStream(tile, offset, geometryStreamMetadata, false);\n break;\n case OffsetType.INDEX:\n indexBuffer = decodeIntStream(tile, offset, geometryStreamMetadata, false);\n break;\n }\n break;\n }\n case PhysicalStreamType.DATA: {\n if (DictionaryType.VERTEX === geometryStreamMetadata.logicalStreamType.dictionaryType) {\n vertexBuffer = decodeIntStream(tile, offset, geometryStreamMetadata, true, scalingData);\n } else {\n const mortonMetadata = geometryStreamMetadata as MortonEncodedStreamMetadata;\n mortonSettings = {\n numBits: mortonMetadata.numBits,\n coordinateShift: mortonMetadata.coordinateShift,\n };\n vertexBuffer = decodeIntStream(tile, offset, geometryStreamMetadata, false, scalingData);\n }\n break;\n }\n }\n }\n\n if (indexBuffer !== null) {\n if (geometryOffsets != null || partOffsets != null) {\n /* Case when the indices of a Polygon outline are encoded in the tile */\n const topologyVector = { geometryOffsets, partOffsets, ringOffsets };\n return createConstGpuVector(\n numFeatures,\n geometryType,\n triangleOffsets,\n indexBuffer,\n vertexBuffer,\n topologyVector,\n );\n }\n\n /* Case when the no Polygon outlines are encoded in the tile */\n return createConstGpuVector(numFeatures, geometryType, triangleOffsets, indexBuffer, vertexBuffer);\n }\n\n return mortonSettings === null\n ? /* Currently only 2D coordinates (Vec2) are implemented in the encoder */\n createConstGeometryVector(\n numFeatures,\n geometryType,\n { geometryOffsets, partOffsets, ringOffsets },\n vertexOffsets,\n vertexBuffer,\n )\n : createMortonEncodedConstGeometryVector(\n numFeatures,\n geometryType,\n { geometryOffsets, partOffsets, ringOffsets },\n vertexOffsets,\n vertexBuffer,\n mortonSettings,\n );\n }\n\n /* Different geometry types are mixed in the geometry column */\n const geometryTypeVector = decodeIntStream(tile, offset, geometryTypeMetadata, false);\n\n // Variables for flat geometry path (decoded as lengths, then converted to offsets)\n let geometryLengths: Int32Array = null;\n let partLengths: Int32Array = null;\n let ringLengths: Int32Array = null;\n //TODO: use geometryOffsets for that? -> but then tessellated polygons can't be used with normal polygons\n // in one FeatureTable?\n let triangleOffsets: Uint32Array = null;\n\n for (let i = 0; i < numStreams - 1; i++) {\n const geometryStreamMetadata = decodeStreamMetadata(tile, offset);\n switch (geometryStreamMetadata.physicalStreamType) {\n case PhysicalStreamType.LENGTH:\n switch (geometryStreamMetadata.logicalStreamType.lengthType) {\n case LengthType.GEOMETRIES:\n geometryLengths = decodeIntStream(tile, offset, geometryStreamMetadata, false);\n break;\n case LengthType.PARTS:\n partLengths = decodeIntStream(tile, offset, geometryStreamMetadata, false);\n break;\n case LengthType.RINGS:\n ringLengths = decodeIntStream(tile, offset, geometryStreamMetadata, false);\n break;\n case LengthType.TRIANGLES:\n triangleOffsets = decodeLengthStreamToOffsetBuffer(tile, offset, geometryStreamMetadata);\n }\n break;\n case PhysicalStreamType.OFFSET:\n switch (geometryStreamMetadata.logicalStreamType.offsetType) {\n case OffsetType.VERTEX:\n vertexOffsets = decodeIntStream(tile, offset, geometryStreamMetadata, false);\n break;\n case OffsetType.INDEX:\n indexBuffer = decodeIntStream(tile, offset, geometryStreamMetadata, false);\n break;\n }\n break;\n case PhysicalStreamType.DATA:\n if (DictionaryType.VERTEX === geometryStreamMetadata.logicalStreamType.dictionaryType) {\n vertexBuffer = decodeIntStream(tile, offset, geometryStreamMetadata, true, scalingData);\n } else {\n const mortonMetadata = geometryStreamMetadata as MortonEncodedStreamMetadata;\n mortonSettings = {\n numBits: mortonMetadata.numBits,\n coordinateShift: mortonMetadata.coordinateShift,\n };\n vertexBuffer = decodeIntStream(tile, offset, geometryStreamMetadata, false, scalingData);\n }\n break;\n }\n }\n\n // TODO: refactor the following instructions -> decode in one pass for performance reasons\n /* Calculate the offsets from the length buffer for util access */\n let geometryOffsets: Uint32Array = null;\n let partOffsets: Uint32Array = null;\n let ringOffsets: Uint32Array = null;\n\n if (geometryLengths !== null) {\n geometryOffsets = decodeRootLengthStream(geometryTypeVector, geometryLengths, 2);\n if (partLengths !== null && ringLengths !== null) {\n partOffsets = decodeLevel1LengthStream(geometryTypeVector, geometryOffsets, partLengths, false);\n ringOffsets = decodeLevel2LengthStream(geometryTypeVector, geometryOffsets, partOffsets, ringLengths);\n } else if (partLengths !== null) {\n partOffsets = decodeLevel1WithoutRingBufferLengthStream(geometryTypeVector, geometryOffsets, partLengths);\n }\n } else if (partLengths !== null && ringLengths !== null) {\n partOffsets = decodeRootLengthStream(geometryTypeVector, partLengths, 1);\n ringOffsets = decodeLevel1LengthStream(geometryTypeVector, partOffsets, ringLengths, true);\n } else if (partLengths !== null) {\n partOffsets = decodeRootLengthStream(geometryTypeVector, partLengths, 0);\n }\n\n if (indexBuffer !== null && partOffsets === null) {\n /* Case when the indices of a Polygon outline are not encoded in the data so no\n * topology data are present in the tile */\n return createFlatGpuVector(geometryTypeVector, triangleOffsets, indexBuffer, vertexBuffer);\n }\n\n if (indexBuffer !== null) {\n /* Case when the indices of a Polygon outline are encoded in the tile */\n return createFlatGpuVector(geometryTypeVector, triangleOffsets, indexBuffer, vertexBuffer, {\n geometryOffsets,\n partOffsets,\n ringOffsets,\n });\n }\n\n return mortonSettings === null /* Currently only 2D coordinates (Vec2) are implemented in the encoder */\n ? createFlatGeometryVector(\n geometryTypeVector,\n { geometryOffsets, partOffsets, ringOffsets },\n vertexOffsets,\n vertexBuffer,\n )\n : createFlatGeometryVectorMortonEncoded(\n geometryTypeVector,\n { geometryOffsets, partOffsets, ringOffsets },\n vertexOffsets,\n vertexBuffer,\n mortonSettings,\n );\n}\n\n/*\n * Handle the parsing of the different topology length buffers separate not generic to reduce the\n * branching and improve the performance\n */\nfunction decodeRootLengthStream(\n geometryTypes: Int32Array,\n rootLengthStream: Int32Array | Uint32Array,\n bufferId: number,\n): Uint32Array {\n const rootBufferOffsets = new Uint32Array(geometryTypes.length + 1);\n let previousOffset = 0;\n rootBufferOffsets[0] = previousOffset;\n let rootLengthCounter = 0;\n for (let i = 0; i < geometryTypes.length; i++) {\n /* Test if the geometry has and entry in the root buffer\n * BufferId: 2 GeometryOffsets -> MultiPolygon, MultiLineString, MultiPoint\n * BufferId: 1 PartOffsets -> Polygon\n * BufferId: 0 PartOffsets, RingOffsets -> LineString\n * */\n previousOffset = rootBufferOffsets[i + 1] =\n previousOffset + (geometryTypes[i] > bufferId ? rootLengthStream[rootLengthCounter++] : 1);\n }\n\n return rootBufferOffsets;\n}\n\nfunction decodeLevel1LengthStream(\n geometryTypes: Int32Array,\n rootOffsetBuffer: Uint32Array,\n level1LengthBuffer: Int32Array,\n isLineStringPresent: boolean,\n): Uint32Array {\n const level1BufferOffsets = new Uint32Array(rootOffsetBuffer[rootOffsetBuffer.length - 1] + 1);\n let previousOffset = 0;\n level1BufferOffsets[0] = previousOffset;\n let level1BufferCounter = 1;\n let level1LengthBufferCounter = 0;\n for (let i = 0; i < geometryTypes.length; i++) {\n const geometryType = geometryTypes[i];\n const numGeometries = rootOffsetBuffer[i + 1] - rootOffsetBuffer[i];\n if (\n geometryType === 5 ||\n geometryType === 2 ||\n (isLineStringPresent && (geometryType === 4 || geometryType === 1))\n ) {\n /* For MultiPolygon, Polygon and in some cases for MultiLineString and LineString\n * a value in the level1LengthBuffer exists */\n for (let j = 0; j < numGeometries; j++) {\n previousOffset = level1BufferOffsets[level1BufferCounter++] =\n previousOffset + level1LengthBuffer[level1LengthBufferCounter++];\n }\n } else {\n /* For MultiPoint and Point and in some cases for MultiLineString and LineString no value in the\n * level1LengthBuffer exists */\n for (let j = 0; j < numGeometries; j++) {\n level1BufferOffsets[level1BufferCounter++] = ++previousOffset;\n }\n }\n }\n\n return level1BufferOffsets;\n}\n\n/*\n * Case where no ring buffer exists so no MultiPolygon or Polygon geometry is part of the buffer\n */\nfunction decodeLevel1WithoutRingBufferLengthStream(\n geometryTypes: Int32Array,\n rootOffsetBuffer: Uint32Array,\n level1LengthBuffer: Int32Array,\n): Uint32Array {\n const level1BufferOffsets = new Uint32Array(rootOffsetBuffer[rootOffsetBuffer.length - 1] + 1);\n let previousOffset = 0;\n level1BufferOffsets[0] = previousOffset;\n let level1OffsetBufferCounter = 1;\n let level1LengthCounter = 0;\n for (let i = 0; i < geometryTypes.length; i++) {\n const geometryType = geometryTypes[i];\n const numGeometries = rootOffsetBuffer[i + 1] - rootOffsetBuffer[i];\n if (geometryType === 4 || geometryType === 1) {\n /* For MultiLineString and LineString a value in the level1LengthBuffer exists */\n for (let j = 0; j < numGeometries; j++) {\n previousOffset = level1BufferOffsets[level1OffsetBufferCounter++] =\n previousOffset + level1LengthBuffer[level1LengthCounter++];\n }\n } else {\n /* For MultiPoint and Point no value in level1LengthBuffer exists */\n for (let j = 0; j < numGeometries; j++) {\n level1BufferOffsets[level1OffsetBufferCounter++] = ++previousOffset;\n }\n }\n }\n\n return level1BufferOffsets;\n}\n\nfunction decodeLevel2LengthStream(\n geometryTypes: Int32Array,\n rootOffsetBuffer: Uint32Array,\n level1OffsetBuffer: Uint32Array,\n level2LengthBuffer: Int32Array,\n): Uint32Array {\n const level2BufferOffsets = new Uint32Array(level1OffsetBuffer[level1OffsetBuffer.length - 1] + 1);\n let previousOffset = 0;\n level2BufferOffsets[0] = previousOffset;\n let level1OffsetBufferCounter = 1;\n let level2OffsetBufferCounter = 1;\n let level2LengthBufferCounter = 0;\n for (let i = 0; i < geometryTypes.length; i++) {\n const geometryType = geometryTypes[i];\n const numGeometries = rootOffsetBuffer[i + 1] - rootOffsetBuffer[i];\n if (geometryType !== 0 && geometryType !== 3) {\n /* For MultiPolygon, MultiLineString, Polygon and LineString a value in level2LengthBuffer\n * exists */\n for (let j = 0; j < numGeometries; j++) {\n const numParts =\n level1OffsetBuffer[level1OffsetBufferCounter] - level1OffsetBuffer[level1OffsetBufferCounter - 1];\n level1OffsetBufferCounter++;\n for (let k = 0; k < numParts; k++) {\n previousOffset = level2BufferOffsets[level2OffsetBufferCounter++] =\n previousOffset + level2LengthBuffer[level2LengthBufferCounter++];\n }\n }\n } else {\n /* For MultiPoint and Point no value in level2LengthBuffer exists */\n for (let j = 0; j < numGeometries; j++) {\n level2BufferOffsets[level2OffsetBufferCounter++] = ++previousOffset;\n level1OffsetBufferCounter++;\n }\n }\n }\n\n return level2BufferOffsets;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"geometryDecoder.js","sourceRoot":"","sources":["../../src/decoding/geometryDecoder.ts"],"names":[],"mappings":"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","sourcesContent":["import { decodeStreamMetadata, type MortonEncodedStreamMetadata } from \"../metadata/tile/streamMetadataDecoder\";\nimport type IntWrapper from \"./intWrapper\";\nimport {\n decodeSignedInt32Stream,\n decodeLengthStreamToOffsetBuffer,\n decodeUnsignedConstInt32Stream,\n decodeUnsignedInt32Stream,\n getVectorType,\n} from \"./integerStreamDecoder\";\nimport { VectorType } from \"../vector/vectorType\";\nimport { PhysicalStreamType } from \"../metadata/tile/physicalStreamType\";\nimport { LengthType } from \"../metadata/tile/lengthType\";\nimport { DictionaryType } from \"../metadata/tile/dictionaryType\";\nimport {\n createConstGeometryVector,\n createMortonEncodedConstGeometryVector,\n} from \"../vector/geometry/constGeometryVector\";\nimport { createFlatGeometryVector, createFlatGeometryVectorMortonEncoded } from \"../vector/geometry/flatGeometryVector\";\nimport { OffsetType } from \"../metadata/tile/offsetType\";\nimport { createConstGpuVector } from \"../vector/geometry/constGpuVector\";\nimport { createFlatGpuVector } from \"../vector/geometry/flatGpuVector\";\nimport type { GeometryVector, MortonSettings } from \"../vector/geometry/geometryVector\";\nimport type { GpuVector } from \"../vector/geometry/gpuVector\";\nimport type GeometryScaling from \"./geometryScaling\";\n\n// TODO: get rid of numFeatures parameter\nexport function decodeGeometryColumn(\n tile: Uint8Array,\n numStreams: number,\n offset: IntWrapper,\n numFeatures: number,\n scalingData?: GeometryScaling,\n): GeometryVector | GpuVector {\n const geometryTypeMetadata = decodeStreamMetadata(tile, offset);\n const geometryTypesVectorType = getVectorType(geometryTypeMetadata, numFeatures, tile, offset);\n\n let vertexOffsets: Uint32Array | undefined;\n let vertexBuffer: Int32Array | Uint32Array | undefined;\n let mortonSettings: MortonSettings | undefined;\n let indexBuffer: Uint32Array | undefined;\n\n if (geometryTypesVectorType === VectorType.CONST) {\n /* All geometries in the column have the same geometry type */\n const geometryType = decodeUnsignedConstInt32Stream(tile, offset, geometryTypeMetadata);\n\n // Variables for const geometry path (directly decoded as offsets)\n let geometryOffsets: Uint32Array | undefined;\n let partOffsets: Uint32Array | undefined;\n let ringOffsets: Uint32Array | undefined;\n //TODO: use geometryOffsets for that? -> but then tessellated polygons can't be used with normal polygons\n // in one FeatureTable?\n let triangleOffsets: Uint32Array | undefined;\n\n for (let i = 0; i < numStreams - 1; i++) {\n const geometryStreamMetadata = decodeStreamMetadata(tile, offset);\n switch (geometryStreamMetadata.physicalStreamType) {\n case PhysicalStreamType.LENGTH:\n switch (geometryStreamMetadata.logicalStreamType.lengthType) {\n case LengthType.GEOMETRIES:\n geometryOffsets = decodeLengthStreamToOffsetBuffer(tile, offset, geometryStreamMetadata);\n break;\n case LengthType.PARTS:\n partOffsets = decodeLengthStreamToOffsetBuffer(tile, offset, geometryStreamMetadata);\n break;\n case LengthType.RINGS:\n ringOffsets = decodeLengthStreamToOffsetBuffer(tile, offset, geometryStreamMetadata);\n break;\n case LengthType.TRIANGLES:\n triangleOffsets = decodeLengthStreamToOffsetBuffer(tile, offset, geometryStreamMetadata);\n }\n break;\n case PhysicalStreamType.OFFSET: {\n switch (geometryStreamMetadata.logicalStreamType.offsetType) {\n case OffsetType.VERTEX:\n vertexOffsets = decodeUnsignedInt32Stream(tile, offset, geometryStreamMetadata);\n break;\n case OffsetType.INDEX:\n indexBuffer = decodeUnsignedInt32Stream(tile, offset, geometryStreamMetadata);\n break;\n }\n break;\n }\n case PhysicalStreamType.DATA: {\n if (DictionaryType.VERTEX === geometryStreamMetadata.logicalStreamType.dictionaryType) {\n vertexBuffer = decodeSignedInt32Stream(tile, offset, geometryStreamMetadata, scalingData);\n } else {\n const mortonMetadata = geometryStreamMetadata as MortonEncodedStreamMetadata;\n mortonSettings = {\n numBits: mortonMetadata.numBits,\n coordinateShift: mortonMetadata.coordinateShift,\n };\n vertexBuffer = decodeUnsignedInt32Stream(tile, offset, geometryStreamMetadata, scalingData);\n }\n break;\n }\n }\n }\n\n if (indexBuffer) {\n if (geometryOffsets !== undefined || partOffsets !== undefined) {\n /* Case when the indices of a Polygon outline are encoded in the tile */\n const topologyVector = { geometryOffsets, partOffsets, ringOffsets };\n return createConstGpuVector(\n numFeatures,\n geometryType,\n triangleOffsets,\n indexBuffer,\n vertexBuffer,\n topologyVector,\n );\n }\n\n /* Case when the no Polygon outlines are encoded in the tile */\n return createConstGpuVector(numFeatures, geometryType, triangleOffsets, indexBuffer, vertexBuffer);\n }\n\n return mortonSettings === undefined\n ? /* Currently only 2D coordinates (Vec2) are implemented in the encoder */\n createConstGeometryVector(\n numFeatures,\n geometryType,\n { geometryOffsets, partOffsets, ringOffsets },\n vertexOffsets,\n vertexBuffer,\n )\n : createMortonEncodedConstGeometryVector(\n numFeatures,\n geometryType,\n { geometryOffsets, partOffsets, ringOffsets },\n vertexOffsets,\n vertexBuffer,\n mortonSettings,\n );\n }\n\n /* Different geometry types are mixed in the geometry column */\n const geometryTypeVector = decodeUnsignedInt32Stream(tile, offset, geometryTypeMetadata);\n\n // Variables for flat geometry path (decoded as lengths, then converted to offsets)\n let geometryLengths: Uint32Array | undefined;\n let partLengths: Uint32Array | undefined;\n let ringLengths: Uint32Array | undefined;\n //TODO: use geometryOffsets for that? -> but then tessellated polygons can't be used with normal polygons\n // in one FeatureTable?\n let triangleOffsets: Uint32Array | undefined;\n\n for (let i = 0; i < numStreams - 1; i++) {\n const geometryStreamMetadata = decodeStreamMetadata(tile, offset);\n switch (geometryStreamMetadata.physicalStreamType) {\n case PhysicalStreamType.LENGTH:\n switch (geometryStreamMetadata.logicalStreamType.lengthType) {\n case LengthType.GEOMETRIES:\n geometryLengths = decodeUnsignedInt32Stream(tile, offset, geometryStreamMetadata);\n break;\n case LengthType.PARTS:\n partLengths = decodeUnsignedInt32Stream(tile, offset, geometryStreamMetadata);\n break;\n case LengthType.RINGS:\n ringLengths = decodeUnsignedInt32Stream(tile, offset, geometryStreamMetadata);\n break;\n case LengthType.TRIANGLES:\n triangleOffsets = decodeLengthStreamToOffsetBuffer(tile, offset, geometryStreamMetadata);\n }\n break;\n case PhysicalStreamType.OFFSET:\n switch (geometryStreamMetadata.logicalStreamType.offsetType) {\n case OffsetType.VERTEX:\n vertexOffsets = decodeUnsignedInt32Stream(tile, offset, geometryStreamMetadata);\n break;\n case OffsetType.INDEX:\n indexBuffer = decodeUnsignedInt32Stream(tile, offset, geometryStreamMetadata);\n break;\n }\n break;\n case PhysicalStreamType.DATA:\n if (DictionaryType.VERTEX === geometryStreamMetadata.logicalStreamType.dictionaryType) {\n vertexBuffer = decodeSignedInt32Stream(tile, offset, geometryStreamMetadata, scalingData);\n } else {\n const mortonMetadata = geometryStreamMetadata as MortonEncodedStreamMetadata;\n mortonSettings = {\n numBits: mortonMetadata.numBits,\n coordinateShift: mortonMetadata.coordinateShift,\n };\n vertexBuffer = decodeUnsignedInt32Stream(tile, offset, geometryStreamMetadata, scalingData);\n }\n break;\n }\n }\n\n // TODO: refactor the following instructions -> decode in one pass for performance reasons\n /* Calculate the offsets from the length buffer for util access */\n let geometryOffsets: Uint32Array | undefined;\n let partOffsets: Uint32Array | undefined;\n let ringOffsets: Uint32Array | undefined;\n\n if (geometryLengths) {\n geometryOffsets = decodeRootLengthStream(geometryTypeVector, geometryLengths, 2);\n if (partLengths && ringLengths) {\n partOffsets = decodeLevel1LengthStream(geometryTypeVector, geometryOffsets, partLengths, false);\n ringOffsets = decodeLevel2LengthStream(geometryTypeVector, geometryOffsets, partOffsets, ringLengths);\n } else if (partLengths) {\n partOffsets = decodeLevel1WithoutRingBufferLengthStream(geometryTypeVector, geometryOffsets, partLengths);\n }\n } else if (partLengths && ringLengths) {\n partOffsets = decodeRootLengthStream(geometryTypeVector, partLengths, 1);\n ringOffsets = decodeLevel1LengthStream(geometryTypeVector, partOffsets, ringLengths, true);\n } else if (partLengths) {\n partOffsets = decodeRootLengthStream(geometryTypeVector, partLengths, 0);\n }\n\n if (indexBuffer && !partOffsets) {\n /* Case when the indices of a Polygon outline are not encoded in the data so no\n * topology data are present in the tile */\n return createFlatGpuVector(geometryTypeVector, triangleOffsets, indexBuffer, vertexBuffer);\n }\n\n if (indexBuffer) {\n /* Case when the indices of a Polygon outline are encoded in the tile */\n return createFlatGpuVector(geometryTypeVector, triangleOffsets, indexBuffer, vertexBuffer, {\n geometryOffsets,\n partOffsets,\n ringOffsets,\n });\n }\n\n return mortonSettings === undefined /* Currently only 2D coordinates (Vec2) are implemented in the encoder */\n ? createFlatGeometryVector(\n geometryTypeVector,\n { geometryOffsets, partOffsets, ringOffsets },\n vertexOffsets,\n vertexBuffer,\n )\n : createFlatGeometryVectorMortonEncoded(\n geometryTypeVector,\n { geometryOffsets, partOffsets, ringOffsets },\n vertexOffsets,\n vertexBuffer,\n mortonSettings,\n );\n}\n\n/*\n * Handle the parsing of the different topology length buffers separate not generic to reduce the\n * branching and improve the performance\n */\nfunction decodeRootLengthStream(\n geometryTypes: Uint32Array,\n rootLengthStream: Uint32Array,\n bufferId: number,\n): Uint32Array {\n const rootBufferOffsets = new Uint32Array(geometryTypes.length + 1);\n let previousOffset = 0;\n rootBufferOffsets[0] = previousOffset;\n let rootLengthCounter = 0;\n for (let i = 0; i < geometryTypes.length; i++) {\n /* Test if the geometry has and entry in the root buffer\n * BufferId: 2 GeometryOffsets -> MultiPolygon, MultiLineString, MultiPoint\n * BufferId: 1 PartOffsets -> Polygon\n * BufferId: 0 PartOffsets, RingOffsets -> LineString\n * */\n previousOffset = rootBufferOffsets[i + 1] =\n previousOffset + (geometryTypes[i] > bufferId ? rootLengthStream[rootLengthCounter++] : 1);\n }\n\n return rootBufferOffsets;\n}\n\nfunction decodeLevel1LengthStream(\n geometryTypes: Uint32Array,\n rootOffsetBuffer: Uint32Array,\n level1LengthBuffer: Uint32Array,\n isLineStringPresent: boolean,\n): Uint32Array {\n const level1BufferOffsets = new Uint32Array(rootOffsetBuffer[rootOffsetBuffer.length - 1] + 1);\n let previousOffset = 0;\n level1BufferOffsets[0] = previousOffset;\n let level1BufferCounter = 1;\n let level1LengthBufferCounter = 0;\n for (let i = 0; i < geometryTypes.length; i++) {\n const geometryType = geometryTypes[i];\n const numGeometries = rootOffsetBuffer[i + 1] - rootOffsetBuffer[i];\n if (\n geometryType === 5 ||\n geometryType === 2 ||\n (isLineStringPresent && (geometryType === 4 || geometryType === 1))\n ) {\n /* For MultiPolygon, Polygon and in some cases for MultiLineString and LineString\n * a value in the level1LengthBuffer exists */\n for (let j = 0; j < numGeometries; j++) {\n previousOffset = level1BufferOffsets[level1BufferCounter++] =\n previousOffset + level1LengthBuffer[level1LengthBufferCounter++];\n }\n } else {\n /* For MultiPoint and Point and in some cases for MultiLineString and LineString no value in the\n * level1LengthBuffer exists */\n for (let j = 0; j < numGeometries; j++) {\n level1BufferOffsets[level1BufferCounter++] = ++previousOffset;\n }\n }\n }\n\n return level1BufferOffsets;\n}\n\n/*\n * Case where no ring buffer exists so no MultiPolygon or Polygon geometry is part of the buffer\n */\nfunction decodeLevel1WithoutRingBufferLengthStream(\n geometryTypes: Uint32Array,\n rootOffsetBuffer: Uint32Array,\n level1LengthBuffer: Uint32Array,\n): Uint32Array {\n const level1BufferOffsets = new Uint32Array(rootOffsetBuffer[rootOffsetBuffer.length - 1] + 1);\n let previousOffset = 0;\n level1BufferOffsets[0] = previousOffset;\n let level1OffsetBufferCounter = 1;\n let level1LengthCounter = 0;\n for (let i = 0; i < geometryTypes.length; i++) {\n const geometryType = geometryTypes[i];\n const numGeometries = rootOffsetBuffer[i + 1] - rootOffsetBuffer[i];\n if (geometryType === 4 || geometryType === 1) {\n /* For MultiLineString and LineString a value in the level1LengthBuffer exists */\n for (let j = 0; j < numGeometries; j++) {\n previousOffset = level1BufferOffsets[level1OffsetBufferCounter++] =\n previousOffset + level1LengthBuffer[level1LengthCounter++];\n }\n } else {\n /* For MultiPoint and Point no value in level1LengthBuffer exists */\n for (let j = 0; j < numGeometries; j++) {\n level1BufferOffsets[level1OffsetBufferCounter++] = ++previousOffset;\n }\n }\n }\n\n return level1BufferOffsets;\n}\n\nfunction decodeLevel2LengthStream(\n geometryTypes: Uint32Array,\n rootOffsetBuffer: Uint32Array,\n level1OffsetBuffer: Uint32Array,\n level2LengthBuffer: Uint32Array,\n): Uint32Array {\n const level2BufferOffsets = new Uint32Array(level1OffsetBuffer[level1OffsetBuffer.length - 1] + 1);\n let previousOffset = 0;\n level2BufferOffsets[0] = previousOffset;\n let level1OffsetBufferCounter = 1;\n let level2OffsetBufferCounter = 1;\n let level2LengthBufferCounter = 0;\n for (let i = 0; i < geometryTypes.length; i++) {\n const geometryType = geometryTypes[i];\n const numGeometries = rootOffsetBuffer[i + 1] - rootOffsetBuffer[i];\n if (geometryType !== 0 && geometryType !== 3) {\n /* For MultiPolygon, MultiLineString, Polygon and LineString a value in level2LengthBuffer\n * exists */\n for (let j = 0; j < numGeometries; j++) {\n const numParts =\n level1OffsetBuffer[level1OffsetBufferCounter] - level1OffsetBuffer[level1OffsetBufferCounter - 1];\n level1OffsetBufferCounter++;\n for (let k = 0; k < numParts; k++) {\n previousOffset = level2BufferOffsets[level2OffsetBufferCounter++] =\n previousOffset + level2LengthBuffer[level2LengthBufferCounter++];\n }\n }\n } else {\n /* For MultiPoint and Point no value in level2LengthBuffer exists */\n for (let j = 0; j < numGeometries; j++) {\n level2BufferOffsets[level2OffsetBufferCounter++] = ++previousOffset;\n level1OffsetBufferCounter++;\n }\n }\n }\n\n return level2BufferOffsets;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"intWrapper.js","sourceRoot":"","sources":["../../src/decoding/intWrapper.ts"],"names":[],"mappings":"AAAA,4HAA4H;AAE5H,MAAM,CAAC,OAAO,OAAO,UAAU;
|
|
1
|
+
{"version":3,"file":"intWrapper.js","sourceRoot":"","sources":["../../src/decoding/intWrapper.ts"],"names":[],"mappings":"AAAA,4HAA4H;AAE5H,MAAM,CAAC,OAAO,OAAO,UAAU;IAC3B,YAAoB,KAAa;QAAb,UAAK,GAAL,KAAK,CAAQ;IAAG,CAAC;IAE9B,GAAG;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAEM,GAAG,CAAC,CAAS;QAChB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IACnB,CAAC;IAEM,SAAS;QACZ,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;IAEM,GAAG,CAAC,CAAS;QAChB,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;IACpB,CAAC;CACJ","sourcesContent":["// Ported from https://github.com/lemire/JavaFastPFOR/blob/master/src/main/java/me/lemire/integercompression/IntWrapper.java\n\nexport default class IntWrapper {\n constructor(private value: number) {}\n\n public get(): number {\n return this.value;\n }\n\n public set(v: number): void {\n this.value = v;\n }\n\n public increment(): number {\n return this.value++;\n }\n\n public add(v: number): void {\n this.value += v;\n }\n}\n"]}
|
|
@@ -2,33 +2,33 @@ import type IntWrapper from "./intWrapper";
|
|
|
2
2
|
import { type FastPforWireDecodeWorkspace } from "./fastPforDecoder";
|
|
3
3
|
export type { FastPforWireDecodeWorkspace } from "./fastPforDecoder";
|
|
4
4
|
export { createFastPforWireDecodeWorkspace } from "./fastPforDecoder";
|
|
5
|
-
export declare function decodeVarintInt32(buf: Uint8Array, bufferOffset: IntWrapper, numValues: number):
|
|
5
|
+
export declare function decodeVarintInt32(buf: Uint8Array, bufferOffset: IntWrapper, numValues: number): Uint32Array;
|
|
6
6
|
export declare function decodeVarintInt64(src: Uint8Array, offset: IntWrapper, numValues: number): BigUint64Array;
|
|
7
7
|
export declare function decodeVarintFloat64(src: Uint8Array, offset: IntWrapper, numValues: number): Float64Array;
|
|
8
|
-
export declare function decodeFastPfor(encodedBytes: Uint8Array, expectedValueCount: number, encodedByteLength: number, offset: IntWrapper):
|
|
9
|
-
export declare function decodeFastPforWithWorkspace(encodedBytes: Uint8Array, expectedValueCount: number, encodedByteLength: number, offset: IntWrapper, workspace: FastPforWireDecodeWorkspace):
|
|
8
|
+
export declare function decodeFastPfor(encodedBytes: Uint8Array, expectedValueCount: number, encodedByteLength: number, offset: IntWrapper): Uint32Array;
|
|
9
|
+
export declare function decodeFastPforWithWorkspace(encodedBytes: Uint8Array, expectedValueCount: number, encodedByteLength: number, offset: IntWrapper, workspace: FastPforWireDecodeWorkspace): Uint32Array;
|
|
10
10
|
export declare function decodeZigZagInt32Value(encoded: number): number;
|
|
11
11
|
export declare function decodeZigZagInt64Value(encoded: bigint): bigint;
|
|
12
12
|
export declare function decodeZigZagFloat64Value(encoded: number): number;
|
|
13
|
-
export declare function decodeZigZagInt32(encodedData:
|
|
13
|
+
export declare function decodeZigZagInt32(encodedData: Uint32Array): Int32Array;
|
|
14
14
|
export declare function decodeZigZagInt64(encodedData: BigUint64Array): BigInt64Array;
|
|
15
15
|
export declare function decodeZigZagFloat64(encodedData: Float64Array): void;
|
|
16
|
-
export declare function decodeUnsignedRleInt32(encodedData:
|
|
16
|
+
export declare function decodeUnsignedRleInt32(encodedData: Uint32Array, numRuns: number, numTotalValues?: number): Uint32Array;
|
|
17
17
|
export declare function decodeUnsignedRleInt64(encodedData: BigUint64Array, numRuns: number, numTotalValues?: number): BigUint64Array;
|
|
18
18
|
export declare function decodeUnsignedRleFloat64(encodedData: Float64Array, numRuns: number, numTotalValues: number): Float64Array;
|
|
19
|
-
export declare function decodeZigZagDeltaInt32(data:
|
|
19
|
+
export declare function decodeZigZagDeltaInt32(data: Uint32Array): Int32Array;
|
|
20
20
|
export declare function decodeZigZagDeltaInt64(data: BigInt64Array | BigUint64Array): BigInt64Array;
|
|
21
21
|
export declare function decodeZigZagDeltaFloat64(data: Float64Array): void;
|
|
22
|
-
export declare function decodeZigZagRleInt32(data:
|
|
22
|
+
export declare function decodeZigZagRleInt32(data: Uint32Array, numRuns: number, numTotalValues?: number): Int32Array;
|
|
23
23
|
export declare function decodeZigZagRleInt64(data: BigUint64Array, numRuns: number, numTotalValues?: number): BigInt64Array;
|
|
24
24
|
export declare function decodeZigZagRleFloat64(data: Float64Array, numRuns: number, numTotalValues: number): Float64Array;
|
|
25
25
|
export declare function fastInverseDelta(data: Uint32Array | Int32Array): void;
|
|
26
|
-
export declare function inverseDelta(data:
|
|
27
|
-
export declare function decodeComponentwiseDeltaVec2(data:
|
|
28
|
-
export declare function decodeComponentwiseDeltaVec2Scaled(data:
|
|
29
|
-
export declare function decodeZigZagDeltaOfDeltaInt32(data:
|
|
30
|
-
export declare function decodeZigZagRleDeltaInt32(data:
|
|
31
|
-
export declare function decodeRleDeltaInt32(data:
|
|
26
|
+
export declare function inverseDelta(data: Uint32Array): void;
|
|
27
|
+
export declare function decodeComponentwiseDeltaVec2(data: Uint32Array): Int32Array;
|
|
28
|
+
export declare function decodeComponentwiseDeltaVec2Scaled(data: Uint32Array, scale: number, min: number, max: number): Int32Array;
|
|
29
|
+
export declare function decodeZigZagDeltaOfDeltaInt32(data: Uint32Array): Uint32Array;
|
|
30
|
+
export declare function decodeZigZagRleDeltaInt32(data: Uint32Array, numRuns: number, numTotalValues: number): Int32Array;
|
|
31
|
+
export declare function decodeRleDeltaInt32(data: Uint32Array, numRuns: number, numTotalValues: number): Uint32Array;
|
|
32
32
|
/**
|
|
33
33
|
* Decode Delta-RLE with multiple runs by fully reconstructing values.
|
|
34
34
|
*
|
|
@@ -37,14 +37,18 @@ export declare function decodeRleDeltaInt32(data: Int32Array, numRuns: number, n
|
|
|
37
37
|
* @param numValues Total number of values to reconstruct
|
|
38
38
|
* @returns Reconstructed values with deltas applied
|
|
39
39
|
*/
|
|
40
|
-
export declare function decodeDeltaRleInt32(data:
|
|
40
|
+
export declare function decodeDeltaRleInt32(data: Uint32Array, numRuns: number, numValues: number): Int32Array;
|
|
41
41
|
/**
|
|
42
42
|
* Decode Delta-RLE with multiple runs for 64-bit integers.
|
|
43
43
|
*/
|
|
44
44
|
export declare function decodeDeltaRleInt64(data: BigUint64Array, numRuns: number, numValues: number): BigInt64Array;
|
|
45
|
-
export declare function
|
|
46
|
-
export declare function
|
|
47
|
-
export declare function
|
|
45
|
+
export declare function decodeUnsignedZigZagDeltaInt32(data: Uint32Array): Uint32Array;
|
|
46
|
+
export declare function decodeUnsignedZigZagDeltaInt64(data: BigUint64Array): BigUint64Array;
|
|
47
|
+
export declare function decodeUnsignedComponentwiseDeltaVec2(data: Uint32Array): Uint32Array;
|
|
48
|
+
export declare function decodeUnsignedComponentwiseDeltaVec2Scaled(data: Uint32Array, scale: number, min: number, max: number): Uint32Array;
|
|
49
|
+
export declare function decodeUnsignedConstRleInt32(data: Int32Array | Uint32Array): number;
|
|
50
|
+
export declare function decodeZigZagConstRleInt32(data: Int32Array | Uint32Array): number;
|
|
51
|
+
export declare function decodeZigZagSequenceRleInt32(data: Int32Array | Uint32Array): [baseValue: number, delta: number];
|
|
48
52
|
export declare function decodeUnsignedConstRleInt64(data: BigInt64Array | BigUint64Array): bigint;
|
|
49
53
|
export declare function decodeZigZagConstRleInt64(data: BigInt64Array | BigUint64Array): bigint;
|
|
50
54
|
export declare function decodeZigZagSequenceRleInt64(data: BigInt64Array | BigUint64Array): [baseValue: bigint, delta: bigint];
|
|
@@ -3,7 +3,7 @@ import { decodeBigEndianInt32sInto } from "./bigEndianDecode";
|
|
|
3
3
|
export { createFastPforWireDecodeWorkspace } from "./fastPforDecoder";
|
|
4
4
|
//based on https://github.com/mapbox/pbf/blob/main/index.js
|
|
5
5
|
export function decodeVarintInt32(buf, bufferOffset, numValues) {
|
|
6
|
-
const dst = new
|
|
6
|
+
const dst = new Uint32Array(numValues);
|
|
7
7
|
let dstOffset = 0;
|
|
8
8
|
let offset = bufferOffset.get();
|
|
9
9
|
for (let i = 0; i < dst.length; i++) {
|
|
@@ -164,9 +164,11 @@ export function decodeZigZagFloat64Value(encoded) {
|
|
|
164
164
|
return encoded % 2 === 1 ? (encoded + 1) / -2 : encoded / 2;
|
|
165
165
|
}
|
|
166
166
|
export function decodeZigZagInt32(encodedData) {
|
|
167
|
+
const decodedValues = new Int32Array(encodedData.length);
|
|
167
168
|
for (let i = 0; i < encodedData.length; i++) {
|
|
168
|
-
|
|
169
|
+
decodedValues[i] = decodeZigZagInt32Value(encodedData[i]);
|
|
169
170
|
}
|
|
171
|
+
return decodedValues;
|
|
170
172
|
}
|
|
171
173
|
export function decodeZigZagInt64(encodedData) {
|
|
172
174
|
const decodedValues = new BigInt64Array(encodedData.length);
|
|
@@ -188,7 +190,7 @@ export function decodeUnsignedRleInt32(encodedData, numRuns, numTotalValues) {
|
|
|
188
190
|
numTotalValues += encodedData[i];
|
|
189
191
|
}
|
|
190
192
|
}
|
|
191
|
-
const decodedValues = new
|
|
193
|
+
const decodedValues = new Uint32Array(numTotalValues);
|
|
192
194
|
let offset = 0;
|
|
193
195
|
for (let i = 0; i < numRuns; i++) {
|
|
194
196
|
const runLength = encodedData[i];
|
|
@@ -232,7 +234,8 @@ export function decodeUnsignedRleFloat64(encodedData, numRuns, numTotalValues) {
|
|
|
232
234
|
* Inspired by https://github.com/lemire/JavaFastPFOR/blob/master/src/main/java/me/lemire/integercompression/differential/Delta.java
|
|
233
235
|
*/
|
|
234
236
|
export function decodeZigZagDeltaInt32(data) {
|
|
235
|
-
|
|
237
|
+
const decodedValues = new Int32Array(data.length);
|
|
238
|
+
decodedValues[0] = decodeZigZagInt32Value(data[0]);
|
|
236
239
|
const sz0 = (data.length / 4) * 4;
|
|
237
240
|
let i = 1;
|
|
238
241
|
if (sz0 >= 4) {
|
|
@@ -241,15 +244,16 @@ export function decodeZigZagDeltaInt32(data) {
|
|
|
241
244
|
const data2 = data[i + 1];
|
|
242
245
|
const data3 = data[i + 2];
|
|
243
246
|
const data4 = data[i + 3];
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
247
|
+
decodedValues[i] = decodeZigZagInt32Value(data1) + decodedValues[i - 1];
|
|
248
|
+
decodedValues[i + 1] = decodeZigZagInt32Value(data2) + decodedValues[i];
|
|
249
|
+
decodedValues[i + 2] = decodeZigZagInt32Value(data3) + decodedValues[i + 1];
|
|
250
|
+
decodedValues[i + 3] = decodeZigZagInt32Value(data4) + decodedValues[i + 2];
|
|
248
251
|
}
|
|
249
252
|
}
|
|
250
253
|
for (; i !== data.length; ++i) {
|
|
251
|
-
|
|
254
|
+
decodedValues[i] = decodeZigZagInt32Value(data[i]) + decodedValues[i - 1];
|
|
252
255
|
}
|
|
256
|
+
return decodedValues;
|
|
253
257
|
}
|
|
254
258
|
export function decodeZigZagDeltaInt64(data) {
|
|
255
259
|
const decodedValues = new BigInt64Array(data.length);
|
|
@@ -375,9 +379,10 @@ export function inverseDelta(data) {
|
|
|
375
379
|
*/
|
|
376
380
|
export function decodeComponentwiseDeltaVec2(data) {
|
|
377
381
|
if (data.length < 2)
|
|
378
|
-
return;
|
|
379
|
-
|
|
380
|
-
|
|
382
|
+
return new Int32Array(data);
|
|
383
|
+
const decodedData = new Int32Array(data.length);
|
|
384
|
+
decodedData[0] = decodeZigZagInt32Value(data[0]);
|
|
385
|
+
decodedData[1] = decodeZigZagInt32Value(data[1]);
|
|
381
386
|
const sz0 = (data.length / 4) * 4;
|
|
382
387
|
let i = 2;
|
|
383
388
|
if (sz0 >= 4) {
|
|
@@ -386,24 +391,26 @@ export function decodeComponentwiseDeltaVec2(data) {
|
|
|
386
391
|
const y1 = data[i + 1];
|
|
387
392
|
const x2 = data[i + 2];
|
|
388
393
|
const y2 = data[i + 3];
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
394
|
+
decodedData[i] = decodeZigZagInt32Value(x1) + decodedData[i - 2];
|
|
395
|
+
decodedData[i + 1] = decodeZigZagInt32Value(y1) + decodedData[i - 1];
|
|
396
|
+
decodedData[i + 2] = decodeZigZagInt32Value(x2) + decodedData[i];
|
|
397
|
+
decodedData[i + 3] = decodeZigZagInt32Value(y2) + decodedData[i + 1];
|
|
393
398
|
}
|
|
394
399
|
}
|
|
395
400
|
for (; i !== data.length; i += 2) {
|
|
396
|
-
|
|
397
|
-
|
|
401
|
+
decodedData[i] = decodeZigZagInt32Value(data[i]) + decodedData[i - 2];
|
|
402
|
+
decodedData[i + 1] = decodeZigZagInt32Value(data[i + 1]) + decodedData[i - 1];
|
|
398
403
|
}
|
|
404
|
+
return decodedData;
|
|
399
405
|
}
|
|
400
406
|
export function decodeComponentwiseDeltaVec2Scaled(data, scale, min, max) {
|
|
401
407
|
if (data.length < 2)
|
|
402
|
-
return;
|
|
408
|
+
return new Int32Array(data);
|
|
409
|
+
const decodedData = new Int32Array(data.length);
|
|
403
410
|
let previousVertexX = decodeZigZagInt32Value(data[0]);
|
|
404
411
|
let previousVertexY = decodeZigZagInt32Value(data[1]);
|
|
405
|
-
|
|
406
|
-
|
|
412
|
+
decodedData[0] = clamp(Math.round(previousVertexX * scale), min, max);
|
|
413
|
+
decodedData[1] = clamp(Math.round(previousVertexY * scale), min, max);
|
|
407
414
|
const sz0 = data.length / 16;
|
|
408
415
|
let i = 2;
|
|
409
416
|
if (sz0 >= 4) {
|
|
@@ -412,22 +419,23 @@ export function decodeComponentwiseDeltaVec2Scaled(data, scale, min, max) {
|
|
|
412
419
|
const y1 = data[i + 1];
|
|
413
420
|
const currentVertexX = decodeZigZagInt32Value(x1) + previousVertexX;
|
|
414
421
|
const currentVertexY = decodeZigZagInt32Value(y1) + previousVertexY;
|
|
415
|
-
|
|
416
|
-
|
|
422
|
+
decodedData[i] = clamp(Math.round(currentVertexX * scale), min, max);
|
|
423
|
+
decodedData[i + 1] = clamp(Math.round(currentVertexY * scale), min, max);
|
|
417
424
|
const x2 = data[i + 2];
|
|
418
425
|
const y2 = data[i + 3];
|
|
419
426
|
previousVertexX = decodeZigZagInt32Value(x2) + currentVertexX;
|
|
420
427
|
previousVertexY = decodeZigZagInt32Value(y2) + currentVertexY;
|
|
421
|
-
|
|
422
|
-
|
|
428
|
+
decodedData[i + 2] = clamp(Math.round(previousVertexX * scale), min, max);
|
|
429
|
+
decodedData[i + 3] = clamp(Math.round(previousVertexY * scale), min, max);
|
|
423
430
|
}
|
|
424
431
|
}
|
|
425
432
|
for (; i !== data.length; i += 2) {
|
|
426
433
|
previousVertexX += decodeZigZagInt32Value(data[i]);
|
|
427
434
|
previousVertexY += decodeZigZagInt32Value(data[i + 1]);
|
|
428
|
-
|
|
429
|
-
|
|
435
|
+
decodedData[i] = clamp(Math.round(previousVertexX * scale), min, max);
|
|
436
|
+
decodedData[i + 1] = clamp(Math.round(previousVertexY * scale), min, max);
|
|
430
437
|
}
|
|
438
|
+
return decodedData;
|
|
431
439
|
}
|
|
432
440
|
function clamp(n, min, max) {
|
|
433
441
|
return Math.min(max, Math.max(min, n));
|
|
@@ -461,10 +469,10 @@ export function decodeZigZagRleDeltaInt32(data, numRuns, numTotalValues) {
|
|
|
461
469
|
}
|
|
462
470
|
offset += runLength;
|
|
463
471
|
}
|
|
464
|
-
return
|
|
472
|
+
return decodedValues;
|
|
465
473
|
}
|
|
466
474
|
export function decodeRleDeltaInt32(data, numRuns, numTotalValues) {
|
|
467
|
-
const decodedValues = new
|
|
475
|
+
const decodedValues = new Uint32Array(numTotalValues + 1);
|
|
468
476
|
decodedValues[0] = 0;
|
|
469
477
|
let offset = 1;
|
|
470
478
|
let previousValue = decodedValues[0];
|
|
@@ -477,7 +485,7 @@ export function decodeRleDeltaInt32(data, numRuns, numTotalValues) {
|
|
|
477
485
|
}
|
|
478
486
|
offset += runLength;
|
|
479
487
|
}
|
|
480
|
-
return
|
|
488
|
+
return decodedValues;
|
|
481
489
|
}
|
|
482
490
|
/**
|
|
483
491
|
* Decode Delta-RLE with multiple runs by fully reconstructing values.
|
|
@@ -520,6 +528,39 @@ export function decodeDeltaRleInt64(data, numRuns, numValues) {
|
|
|
520
528
|
}
|
|
521
529
|
return result;
|
|
522
530
|
}
|
|
531
|
+
export function decodeUnsignedZigZagDeltaInt32(data) {
|
|
532
|
+
const decodedValues = new Uint32Array(data.length);
|
|
533
|
+
decodedValues[0] = decodeZigZagInt32Value(data[0]) >>> 0;
|
|
534
|
+
for (let i = 1; i < data.length; i++) {
|
|
535
|
+
decodedValues[i] = (decodedValues[i - 1] + decodeZigZagInt32Value(data[i])) >>> 0;
|
|
536
|
+
}
|
|
537
|
+
return decodedValues;
|
|
538
|
+
}
|
|
539
|
+
export function decodeUnsignedZigZagDeltaInt64(data) {
|
|
540
|
+
const decodedValues = new BigUint64Array(data.length);
|
|
541
|
+
decodedValues[0] = BigInt.asUintN(64, decodeZigZagInt64Value(data[0]));
|
|
542
|
+
for (let i = 1; i < data.length; i++) {
|
|
543
|
+
decodedValues[i] = BigInt.asUintN(64, decodedValues[i - 1] + decodeZigZagInt64Value(data[i]));
|
|
544
|
+
}
|
|
545
|
+
return decodedValues;
|
|
546
|
+
}
|
|
547
|
+
export function decodeUnsignedComponentwiseDeltaVec2(data) {
|
|
548
|
+
if (data.length < 2) {
|
|
549
|
+
return new Uint32Array(data);
|
|
550
|
+
}
|
|
551
|
+
const decodedData = new Uint32Array(data.length);
|
|
552
|
+
decodedData[0] = decodeZigZagInt32Value(data[0]) >>> 0;
|
|
553
|
+
decodedData[1] = decodeZigZagInt32Value(data[1]) >>> 0;
|
|
554
|
+
for (let i = 2; i < data.length; i += 2) {
|
|
555
|
+
decodedData[i] = (decodedData[i - 2] + decodeZigZagInt32Value(data[i])) >>> 0;
|
|
556
|
+
decodedData[i + 1] = (decodedData[i - 1] + decodeZigZagInt32Value(data[i + 1])) >>> 0;
|
|
557
|
+
}
|
|
558
|
+
return decodedData;
|
|
559
|
+
}
|
|
560
|
+
export function decodeUnsignedComponentwiseDeltaVec2Scaled(data, scale, min, max) {
|
|
561
|
+
const scaledValues = decodeComponentwiseDeltaVec2Scaled(data, scale, min, max);
|
|
562
|
+
return new Uint32Array(scaledValues);
|
|
563
|
+
}
|
|
523
564
|
export function decodeUnsignedConstRleInt32(data) {
|
|
524
565
|
return data[1];
|
|
525
566
|
}
|