Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

osm2geojson-lite

tibetty3kMIT1.1.2TypeScript support: included

a lightweight yet faster osm (either in xml or in json formats) to geojson convertor - 4x faster than xmldom + osmtogeojson in most situations - implemented in pure JavaScript without any 3rd party dependency

openstreetmap, overpass, osm, json, xml, node, way, relation, geojson, linestring, multilinestring, polygon, multipolygon

readme

osm2geojson-lite

NPM Version Codecov

A lightweight (not as lightweight as xml2geojson though) yet faster convertor for OSM data whatever in XML or JSON formats to GeoJSON - much faster (the more complex the data source is, the more performance advantages it posesses) than osmtogeojson in most situations - implemented in pure JavaScript without any 3rd party dependency.

History

An internal function inside query-geo-boundary → stripped out to handle OSM XML only xml2geojson-lite → this library that supports both OSM XML and OSM/Overpass JSON

Usage

As a Node.JS Library

Installation:

$ npm install osm2geojson-lite

Usage:

    import osm2geojson from 'osm2geojson-lite';
    let geojson = osm2geojson(osm, opts);

In the Browser

    <script src='your/path/to/osm2geojson-lite.js'/>
    let geojson = osm2geojson(osm, opts);

API

osm2geojson(osm, opts)

Converts OSM data (XML/JSON) to GeoJSON.

  • osm: the OSM XML data in String, or OSM/Overpass JSON as object or in String
  • opts?: optional, the options object, right now supports below properties/fields:
    • completeFeature: the default value is false. When it's set to true, the returned geojson will include all elements that meet the specified conditions in FeatureCollection format; otherwise, only the bare geometry of the first relation element will be returned.
    • renderTagged: the default value is false. When it's set to true, the returned geojson will include all elements with tags (i.e., tagged) until excludeWay changes its behavior a bit; otherwise only the unreferenced ones get returned.
    • excludeWay: the default value is true. When it's set to true, the returned FeatureCollection will exclude all referenced ways even though they are tagged; otherwise the features of those ways will be included in the resulted result as well.

Performance

  1. Workloads include the boundary XML and JSON of 4 administrive areas (zhucheng, hebei, tokyodo, usa)
  2. Call each conversion for 100 rounds to mitigate the impacts of GC and other factors
  3. For each script, run as many as times seperately and then calculate the average cost time (ACT for short)
  4. The # listed in the table below are coarse lowest values of dividing the ACT of osmtogeojson by the one of this library
    $ cd test
    $ npm run bench
  5. XML
zhucheng hebei tokyodo usa
>2.5x >4.0x >3.0x >3.0x
  1. Overpass JSON
zhucheng hebei tokyodo usa
>2.5x >11.0x >7.0x >5.0x

Correctness

You can copy the converted results to geojsonlint for the correctness validation. Up until now, osm2geojson-lite behaves pretty well with all the samples (also quite representative) in the data subfolers under test and bench directories, which also outperforms osmtogeojson.

The client side example shipped along with this package, test/index.html - due to CORS limitation, the direct post to geojsonlint is blocked, so there's a "copy to clipboard" button for you to ease the validation.

Node.JS version

ES5/ES6 features

Dependencies

  • No 3rd party dependency

License

MIT

Collaborators

changelog

Changelog:

  • 2025-05: Support way order in relataion, improve typescript typeings, added CI for vitest tests
  • 2025-03-03: fixed a few bugs around non-*Polygon features processing and convert it to a pure TypeScript project (codes published to NPM have become TSC compiled from now on).
  • 2019-2025: quite a few contributors had fixed quite a few bugs and also contributed some good ideas - thanks for their efforts!
  • Late 2018: this repository was created and the initial version was pushed to github - almost around specific usages for myself.