@osmix/pbf 0.0.1 → 0.0.2
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/CHANGELOG.md +6 -0
- package/dist/src/blobs-to-blocks.d.ts +6 -0
- package/dist/src/blobs-to-blocks.d.ts.map +1 -0
- package/dist/src/blobs-to-blocks.js +22 -0
- package/dist/src/blobs-to-blocks.js.map +1 -0
- package/dist/src/blocks-to-pbf.d.ts +17 -0
- package/dist/src/blocks-to-pbf.d.ts.map +1 -0
- package/dist/src/blocks-to-pbf.js +74 -0
- package/dist/src/blocks-to-pbf.js.map +1 -0
- package/dist/src/index.d.ts +9 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +9 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/pbf-to-blobs.d.ts +7 -0
- package/dist/src/pbf-to-blobs.d.ts.map +1 -0
- package/dist/src/pbf-to-blobs.js +49 -0
- package/dist/src/pbf-to-blobs.js.map +1 -0
- package/dist/src/pbf-to-blocks.d.ts +21 -0
- package/dist/src/pbf-to-blocks.d.ts.map +1 -0
- package/dist/src/pbf-to-blocks.js +54 -0
- package/dist/src/pbf-to-blocks.js.map +1 -0
- package/dist/src/proto/fileformat.d.ts +27 -0
- package/dist/src/proto/fileformat.d.ts.map +1 -0
- package/dist/src/proto/fileformat.js +57 -0
- package/dist/src/proto/fileformat.js.map +1 -0
- package/dist/src/proto/osmformat.d.ts +92 -0
- package/dist/src/proto/osmformat.d.ts.map +1 -0
- package/dist/src/proto/osmformat.js +459 -0
- package/dist/src/proto/osmformat.js.map +1 -0
- package/dist/src/spec.d.ts +6 -0
- package/dist/src/spec.d.ts.map +1 -0
- package/dist/src/spec.js +10 -0
- package/dist/src/spec.js.map +1 -0
- package/dist/src/utils.d.ts +26 -0
- package/dist/src/utils.d.ts.map +1 -0
- package/dist/src/utils.js +100 -0
- package/dist/src/utils.js.map +1 -0
- package/dist/test/blobs-to-blocks.test.d.ts +2 -0
- package/dist/test/blobs-to-blocks.test.d.ts.map +1 -0
- package/dist/test/blobs-to-blocks.test.js +57 -0
- package/dist/test/blobs-to-blocks.test.js.map +1 -0
- package/dist/test/helpers.d.ts +11 -0
- package/dist/test/helpers.d.ts.map +1 -0
- package/dist/test/helpers.js +58 -0
- package/dist/test/helpers.js.map +1 -0
- package/dist/test/pbf-to-blobs.test.d.ts +2 -0
- package/dist/test/pbf-to-blobs.test.d.ts.map +1 -0
- package/dist/test/pbf-to-blobs.test.js +69 -0
- package/dist/test/pbf-to-blobs.test.js.map +1 -0
- package/dist/test/read.bench.d.ts +2 -0
- package/dist/test/read.bench.d.ts.map +1 -0
- package/dist/test/read.bench.js +29 -0
- package/dist/test/read.bench.js.map +1 -0
- package/dist/test/read.test.d.ts +2 -0
- package/dist/test/read.test.d.ts.map +1 -0
- package/dist/test/read.test.js +34 -0
- package/dist/test/read.test.js.map +1 -0
- package/dist/test/streams.test.d.ts +2 -0
- package/dist/test/streams.test.d.ts.map +1 -0
- package/dist/test/streams.test.js +70 -0
- package/dist/test/streams.test.js.map +1 -0
- package/dist/test/utils.bun.test.d.ts +2 -0
- package/dist/test/utils.bun.test.d.ts.map +1 -0
- package/dist/test/utils.bun.test.js +221 -0
- package/dist/test/utils.bun.test.js.map +1 -0
- package/dist/test/utils.d.ts +25 -0
- package/dist/test/utils.d.ts.map +1 -0
- package/dist/test/utils.js +47 -0
- package/dist/test/utils.js.map +1 -0
- package/dist/test/utils.test.d.ts +2 -0
- package/dist/test/utils.test.d.ts.map +1 -0
- package/dist/test/utils.test.js +44 -0
- package/dist/test/utils.test.js.map +1 -0
- package/dist/test/verify-pbf-reading.bun.test.d.ts +2 -0
- package/dist/test/verify-pbf-reading.bun.test.d.ts.map +1 -0
- package/dist/test/verify-pbf-reading.bun.test.js +32 -0
- package/dist/test/verify-pbf-reading.bun.test.js.map +1 -0
- package/dist/test/write.test.d.ts +2 -0
- package/dist/test/write.test.d.ts.map +1 -0
- package/dist/test/write.test.js +64 -0
- package/dist/test/write.test.js.map +1 -0
- package/package.json +2 -1
- package/src/pbf-to-blocks.ts +6 -8
- package/src/utils.ts +22 -0
- package/test/utils.bun.test.ts +15 -65
- package/test/write.test.ts +1 -1
- package/vitest.config.ts +0 -7
package/CHANGELOG.md
CHANGED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Decompresses raw OSM PBF blobs and yields typed header and primitive blocks.
|
|
3
|
+
* Expects the first blob to contain the file header and streams the rest as data blocks.
|
|
4
|
+
*/
|
|
5
|
+
export declare function osmPbfBlobsToBlocksGenerator(blobs: AsyncGenerator<Uint8Array<ArrayBuffer>> | Generator<Uint8Array<ArrayBuffer>>, decompress?: (data: Uint8Array<ArrayBuffer>) => Promise<Uint8Array<ArrayBuffer>>): AsyncGenerator<import(".").OsmPbfHeaderBlock | import(".").OsmPbfBlock, void, unknown>;
|
|
6
|
+
//# sourceMappingURL=blobs-to-blocks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blobs-to-blocks.d.ts","sourceRoot":"","sources":["../../src/blobs-to-blocks.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,wBAAuB,4BAA4B,CAClD,KAAK,EACF,cAAc,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,GACvC,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,EACrC,UAAU,GAAE,CACX,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,KACzB,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAiB,0FAarD"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import Pbf from "pbf";
|
|
2
|
+
import { readHeaderBlock, readPrimitiveBlock } from "./proto/osmformat";
|
|
3
|
+
import { webDecompress } from "./utils";
|
|
4
|
+
/**
|
|
5
|
+
* Decompresses raw OSM PBF blobs and yields typed header and primitive blocks.
|
|
6
|
+
* Expects the first blob to contain the file header and streams the rest as data blocks.
|
|
7
|
+
*/
|
|
8
|
+
export async function* osmPbfBlobsToBlocksGenerator(blobs, decompress = webDecompress) {
|
|
9
|
+
let headerRead = false;
|
|
10
|
+
for await (const blob of blobs) {
|
|
11
|
+
const decompressedBlob = await decompress(blob);
|
|
12
|
+
const pbf = new Pbf(decompressedBlob);
|
|
13
|
+
if (!headerRead) {
|
|
14
|
+
headerRead = true;
|
|
15
|
+
yield readHeaderBlock(pbf);
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
yield readPrimitiveBlock(pbf);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=blobs-to-blocks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blobs-to-blocks.js","sourceRoot":"","sources":["../../src/blobs-to-blocks.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAA;AACrB,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAEvC;;;GAGG;AACH,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,4BAA4B,CAClD,KAEqC,EACrC,aAEwC,aAAa;IAErD,IAAI,UAAU,GAAG,KAAK,CAAA;IACtB,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAChC,MAAM,gBAAgB,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,CAAA;QAC/C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAA;QACrC,IAAI,CAAC,UAAU,EAAE,CAAC;YACjB,UAAU,GAAG,IAAI,CAAA;YACjB,MAAM,eAAe,CAAC,GAAG,CAAC,CAAA;QAC3B,CAAC;aAAM,CAAC;YACP,MAAM,kBAAkB,CAAC,GAAG,CAAC,CAAA;QAC9B,CAAC;IACF,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { OsmPbfBlock, OsmPbfHeaderBlock } from "./proto/osmformat";
|
|
2
|
+
/**
|
|
3
|
+
* Serializes a header or primitive block into a spec-compliant compressed blob.
|
|
4
|
+
* Automatically sets the blob type, compresses the payload, and enforces size guardrails.
|
|
5
|
+
* @param block - Parsed header or primitive block to encode.
|
|
6
|
+
* @returns BlobHeader length prefix + Blob bytes as a single Uint8Array.
|
|
7
|
+
*/
|
|
8
|
+
export declare function osmBlockToPbfBlobBytes(block: OsmPbfBlock | OsmPbfHeaderBlock, compress?: (data: Uint8Array<ArrayBuffer>) => Promise<Uint8Array<ArrayBuffer>>): Promise<Uint8Array<ArrayBufferLike>>;
|
|
9
|
+
/**
|
|
10
|
+
* Web `TransformStream` that converts OSM header/data blocks into PBF byte chunks.
|
|
11
|
+
* Throws if the header is not the first block and reuses `osmBlockToPbfBlobBytes` for encoding.
|
|
12
|
+
*/
|
|
13
|
+
export declare class OsmBlocksToPbfBytesTransformStream extends TransformStream<OsmPbfHeaderBlock | OsmPbfBlock, Uint8Array> {
|
|
14
|
+
headerEnqueued: boolean;
|
|
15
|
+
constructor();
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=blocks-to-pbf.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blocks-to-pbf.d.ts","sourceRoot":"","sources":["../../src/blocks-to-pbf.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAUvE;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAC3C,KAAK,EAAE,WAAW,GAAG,iBAAiB,EACtC,QAAQ,GAAE,CACT,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,KACzB,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAe,wCAqDnD;AAED;;;GAGG;AACH,qBAAa,kCAAmC,SAAQ,eAAe,CACtE,iBAAiB,GAAG,WAAW,EAC/B,UAAU,CACV;IACA,cAAc,UAAQ;;CAYtB"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import Pbf from "pbf";
|
|
2
|
+
import { writeBlob, writeBlobHeader } from "./proto/fileformat";
|
|
3
|
+
import { writeHeaderBlock, writePrimitiveBlock } from "./proto/osmformat";
|
|
4
|
+
import { MAX_BLOB_SIZE_BYTES, MAX_HEADER_SIZE_BYTES, RECOMMENDED_BLOB_SIZE_BYTES, RECOMMENDED_HEADER_SIZE_BYTES, } from "./spec";
|
|
5
|
+
import { concatUint8, uint32BE, webCompress } from "./utils";
|
|
6
|
+
/**
|
|
7
|
+
* Serializes a header or primitive block into a spec-compliant compressed blob.
|
|
8
|
+
* Automatically sets the blob type, compresses the payload, and enforces size guardrails.
|
|
9
|
+
* @param block - Parsed header or primitive block to encode.
|
|
10
|
+
* @returns BlobHeader length prefix + Blob bytes as a single Uint8Array.
|
|
11
|
+
*/
|
|
12
|
+
export async function osmBlockToPbfBlobBytes(block, compress = webCompress) {
|
|
13
|
+
const contentPbf = new Pbf();
|
|
14
|
+
let type;
|
|
15
|
+
if ("primitivegroup" in block) {
|
|
16
|
+
type = "OSMData";
|
|
17
|
+
writePrimitiveBlock(block, contentPbf);
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
type = "OSMHeader";
|
|
21
|
+
writeHeaderBlock(block, contentPbf);
|
|
22
|
+
}
|
|
23
|
+
const contentData = contentPbf.finish();
|
|
24
|
+
const raw_size = contentData.length;
|
|
25
|
+
const compressedBuffer = await compress(contentData);
|
|
26
|
+
const blobPbf = new Pbf();
|
|
27
|
+
writeBlob({
|
|
28
|
+
raw_size,
|
|
29
|
+
zlib_data: compressedBuffer,
|
|
30
|
+
}, blobPbf);
|
|
31
|
+
const blob = blobPbf.finish();
|
|
32
|
+
const blobHeaderPbf = new Pbf();
|
|
33
|
+
writeBlobHeader({
|
|
34
|
+
type,
|
|
35
|
+
datasize: blob.length,
|
|
36
|
+
}, blobHeaderPbf);
|
|
37
|
+
const blobHeader = blobHeaderPbf.finish();
|
|
38
|
+
const blobHeaderSize = uint32BE(blobHeader.byteLength);
|
|
39
|
+
// Check the BlobHeader and Blob sizes, log error if over the recommended size, throw error if over the maximum size
|
|
40
|
+
if (blobHeader.byteLength > RECOMMENDED_HEADER_SIZE_BYTES) {
|
|
41
|
+
const sizeKiB = (blobHeader.byteLength / 1024).toFixed(2);
|
|
42
|
+
if (blobHeader.byteLength > MAX_HEADER_SIZE_BYTES) {
|
|
43
|
+
throw new Error(`BlobHeader is ${sizeKiB} KiB, the maximum size is 64KiB`);
|
|
44
|
+
}
|
|
45
|
+
console.warn(`BlobHeader is ${sizeKiB} KiB, the recommended size is 32KiB`);
|
|
46
|
+
}
|
|
47
|
+
if (blob.byteLength > RECOMMENDED_BLOB_SIZE_BYTES) {
|
|
48
|
+
const sizeMiB = (blob.byteLength / 1024 / 1024).toFixed(2);
|
|
49
|
+
if (blob.byteLength > MAX_BLOB_SIZE_BYTES) {
|
|
50
|
+
throw new Error(`Blob is ${sizeMiB} MiB, the maximum size is 32MiB`);
|
|
51
|
+
}
|
|
52
|
+
console.warn(`Blob is ${sizeMiB} MiB, the recommended size is 16MiB`);
|
|
53
|
+
}
|
|
54
|
+
return concatUint8(blobHeaderSize, blobHeader, blob);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Web `TransformStream` that converts OSM header/data blocks into PBF byte chunks.
|
|
58
|
+
* Throws if the header is not the first block and reuses `osmBlockToPbfBlobBytes` for encoding.
|
|
59
|
+
*/
|
|
60
|
+
export class OsmBlocksToPbfBytesTransformStream extends TransformStream {
|
|
61
|
+
headerEnqueued = false;
|
|
62
|
+
constructor() {
|
|
63
|
+
super({
|
|
64
|
+
transform: async (block, controller) => {
|
|
65
|
+
if ("primitivegroup" in block && !this.headerEnqueued) {
|
|
66
|
+
throw Error("Header first in ReadableStream of blocks.");
|
|
67
|
+
}
|
|
68
|
+
this.headerEnqueued = true;
|
|
69
|
+
controller.enqueue(await osmBlockToPbfBlobBytes(block));
|
|
70
|
+
},
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=blocks-to-pbf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blocks-to-pbf.js","sourceRoot":"","sources":["../../src/blocks-to-pbf.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from "./blobs-to-blocks";
|
|
2
|
+
export * from "./blocks-to-pbf";
|
|
3
|
+
export * from "./pbf-to-blobs";
|
|
4
|
+
export * from "./pbf-to-blocks";
|
|
5
|
+
export * from "./proto/fileformat";
|
|
6
|
+
export * from "./proto/osmformat";
|
|
7
|
+
export * from "./spec";
|
|
8
|
+
export * from "./utils";
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,cAAc,QAAQ,CAAA;AACtB,cAAc,SAAS,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from "./blobs-to-blocks";
|
|
2
|
+
export * from "./blocks-to-pbf";
|
|
3
|
+
export * from "./pbf-to-blobs";
|
|
4
|
+
export * from "./pbf-to-blocks";
|
|
5
|
+
export * from "./proto/fileformat";
|
|
6
|
+
export * from "./proto/osmformat";
|
|
7
|
+
export * from "./spec";
|
|
8
|
+
export * from "./utils";
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,cAAc,QAAQ,CAAA;AACtB,cAAc,SAAS,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Creates a stateful parser that slices incoming bytes into compressed OSM PBF blobs.
|
|
3
|
+
* Works with buffers, iterables, or streams and yields `Uint8Array` payloads ready to decompress.
|
|
4
|
+
* The first blob represents the file header; subsequent blobs hold primitive data.
|
|
5
|
+
*/
|
|
6
|
+
export declare function createOsmPbfBlobGenerator(): (chunk: Uint8Array) => Generator<Uint8Array<ArrayBuffer>, void, unknown>;
|
|
7
|
+
//# sourceMappingURL=pbf-to-blobs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pbf-to-blobs.d.ts","sourceRoot":"","sources":["../../src/pbf-to-blobs.ts"],"names":[],"mappings":"AAQA;;;;GAIG;AACH,wBAAgB,yBAAyB,KASb,OAAO,UAAU,uDAiC5C"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import Pbf from "pbf";
|
|
2
|
+
import { HEADER_LENGTH_BYTES } from "./pbf-to-blocks";
|
|
3
|
+
import { readBlob, readBlobHeader, } from "./proto/fileformat";
|
|
4
|
+
/**
|
|
5
|
+
* Creates a stateful parser that slices incoming bytes into compressed OSM PBF blobs.
|
|
6
|
+
* Works with buffers, iterables, or streams and yields `Uint8Array` payloads ready to decompress.
|
|
7
|
+
* The first blob represents the file header; subsequent blobs hold primitive data.
|
|
8
|
+
*/
|
|
9
|
+
export function createOsmPbfBlobGenerator() {
|
|
10
|
+
let pbf = new Pbf(new Uint8Array(0));
|
|
11
|
+
let state = "header-length";
|
|
12
|
+
let bytesNeeded = HEADER_LENGTH_BYTES;
|
|
13
|
+
let blobHeader = null;
|
|
14
|
+
/**
|
|
15
|
+
* Feed the parser with the next chunk of bytes and yield any complete compressed blobs.
|
|
16
|
+
*/
|
|
17
|
+
return function* nextChunk(chunk) {
|
|
18
|
+
const currentBuffer = pbf.buf.slice(pbf.pos);
|
|
19
|
+
const tmpBuffer = new Uint8Array(currentBuffer.buffer.byteLength + chunk.byteLength);
|
|
20
|
+
tmpBuffer.set(currentBuffer.subarray(0));
|
|
21
|
+
tmpBuffer.set(new Uint8Array(chunk), currentBuffer.byteLength);
|
|
22
|
+
pbf = new Pbf(tmpBuffer);
|
|
23
|
+
while (pbf.pos + bytesNeeded <= pbf.length) {
|
|
24
|
+
if (state === "header-length") {
|
|
25
|
+
const dataView = new DataView(pbf.buf.buffer);
|
|
26
|
+
bytesNeeded = dataView.getInt32(pbf.pos, false); // network byte order
|
|
27
|
+
pbf.pos += HEADER_LENGTH_BYTES;
|
|
28
|
+
state = "header";
|
|
29
|
+
}
|
|
30
|
+
else if (state === "header") {
|
|
31
|
+
blobHeader = readBlobHeader(pbf, pbf.pos + bytesNeeded);
|
|
32
|
+
bytesNeeded = blobHeader.datasize;
|
|
33
|
+
state = "blob";
|
|
34
|
+
}
|
|
35
|
+
else if (state === "blob") {
|
|
36
|
+
if (blobHeader == null)
|
|
37
|
+
throw Error("Blob header has not been read");
|
|
38
|
+
const blob = readBlob(pbf, pbf.pos + bytesNeeded);
|
|
39
|
+
if (blob.zlib_data === undefined || blob.zlib_data.length === 0)
|
|
40
|
+
throw Error("Blob has no zlib data. Format is unsupported.");
|
|
41
|
+
yield blob.zlib_data;
|
|
42
|
+
state = "header-length";
|
|
43
|
+
bytesNeeded = HEADER_LENGTH_BYTES;
|
|
44
|
+
blobHeader = null;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=pbf-to-blobs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pbf-to-blobs.js","sourceRoot":"","sources":["../../src/pbf-to-blobs.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAA;AACrB,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,EAEN,QAAQ,EACR,cAAc,GACd,MAAM,oBAAoB,CAAA;AAE3B;;;;GAIG;AACH,MAAM,UAAU,yBAAyB;IACxC,IAAI,GAAG,GAAQ,IAAI,GAAG,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;IACzC,IAAI,KAAK,GAAwC,eAAe,CAAA;IAChE,IAAI,WAAW,GAAW,mBAAmB,CAAA;IAC7C,IAAI,UAAU,GAA4B,IAAI,CAAA;IAE9C;;OAEG;IACH,OAAO,QAAQ,CAAC,CAAC,SAAS,CAAC,KAAiB;QAC3C,MAAM,aAAa,GAAe,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACxD,MAAM,SAAS,GAAG,IAAI,UAAU,CAC/B,aAAa,CAAC,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAClD,CAAA;QACD,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;QACxC,SAAS,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC,UAAU,CAAC,CAAA;QAC9D,GAAG,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAA;QAExB,OAAO,GAAG,CAAC,GAAG,GAAG,WAAW,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YAC5C,IAAI,KAAK,KAAK,eAAe,EAAE,CAAC;gBAC/B,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;gBAC7C,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA,CAAC,qBAAqB;gBACrE,GAAG,CAAC,GAAG,IAAI,mBAAmB,CAAA;gBAC9B,KAAK,GAAG,QAAQ,CAAA;YACjB,CAAC;iBAAM,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC/B,UAAU,GAAG,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,WAAW,CAAC,CAAA;gBACvD,WAAW,GAAG,UAAU,CAAC,QAAQ,CAAA;gBACjC,KAAK,GAAG,MAAM,CAAA;YACf,CAAC;iBAAM,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;gBAC7B,IAAI,UAAU,IAAI,IAAI;oBAAE,MAAM,KAAK,CAAC,+BAA+B,CAAC,CAAA;gBACpE,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,WAAW,CAAC,CAAA;gBACjD,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;oBAC9D,MAAM,KAAK,CAAC,+CAA+C,CAAC,CAAA;gBAE7D,MAAM,IAAI,CAAC,SAAoC,CAAA;gBAE/C,KAAK,GAAG,eAAe,CAAA;gBACvB,WAAW,GAAG,mBAAmB,CAAA;gBACjC,UAAU,GAAG,IAAI,CAAA;YAClB,CAAC;QACF,CAAC;IACF,CAAC,CAAA;AACF,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type OsmPbfBlock, type OsmPbfHeaderBlock } from "./proto/osmformat";
|
|
2
|
+
import { type AsyncGeneratorValue } from "./utils";
|
|
3
|
+
export declare const HEADER_LENGTH_BYTES = 4;
|
|
4
|
+
/**
|
|
5
|
+
* Parses OSM PBF bytes from buffers, streams, or generators into header + block iterators.
|
|
6
|
+
* Returns the decoded header and a lazy async generator of primitive blocks.
|
|
7
|
+
*/
|
|
8
|
+
export declare function readOsmPbf(data: AsyncGeneratorValue<Uint8Array<ArrayBufferLike>>): Promise<{
|
|
9
|
+
header: OsmPbfHeaderBlock;
|
|
10
|
+
blocks: AsyncGenerator<OsmPbfBlock>;
|
|
11
|
+
}>;
|
|
12
|
+
/**
|
|
13
|
+
* Web `TransformStream` that turns raw PBF byte chunks into OSM header/data blocks.
|
|
14
|
+
* Assumes the first decoded blob carries the header and emits it before any primitive blocks.
|
|
15
|
+
*/
|
|
16
|
+
export declare class OsmPbfBytesToBlocksTransformStream extends TransformStream<Uint8Array<ArrayBufferLike>, OsmPbfHeaderBlock | OsmPbfBlock> {
|
|
17
|
+
generateBlobsFromChunk: (chunk: Uint8Array) => Generator<Uint8Array<ArrayBuffer>, void, unknown>;
|
|
18
|
+
header: OsmPbfHeaderBlock | null;
|
|
19
|
+
constructor(decompress?: (data: Uint8Array<ArrayBuffer>) => Promise<Uint8Array<ArrayBuffer>>);
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=pbf-to-blocks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pbf-to-blocks.d.ts","sourceRoot":"","sources":["../../src/pbf-to-blocks.ts"],"names":[],"mappings":"AAGA,OAAO,EACN,KAAK,WAAW,EAChB,KAAK,iBAAiB,EAGtB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EACN,KAAK,mBAAmB,EAGxB,MAAM,SAAS,CAAA;AAEhB,eAAO,MAAM,mBAAmB,IAAI,CAAA;AAEpC;;;GAGG;AACH,wBAAsB,UAAU,CAC/B,IAAI,EAAE,mBAAmB,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;;YAkBnC,cAAc,CAAC,WAAW,CAAC;GAE9C;AAED;;;GAGG;AACH,qBAAa,kCAAmC,SAAQ,eAAe,CACtE,UAAU,CAAC,eAAe,CAAC,EAC3B,iBAAiB,GAAG,WAAW,CAC/B;IACA,sBAAsB,2EAA8B;IACpD,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAAO;gBAEtC,UAAU,GAAE,CACX,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,KACzB,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAiB;CAiBtD"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import Pbf from "pbf";
|
|
2
|
+
import { osmPbfBlobsToBlocksGenerator } from "./blobs-to-blocks";
|
|
3
|
+
import { createOsmPbfBlobGenerator } from "./pbf-to-blobs";
|
|
4
|
+
import { readHeaderBlock, readPrimitiveBlock, } from "./proto/osmformat";
|
|
5
|
+
import { toAsyncGenerator, webDecompress, } from "./utils";
|
|
6
|
+
export const HEADER_LENGTH_BYTES = 4;
|
|
7
|
+
/**
|
|
8
|
+
* Parses OSM PBF bytes from buffers, streams, or generators into header + block iterators.
|
|
9
|
+
* Returns the decoded header and a lazy async generator of primitive blocks.
|
|
10
|
+
*/
|
|
11
|
+
export async function readOsmPbf(data) {
|
|
12
|
+
const generateBlobsFromChunk = createOsmPbfBlobGenerator();
|
|
13
|
+
const blocks = osmPbfBlobsToBlocksGenerator((async function* () {
|
|
14
|
+
for await (const chunk of toAsyncGenerator(data)) {
|
|
15
|
+
for await (const blob of generateBlobsFromChunk(chunk)) {
|
|
16
|
+
yield blob;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
})());
|
|
20
|
+
const header = (await blocks.next()).value;
|
|
21
|
+
if (header == null || !("required_features" in header)) {
|
|
22
|
+
throw Error("OSM PBF header block not found");
|
|
23
|
+
}
|
|
24
|
+
return {
|
|
25
|
+
header,
|
|
26
|
+
blocks: blocks,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Web `TransformStream` that turns raw PBF byte chunks into OSM header/data blocks.
|
|
31
|
+
* Assumes the first decoded blob carries the header and emits it before any primitive blocks.
|
|
32
|
+
*/
|
|
33
|
+
export class OsmPbfBytesToBlocksTransformStream extends TransformStream {
|
|
34
|
+
generateBlobsFromChunk = createOsmPbfBlobGenerator();
|
|
35
|
+
header = null;
|
|
36
|
+
constructor(decompress = webDecompress) {
|
|
37
|
+
super({
|
|
38
|
+
transform: async (bytesChunk, controller) => {
|
|
39
|
+
for await (const rawBlobs of this.generateBlobsFromChunk(bytesChunk)) {
|
|
40
|
+
const decompressed = await decompress(rawBlobs);
|
|
41
|
+
const pbf = new Pbf(decompressed);
|
|
42
|
+
if (this.header == null) {
|
|
43
|
+
this.header = readHeaderBlock(pbf);
|
|
44
|
+
controller.enqueue(this.header);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
controller.enqueue(readPrimitiveBlock(pbf));
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=pbf-to-blocks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pbf-to-blocks.js","sourceRoot":"","sources":["../../src/pbf-to-blocks.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAA;AACrB,OAAO,EAAE,4BAA4B,EAAE,MAAM,mBAAmB,CAAA;AAChE,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAA;AAC1D,OAAO,EAGN,eAAe,EACf,kBAAkB,GAClB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAEN,gBAAgB,EAChB,aAAa,GACb,MAAM,SAAS,CAAA;AAEhB,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAA;AAEpC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC/B,IAAsD;IAEtD,MAAM,sBAAsB,GAAG,yBAAyB,EAAE,CAAA;IAC1D,MAAM,MAAM,GAAG,4BAA4B,CAC1C,CAAC,KAAK,SAAS,CAAC;QACf,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;YAClD,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,sBAAsB,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxD,MAAM,IAAI,CAAA;YACX,CAAC;QACF,CAAC;IACF,CAAC,CAAC,EAAE,CACJ,CAAA;IACD,MAAM,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAA;IAC1C,IAAI,MAAM,IAAI,IAAI,IAAI,CAAC,CAAC,mBAAmB,IAAI,MAAM,CAAC,EAAE,CAAC;QACxD,MAAM,KAAK,CAAC,gCAAgC,CAAC,CAAA;IAC9C,CAAC;IACD,OAAO;QACN,MAAM;QACN,MAAM,EAAE,MAAqC;KAC7C,CAAA;AACF,CAAC;AAED;;;GAGG;AACH,MAAM,OAAO,kCAAmC,SAAQ,eAGvD;IACA,sBAAsB,GAAG,yBAAyB,EAAE,CAAA;IACpD,MAAM,GAA6B,IAAI,CAAA;IACvC,YACC,aAEwC,aAAa;QAErD,KAAK,CAAC;YACL,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE;gBAC3C,IAAI,KAAK,EAAE,MAAM,QAAQ,IAAI,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,EAAE,CAAC;oBACtE,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAA;oBAC/C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,CAAA;oBACjC,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC;wBACzB,IAAI,CAAC,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,CAAA;wBAClC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;oBAChC,CAAC;yBAAM,CAAC;wBACP,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAA;oBAC5C,CAAC;gBACF,CAAC;YACF,CAAC;SACD,CAAC,CAAA;IACH,CAAC;CACD"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type Pbf from "pbf";
|
|
2
|
+
export type OsmPbfBlob = {
|
|
3
|
+
raw_size?: number;
|
|
4
|
+
raw?: Uint8Array;
|
|
5
|
+
zlib_data?: Uint8Array;
|
|
6
|
+
};
|
|
7
|
+
export type OsmPbfBlobHeader = {
|
|
8
|
+
type: "OSMHeader" | "OSMData";
|
|
9
|
+
datasize: number;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Reads an `OsmPbfBlob` message from the current position in the Pbf reader.
|
|
13
|
+
*/
|
|
14
|
+
export declare function readBlob(pbf: Pbf, end?: number): OsmPbfBlob;
|
|
15
|
+
/**
|
|
16
|
+
* Writes an `OsmPbfBlob` message to the provided Pbf writer.
|
|
17
|
+
*/
|
|
18
|
+
export declare function writeBlob(obj: OsmPbfBlob, pbf: Pbf): void;
|
|
19
|
+
/**
|
|
20
|
+
* Reads an `OsmPbfBlobHeader` from the current position in the Pbf reader.
|
|
21
|
+
*/
|
|
22
|
+
export declare function readBlobHeader(pbf: Pbf, end?: number): OsmPbfBlobHeader;
|
|
23
|
+
/**
|
|
24
|
+
* Writes an `OsmPbfBlobHeader` message to the provided Pbf writer.
|
|
25
|
+
*/
|
|
26
|
+
export declare function writeBlobHeader(obj: OsmPbfBlobHeader, pbf: Pbf): void;
|
|
27
|
+
//# sourceMappingURL=fileformat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fileformat.d.ts","sourceRoot":"","sources":["../../../src/proto/fileformat.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,GAAG,MAAM,KAAK,CAAA;AAE1B,MAAM,MAAM,UAAU,GAAG;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,GAAG,CAAC,EAAE,UAAU,CAAA;IAChB,SAAS,CAAC,EAAE,UAAU,CAAA;CACtB,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC9B,IAAI,EAAE,WAAW,GAAG,SAAS,CAAA;IAC7B,QAAQ,EAAE,MAAM,CAAA;CAChB,CAAA;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,UAAU,CAQ3D;AAYD;;GAEG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,QAIlD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAMvE;AAQD;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,gBAAgB,EAAE,GAAG,EAAE,GAAG,QAG9D"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reads an `OsmPbfBlob` message from the current position in the Pbf reader.
|
|
3
|
+
*/
|
|
4
|
+
export function readBlob(pbf, end) {
|
|
5
|
+
return pbf.readFields(readBlobField, {
|
|
6
|
+
raw_size: 0,
|
|
7
|
+
}, end);
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Dispatches individual Blob fields based on their protobuf tag.
|
|
11
|
+
*/
|
|
12
|
+
function readBlobField(tag, obj, pbf) {
|
|
13
|
+
if (tag === 2)
|
|
14
|
+
obj.raw_size = pbf.readVarint(true);
|
|
15
|
+
else if (tag === 1) {
|
|
16
|
+
obj.raw = pbf.readBytes();
|
|
17
|
+
}
|
|
18
|
+
else if (tag === 3) {
|
|
19
|
+
obj.zlib_data = pbf.readBytes();
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Writes an `OsmPbfBlob` message to the provided Pbf writer.
|
|
24
|
+
*/
|
|
25
|
+
export function writeBlob(obj, pbf) {
|
|
26
|
+
if (obj.raw_size)
|
|
27
|
+
pbf.writeVarintField(2, obj.raw_size);
|
|
28
|
+
if (obj.raw != null)
|
|
29
|
+
pbf.writeBytesField(1, obj.raw);
|
|
30
|
+
if (obj.zlib_data != null)
|
|
31
|
+
pbf.writeBytesField(3, obj.zlib_data);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Reads an `OsmPbfBlobHeader` from the current position in the Pbf reader.
|
|
35
|
+
*/
|
|
36
|
+
export function readBlobHeader(pbf, end) {
|
|
37
|
+
return pbf.readFields(readBlobHeaderField, { type: "OSMData", datasize: 0 }, end);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Dispatches individual BlobHeader fields based on their protobuf tag.
|
|
41
|
+
*/
|
|
42
|
+
function readBlobHeaderField(tag, obj, pbf) {
|
|
43
|
+
if (tag === 1)
|
|
44
|
+
obj.type = pbf.readString();
|
|
45
|
+
else if (tag === 3)
|
|
46
|
+
obj.datasize = pbf.readVarint(true);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Writes an `OsmPbfBlobHeader` message to the provided Pbf writer.
|
|
50
|
+
*/
|
|
51
|
+
export function writeBlobHeader(obj, pbf) {
|
|
52
|
+
if (obj.type)
|
|
53
|
+
pbf.writeStringField(1, obj.type);
|
|
54
|
+
if (obj.datasize)
|
|
55
|
+
pbf.writeVarintField(3, obj.datasize);
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=fileformat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fileformat.js","sourceRoot":"","sources":["../../../src/proto/fileformat.ts"],"names":[],"mappings":"AAcA;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAQ,EAAE,GAAY;IAC9C,OAAO,GAAG,CAAC,UAAU,CACpB,aAAa,EACb;QACC,QAAQ,EAAE,CAAC;KACX,EACD,GAAG,CACH,CAAA;AACF,CAAC;AACD;;GAEG;AACH,SAAS,aAAa,CAAC,GAAW,EAAE,GAAe,EAAE,GAAQ;IAC5D,IAAI,GAAG,KAAK,CAAC;QAAE,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;SAC7C,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;QACpB,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,SAAS,EAAE,CAAA;IAC1B,CAAC;SAAM,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;QACtB,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC,SAAS,EAAE,CAAA;IAChC,CAAC;AACF,CAAC;AACD;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,GAAe,EAAE,GAAQ;IAClD,IAAI,GAAG,CAAC,QAAQ;QAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAA;IACvD,IAAI,GAAG,CAAC,GAAG,IAAI,IAAI;QAAE,GAAG,CAAC,eAAe,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAA;IACpD,IAAI,GAAG,CAAC,SAAS,IAAI,IAAI;QAAE,GAAG,CAAC,eAAe,CAAC,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,CAAA;AACjE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,GAAQ,EAAE,GAAY;IACpD,OAAO,GAAG,CAAC,UAAU,CACpB,mBAAmB,EACnB,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,EAAE,EAChC,GAAG,CACH,CAAA;AACF,CAAC;AACD;;GAEG;AACH,SAAS,mBAAmB,CAAC,GAAW,EAAE,GAAqB,EAAE,GAAQ;IACxE,IAAI,GAAG,KAAK,CAAC;QAAE,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,UAAU,EAA8B,CAAA;SACjE,IAAI,GAAG,KAAK,CAAC;QAAE,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;AACxD,CAAC;AACD;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,GAAqB,EAAE,GAAQ;IAC9D,IAAI,GAAG,CAAC,IAAI;QAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAA;IAC/C,IAAI,GAAG,CAAC,QAAQ;QAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAA;AACxD,CAAC"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import type Pbf from "pbf";
|
|
2
|
+
export type OsmPbfHeaderBBox = {
|
|
3
|
+
left: number;
|
|
4
|
+
right: number;
|
|
5
|
+
top: number;
|
|
6
|
+
bottom: number;
|
|
7
|
+
};
|
|
8
|
+
export type OsmPbfHeaderBlock = {
|
|
9
|
+
bbox?: OsmPbfHeaderBBox;
|
|
10
|
+
required_features: string[];
|
|
11
|
+
optional_features: string[];
|
|
12
|
+
writingprogram?: string;
|
|
13
|
+
source?: string;
|
|
14
|
+
osmosis_replication_timestamp?: number;
|
|
15
|
+
osmosis_replication_sequence_number?: number;
|
|
16
|
+
osmosis_replication_base_url?: string;
|
|
17
|
+
};
|
|
18
|
+
export interface OsmPbfBlockSettings {
|
|
19
|
+
granularity?: number;
|
|
20
|
+
lat_offset?: number;
|
|
21
|
+
lon_offset?: number;
|
|
22
|
+
date_granularity?: number;
|
|
23
|
+
}
|
|
24
|
+
export interface OsmPbfBlock extends OsmPbfBlockSettings {
|
|
25
|
+
stringtable: OsmPbfStringTable;
|
|
26
|
+
primitivegroup: OsmPbfGroup[];
|
|
27
|
+
}
|
|
28
|
+
export type OsmPbfGroup = {
|
|
29
|
+
nodes: OsmPbfNode[];
|
|
30
|
+
dense?: OsmPbfDenseNodes;
|
|
31
|
+
ways: OsmPbfWay[];
|
|
32
|
+
relations: OsmPbfRelation[];
|
|
33
|
+
};
|
|
34
|
+
export type OsmPbfStringTable = Uint8Array[];
|
|
35
|
+
export interface OsmPbfInfo {
|
|
36
|
+
version?: number;
|
|
37
|
+
timestamp?: number;
|
|
38
|
+
changeset?: number;
|
|
39
|
+
uid?: number;
|
|
40
|
+
user_sid?: number;
|
|
41
|
+
visible?: boolean;
|
|
42
|
+
}
|
|
43
|
+
export type OsmPbfDenseInfo = {
|
|
44
|
+
version: number[];
|
|
45
|
+
timestamp: number[];
|
|
46
|
+
changeset: number[];
|
|
47
|
+
uid: number[];
|
|
48
|
+
user_sid: number[];
|
|
49
|
+
visible: boolean[];
|
|
50
|
+
};
|
|
51
|
+
export interface OsmPbfPrimitive {
|
|
52
|
+
id: number;
|
|
53
|
+
keys: number[];
|
|
54
|
+
vals: number[];
|
|
55
|
+
info?: OsmPbfInfo;
|
|
56
|
+
}
|
|
57
|
+
export interface OsmPbfNode extends OsmPbfPrimitive {
|
|
58
|
+
lat: number;
|
|
59
|
+
lon: number;
|
|
60
|
+
}
|
|
61
|
+
export type OsmPbfDenseNodes = {
|
|
62
|
+
id: number[];
|
|
63
|
+
denseinfo?: OsmPbfDenseInfo;
|
|
64
|
+
lat: number[];
|
|
65
|
+
lon: number[];
|
|
66
|
+
keys_vals: number[];
|
|
67
|
+
};
|
|
68
|
+
export interface OsmPbfWay extends OsmPbfPrimitive {
|
|
69
|
+
refs: number[];
|
|
70
|
+
}
|
|
71
|
+
export interface OsmPbfRelation extends OsmPbfPrimitive {
|
|
72
|
+
roles_sid: number[];
|
|
73
|
+
memids: number[];
|
|
74
|
+
types: number[];
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Reads an `OsmPbfHeaderBlock` message from the provided Pbf reader.
|
|
78
|
+
*/
|
|
79
|
+
export declare function readHeaderBlock(pbf: Pbf, end?: number): OsmPbfHeaderBlock;
|
|
80
|
+
/**
|
|
81
|
+
* Serializes an `OsmPbfHeaderBlock` message into the Pbf writer.
|
|
82
|
+
*/
|
|
83
|
+
export declare function writeHeaderBlock(obj: OsmPbfHeaderBlock, pbf: Pbf): void;
|
|
84
|
+
/**
|
|
85
|
+
* Reads a primitive block containing string tables and primitive groups.
|
|
86
|
+
*/
|
|
87
|
+
export declare function readPrimitiveBlock(pbf: Pbf, end?: number): OsmPbfBlock;
|
|
88
|
+
/**
|
|
89
|
+
* Serializes a primitive block including its string table and primitive groups.
|
|
90
|
+
*/
|
|
91
|
+
export declare function writePrimitiveBlock(obj: OsmPbfBlock, pbf: Pbf): void;
|
|
92
|
+
//# sourceMappingURL=osmformat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"osmformat.d.ts","sourceRoot":"","sources":["../../../src/proto/osmformat.ts"],"names":[],"mappings":"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"}
|