Converts OSM data to GeoJSON. Try the demo!
- stable
- real OSM polygon detection
- proper OSM multipolygon support
- full support for extended Overpass API geometry modes
- well tested and proven
- fast
This code is used in and maintained by the overpass turbo project.
Installation:
$ npm install -g osmtogeojson
Usage:
$ osmtogeojson file.osm > file.geojson
Supported command line options are shown with:
$ osmtogeojson --help
When working with extra large data files (≳ 100 MB) it is recommended to run the programm with a little extra memory to avoid process out of memory errors. The easiest way to do this is by running the command as node <path-to-osmtogeojson>
and setting the --max_old_space_size=…
parameter to the available memory size in MB (osmtogeojson typically needs about 4-5 times the input data size). On a Unix system, you can use the following command:
$ node --max_old_space_size=8192 `which osmtogeojson` large.osm > large.geojson
Installation:
$ npm install osmtogeojson
Usage:
var osmtogeojson = require('osmtogeojson');
osmtogeojson(osm_data);
<script src='osmtogeojson.js'></script>
osmtogeojson(osm_data);
Converts OSM data into GeoJSON.
data
: the OSM data. Either as a XML DOM or in OSM JSON.options
: optional. The following options can be used:flatProperties
: If true, the resulting GeoJSON feature's properties will be a simple key-value list instead of a structured json object (with separate tags and metadata). default: falsewayRefs
: If true, the GeoJSON will have andrefs
property when flat, or inmeta
when not flat, which is an array of all the node members of theway
. default: falseuninterestingTags
: Either a blacklist of tag keys or a callback function. Will be used to decide if a feature is interesting enough for its own GeoJSON feature.polygonFeatures
: Either a json object or callback function that is used to determine if a closed way should be treated as a Polygon or LineString. read moremapRelations
eithertrue
orfalse
. If set to true, osmtogeojson returns some additional data, apart from the GeoJSON. The data returned will now be an object containinggeojson
,featuresInRelation
andnodes
.geojson
will be the current geojson format.featuresInRelation
is an array of feature ids that are members of relations.nodes
is an array of node objects, including nodes without tags. Additionally, ifmapRelations
is passed, geometry processing of relations is ignored, and relations are omitted from thegeojson
output.
The result is a javascript object of GeoJSON data:
The GeoJSON produced by this library will include exactly one GeoJSON-feature for each of the following OSM objects (that is everything that is also visible in overpass turbo's map view):
- all unconnected or interesting tagged nodes (POIs)
- all ways (except uninteresting multipolygon outlines)
- all multipolygons (simple multipolygons with exactly one closed outer way are present via their outer way)
All data is given as a FeatureCollection. Each Feature in the collection has an id
property that is formed from the type and id of the original OSM object (e.g. node/123
) and has the member properties
containing the following data:
type
: the OSM data typeid
: the OSM idtags
: a collection of all tagsmeta
: metainformaton about the feature (e.g. version, timestamp, user, etc.)relations
: an array of relations the feature is member of. Each relation is encoded as an object literal containing the following properties:role
(membership role),rel
(the relation's id) andreltags
(contains all tags of the relation)tainted
: this flag is set when the feature's geometry is incomplete (e.g. missing nodes of a way or missing ways of a multipolygon)
If the option flatProperties
is set to true, the properties
object will not contain any nested object literals, but directly provide a concise id, meta data and the tags of the respective OSM object.