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.
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
Installation:
$ npm install osm2geojson-lite
Usage:
const osm2geojson = require('osm2geojson-lite');
let geojson = osm2geojson(osm, opts);
<script src='your/path/to/osm2geojson-lite.js'/>
let geojson = 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 Stringopts?
: optional, the options object, right now supports below properties/fields:completeFeature/allFeatures
: the default value isfalse
. When it's set totrue
, the returned geojson will include all elements that meet the specified conditions inFeatureCollection
format; otherwise, only the bare geometry of the firstrelation
element will be returned.renderTagged
: the default value isfalse
. When it's set totrue
, the returned geojson will include all elements with tags (i.e., tagged) untilsuppressWay
changes its behavior a bit; otherwise only the unreferenced ones get returned.suppressWay/excludeWay
: the default value istrue
. When it's set totrue
, the returnedFeatureCollection
will exclude all referencedway
s even though they are tagged; otherwise the features of thoseway
s will be included in the resulted result as well.
- Workloads include the boundary XML and JSON of 4 administrive areas (zhucheng, hebei, tokyodo, usa)
- Call each conversion for 100 rounds to mitigate the impacts of GC and other factors
- For each script, run as many as times seperately and then calculate the average cost time (ACT for short)
- The # listed in the table below are coarse lowest values of dividing the ACT of
osmtogeojson
by the one of this library
$ cd bench
$ node o2gl-bench.js
$ node otg-bench.js
1. XML
-----------------------------------------------------
| zhucheng | hebei | tokyodo | usa |
+------------+------------+------------+------------+
| >2.5x | >4.0x | >3.0x | >3.0x |
-----------------------------------------------------
2. Overpass JSON
-----------------------------------------------------
| zhucheng | hebei | tokyodo | usa |
+------------+------------+------------+------------+
| >2.5x | >11.0x | >7.0x | >5.0x |
-----------------------------------------------------
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, index.html
will automatically call geojsonlint
validation service directly after each conversion, you can wait for a while to see the validation result after click the conversion button.
ES5/ES6 features
- No 3rd party dependency
Written in 2018 by tibetty xihua.duan@gmail.com