diff --git a/js/index.ts b/js/index.ts index 4ffd185..774e8fd 100644 --- a/js/index.ts +++ b/js/index.ts @@ -1,5 +1,6 @@ import { decompressSync } from "fflate"; import v2 from "./v2"; +export * from './adapters'; export interface BufferPosition { buf: Uint8Array; @@ -134,9 +135,10 @@ const ENTRY_SIZE_BYTES = 32; export enum Compression { Unknown = 0, - Gzip = 1, - Brotli = 2, - Zstd = 3, + None = 1, + Gzip = 2, + Brotli = 3, + Zstd = 4, } function tryDecompress(buf: ArrayBuffer, compression: Compression) { @@ -157,7 +159,7 @@ export enum TileType { Webp = 4, } -const HEADER_SIZE_BYTES = 122; +const HEADER_SIZE_BYTES = 127; export interface Header { specVersion: number; @@ -301,30 +303,30 @@ export function bytesToHeader(bytes: ArrayBuffer, etag?: string): Header { const v = new DataView(bytes); return { specVersion: 3, - rootDirectoryOffset: Number(v.getBigUint64(3, true)), - rootDirectoryLength: Number(v.getBigUint64(11, true)), - jsonMetadataOffset: Number(v.getBigUint64(19, true)), - jsonMetadataLength: Number(v.getBigUint64(27, true)), - leafDirectoryOffset: Number(v.getBigUint64(35, true)), - leafDirectoryLength: Number(v.getBigUint64(43, true)), - tileDataOffset: Number(v.getBigUint64(51, true)), - tileDataLength: Number(v.getBigUint64(59, true)), - numAddressedTiles: Number(v.getBigUint64(67, true)), - numTileEntries: Number(v.getBigUint64(75, true)), - numTileContents: Number(v.getBigUint64(83, true)), - clustered: v.getUint8(91) === 1, - internalCompression: v.getUint8(92), - tileCompression: v.getUint8(93), - tileType: v.getUint8(94), - minZoom: v.getUint8(95), - maxZoom: v.getUint8(96), - minLon: v.getInt32(97, true) / 10000000, - minLat: v.getInt32(101, true) / 10000000, - maxLon: v.getInt32(105, true) / 10000000, - maxLat: v.getInt32(109, true) / 10000000, - centerZoom: v.getUint8(113), - centerLon: v.getInt32(114, true) / 10000000, - centerLat: v.getInt32(118, true) / 10000000, + rootDirectoryOffset: Number(v.getBigUint64(8, true)), + rootDirectoryLength: Number(v.getBigUint64(16, true)), + jsonMetadataOffset: Number(v.getBigUint64(24, true)), + jsonMetadataLength: Number(v.getBigUint64(32, true)), + leafDirectoryOffset: Number(v.getBigUint64(40, true)), + leafDirectoryLength: Number(v.getBigUint64(48, true)), + tileDataOffset: Number(v.getBigUint64(56, true)), + tileDataLength: Number(v.getBigUint64(64, true)), + numAddressedTiles: Number(v.getBigUint64(72, true)), + numTileEntries: Number(v.getBigUint64(80, true)), + numTileContents: Number(v.getBigUint64(88, true)), + clustered: v.getUint8(96) === 1, + internalCompression: v.getUint8(97), + tileCompression: v.getUint8(98), + tileType: v.getUint8(99), + minZoom: v.getUint8(100), + maxZoom: v.getUint8(101), + minLon: v.getInt32(102, true) / 10000000, + minLat: v.getInt32(106, true) / 10000000, + maxLon: v.getInt32(110, true) / 10000000, + maxLat: v.getInt32(114, true) / 10000000, + centerZoom: v.getUint8(118), + centerLon: v.getInt32(119, true) / 10000000, + centerLat: v.getInt32(123, true) / 10000000, etag: etag, }; } diff --git a/js/test/data/test_fixture_1.pmtiles b/js/test/data/test_fixture_1.pmtiles index 2f2c750..c86db1f 100644 Binary files a/js/test/data/test_fixture_1.pmtiles and b/js/test/data/test_fixture_1.pmtiles differ diff --git a/js/test/data/test_fixture_2.pmtiles b/js/test/data/test_fixture_2.pmtiles index fec7eb0..cb19dd5 100644 Binary files a/js/test/data/test_fixture_2.pmtiles and b/js/test/data/test_fixture_2.pmtiles differ diff --git a/js/test/v3.test.ts b/js/test/v3.test.ts index 3770853..b938f66 100644 --- a/js/test/v3.test.ts +++ b/js/test/v3.test.ts @@ -147,20 +147,20 @@ test("cache getHeader", async (assertion) => { const source = new TestNodeFileSource("test/data/test_fixture_1.pmtiles", "1"); const cache = new SharedPromiseCache(); const header = await cache.getHeader(source); - assertion.eq(header.rootDirectoryOffset, 122); + assertion.eq(header.rootDirectoryOffset, 127); assertion.eq(header.rootDirectoryLength, 25); - assertion.eq(header.jsonMetadataOffset, 147); - assertion.eq(header.jsonMetadataLength, 239); + assertion.eq(header.jsonMetadataOffset, 152); + assertion.eq(header.jsonMetadataLength, 247); assertion.eq(header.leafDirectoryOffset, 0); assertion.eq(header.leafDirectoryLength, 0); - assertion.eq(header.tileDataOffset, 386); + assertion.eq(header.tileDataOffset, 399); assertion.eq(header.tileDataLength, 69); assertion.eq(header.numAddressedTiles, 1); assertion.eq(header.numTileEntries, 1); assertion.eq(header.numTileContents, 1); assertion.eq(header.clustered, false); - assertion.eq(header.internalCompression, 1); - assertion.eq(header.tileCompression, 1); + assertion.eq(header.internalCompression, 2); + assertion.eq(header.tileCompression, 2); assertion.eq(header.tileType, 1); assertion.eq(header.minZoom, 0); assertion.eq(header.maxZoom, 0);