Tiny OSMPBF Parser
tiny-osmpbf is a lightweight JavaScript library designed for parsing OpenStreetMap PBF (Protocol Buffer Binary) format files. It targets environments including Node.js and web browsers, offering a pure JavaScript implementation. The current development is in a beta phase, with version 1.0.0-beta.2 being the latest as of recent releases, indicating active refinement towards a stable 1.0.0. Unlike many other PBF parsers, tiny-osmpbf prioritizes ease-of-use and a small code footprint (under 16KB minified and gzipped) over raw parsing speed. This is achieved by leveraging smaller, specialized libraries like Mapbox's `pbf` for protocol buffer parsing and `tiny-inflate` for ZLIB decompression. A key differentiating feature is its synchronous API, which simplifies integration into existing synchronous workflows but necessitates loading the entire PBF data into memory before parsing, making it less suitable for extremely large files or memory-constrained environments. The output format adheres to the widely used OSM-JSON standard, compatible with services like Overpass API.
Common errors
-
TypeError: tinyosmpbf is not a function
cause The module's default export (the parsing function) was imported incorrectly, often by attempting a named import (e.g., `import { tinyosmpbf } from '...'`) or destructuring a `require` call.fixEnsure you are using a default import for ES Modules (`import tinyosmpbf from 'tiny-osmpbf';`) or a direct `require` assignment for CommonJS (`const tinyosmpbf = require('tiny-osmpbf');`). -
Error: PBF data must be a Buffer
cause The `dataBuffer` argument provided to the `tinyosmpbf` function was not a Node.js `Buffer` or a compatible `Uint8Array` object.fixVerify that your input data is correctly read into a `Buffer` instance, for example, by using `fs.readFileSync(filePath)` in Node.js, which returns a Buffer. -
RangeError: Array buffer allocation failed
cause Processing a very large PBF file with `tiny-osmpbf`'s synchronous, in-memory parsing approach caused the Node.js process to exceed its allocated memory or available system RAM.fixReduce the size of the PBF file being processed, or switch to a streaming PBF parser if you need to handle extremely large datasets without loading them entirely into memory.
Warnings
- gotcha The library's core API is synchronous and requires loading the entire PBF file into memory before parsing. This can lead to high memory consumption and potential `OutOfMemoryError` for large datasets (e.g., entire continent or planet files).
- breaking As the package is currently in a `1.0.0-beta` state, users should anticipate that API details or behavior might undergo breaking changes before a stable `1.0.0` release. Features and interfaces are subject to modification.
- gotcha The library is primarily optimized for a small code footprint and ease-of-use rather than maximum parsing speed. For applications requiring the highest parsing throughput, alternatives built for performance might be more suitable.
Install
-
npm install tiny-osmpbf -
yarn add tiny-osmpbf -
pnpm add tiny-osmpbf
Imports
- tinyosmpbf
import { tinyosmpbf } from 'tiny-osmpbf';import tinyosmpbf from 'tiny-osmpbf';
- tinyosmpbf
const { tinyosmpbf } = require('tiny-osmpbf');const tinyosmpbf = require('tiny-osmpbf'); - tinyosmpbf
import * as tinyosmpbf from 'tiny-osmpbf';
import tinyosmpbf from 'tiny-osmpbf';
Quickstart
import * as fs from 'node:fs';
import tinyosmpbf from 'tiny-osmpbf';
// Assuming you have an osm.pbf file. Replace with your file path.
const filePath = 'path/to/your/map.osm.pbf';
try {
const dataBuffer = fs.readFileSync(filePath);
console.log(`Successfully read ${dataBuffer.length} bytes from ${filePath}`);
// Parse the PBF data synchronously
const osmData = tinyosmpbf(dataBuffer);
console.log('Parsed OSM Data (first few elements):', osmData.elements.slice(0, 2));
console.log('Total OSM elements:', osmData.elements.length);
console.log('OSM Generator:', osmData.osm3s.generator);
} catch (error) {
console.error('Error parsing PBF file:', error);
}