Skip to content

Commit

Permalink
port maplibre#158 to JS decoder
Browse files Browse the repository at this point in the history
  • Loading branch information
springmeyer committed Jun 16, 2024
1 parent 6d87102 commit 61f25c5
Showing 1 changed file with 10 additions and 4 deletions.
14 changes: 10 additions & 4 deletions js/src/decoder/GeometryDecoder.ts
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,9 @@ export class GeometryDecoder {
return [];
}
const vertexBuffer = geometryColumn.vertexList.map(i => i);

const containsPolygon = geometryTypes.includes(
GeometryType.POLYGON) || geometryTypes.includes(GeometryType.MULTIPOLYGON);
for (const geometryTypeNum of geometryTypes) {
const geometryType = geometryTypeNum as GeometryType;
if (geometryType === GeometryType.POINT) {
Expand Down Expand Up @@ -120,13 +123,14 @@ export class GeometryDecoder {
geometries[geometryCounter++] = geometryFactory.createMultiPoint(points);
}
} else if (geometryType === GeometryType.LINESTRING) {
const numVertices = containsPolygon
? ringOffsets[ringOffsetsCounter++]
: partOffsets[partOffsetCounter++];
if (!vertexOffsets || vertexOffsets.length === 0) {
const numVertices = partOffsets[partOffsetCounter++];
const vertices = this.getLineString(vertexBuffer, vertexBufferOffset, numVertices, false);
vertexBufferOffset += numVertices * 2;
geometries[geometryCounter++] = geometryFactory.createLineString(vertices);
} else {
const numVertices = partOffsets[partOffsetCounter++];
const vertices = this.decodeDictionaryEncodedLineString(vertexBuffer, vertexOffsets, vertexOffsetsOffset, numVertices, false);
vertexOffsetsOffset += numVertices;
geometries[geometryCounter++] = geometryFactory.createLineString(vertices);
Expand Down Expand Up @@ -159,15 +163,17 @@ export class GeometryDecoder {
const lineStrings: LineString[] = new Array(numLineStrings);
if (!vertexOffsets || vertexOffsets.length === 0) {
for (let i = 0; i < numLineStrings; i++) {
const numVertices = partOffsets[partOffsetCounter++];
const numVertices = containsPolygon
? ringOffsets[ringOffsetsCounter++] : partOffsets[partOffsetCounter++];
const vertices = this.getLineString(vertexBuffer, vertexBufferOffset, numVertices, false);
lineStrings[i] = geometryFactory.createLineString(vertices);
vertexBufferOffset += numVertices * 2;
}
geometries[geometryCounter++] = geometryFactory.createMultiLineString(lineStrings);
} else {
for (let i = 0; i < numLineStrings; i++) {
const numVertices = partOffsets[partOffsetCounter++];
const numVertices = containsPolygon
? ringOffsets[ringOffsetsCounter++] : partOffsets[partOffsetCounter++];
const vertices = this.decodeDictionaryEncodedLineString(vertexBuffer, vertexOffsets, vertexOffsetsOffset, numVertices, false);
lineStrings[i] = geometryFactory.createLineString(vertices);
vertexOffsetsOffset += numVertices;
Expand Down

0 comments on commit 61f25c5

Please sign in to comment.