typescript parseEntry

This commit is contained in:
Brandon Liu
2022-02-17 12:33:07 +08:00
parent faea10dd7c
commit f35215931e
2 changed files with 22 additions and 6 deletions

View File

@@ -5,6 +5,7 @@ import {
getUint48,
queryLeafdir,
queryTile,
parseEntry,
Entry,
createDirectory,
} from "./pmtiles";
@@ -112,4 +113,11 @@ test("convert spec v1 directory to spec v2 directory", (assertion) => {
assertion.ok(entry!.offset === 2);
entry = queryTile(view, 6, 2, 1);
assertion.ok(entry!.offset === 1);
entry = parseEntry(view, 0);
assertion.ok(entry!.offset === 1);
entry = parseEntry(view, 1);
assertion.ok(entry!.offset === 2);
entry = parseEntry(view, 2);
assertion.ok(entry!.offset === 3);
});

View File

@@ -105,6 +105,19 @@ const entrySort = (a: Entry, b: Entry): number => {
return a.y - b.y;
};
export const parseEntry = (dataview: DataView, i: number): Entry => {
var z_raw = dataview.getUint8(i * 17);
var z = z_raw & 127;
return {
z: z,
x: getUint24(dataview, i * 17 + 1),
y: getUint24(dataview, i * 17 + 4),
offset: getUint48(dataview, i * 17 + 7),
length: dataview.getUint32(i * 17 + 13, true),
is_dir: z_raw >> 7 === 1,
};
};
export const createDirectory = (entries: Entry[]): ArrayBuffer => {
entries.sort(entrySort);
@@ -145,7 +158,7 @@ interface Zxy {
y: number;
}
// handle different leaf levels
// TODO: handle different leaf levels
export const deriveLeaf = (tile: Zxy): Zxy => {
let z7_tile_diff = tile.z - 7;
let z7_x = Math.trunc(tile.x / (1 << z7_tile_diff));
@@ -153,11 +166,6 @@ export const deriveLeaf = (tile: Zxy): Zxy => {
return { z: 7, x: z7_x, y: z7_y };
};
// needed to convert a spec v1 to a spec v2
const sortEntries = (dataview: DataView): ArrayBuffer => {
return new ArrayBuffer(0);
};
interface Header {
version: number;
json_size: number;