https://github.com/aspectumapp/osm2geojson
Convert OSM and Overpass XML/JSON to GeoJSON
https://github.com/aspectumapp/osm2geojson
geojson openstreetmap osm osm2geojson overpass-json overpass-xml
Last synced: 6 months ago
JSON representation
Convert OSM and Overpass XML/JSON to GeoJSON
- Host: GitHub
- URL: https://github.com/aspectumapp/osm2geojson
- Owner: aspectumapp
- License: mit
- Created: 2019-05-06T16:33:11.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2025-03-24T17:29:06.000Z (8 months ago)
- Last Synced: 2025-05-14T16:54:11.801Z (6 months ago)
- Topics: geojson, openstreetmap, osm, osm2geojson, overpass-json, overpass-xml
- Language: Python
- Homepage:
- Size: 210 KB
- Stars: 105
- Watchers: 3
- Forks: 18
- Open Issues: 12
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- Awesome-Geospatial - osm2geojson - Parse OpenStreetMap (OSM) XML and Overpass JSON/XML. (Python)
README
# osm2geojson

Parse OSM and Overpass JSON with python.
**This library is under development!**
### Usage
Install this package with pip:
```sh
$ pip install osm2geojson
```
If you want to convert OSM xml or Overpass json/xml to Geojson you can import this lib and use one of 4 methods:
- `json2shapes(dict json_from_overpass)` - to convert Overpass json to \*Shape-objects
- `xml2shapes(str xml_from_osm)` - to convert OSM xml or Overpass xml to \*Shape-objects
- `json2geojson(dict json_from_overpass)` - to convert Overpass json to Geojson
- `xml2geojson(str xml_from_osm)` - to convert OSM xml or Overpass xml to Geojson
Additional parameters for all functions:
- `filter_used_refs` - (default: `True`) defines geometry filtration strategy (will return all geometry if set as `False`)
- `log_level` - (default: `'ERROR'`) controls logging level (will print all logs if set as `'INFO'`). More details [here](https://docs.python.org/3/library/logging.html#logging-levels)
- `area_keys` - (default: `None`) defines which keys and values of an area should be saved from the list of OSM tags, see `areaKeys.json` for the defaults
- `polygon_features` - (default: `None`) defines a whitelist/blacklist of features to be included in resulting polygons, see `polygon-features.json` for the defaults
- `raise_on_failure` - (default: `False`) controls whether to throw an exception when geometry generation fails
Other handy methods:
- `overpass_call(str query)` - runs query to overpass-api.de server (retries 5 times in case of error).
- `shape_to_feature(Shape shape, dict properties)` - Converts Shape-object to GeoJSON with passed properties.
**\*Shape-object - for convenience created simple dict to save Shapely object (geometry) and OSM-properties. Structure of this object:**
```py
shape_obj = {
'shape': Point | LineString | Polygon ...,
'properties': {
'type': 'relation' | 'node' ...,
'tags': { ... },
...
}
}
```
After installing via `pip`, the module may also be used as a `argparse`-based command-line script.
Either use the script name directly or call Python with the `-m` option and the package name:
```sh
osm2geojson --help
```
```sh
python3 -m osm2geojson --help
```
### Examples
Convert OSM-xml to Geojson:
```py
import codecs
import osm2geojson
with codecs.open('file.osm', 'r', encoding='utf-8') as data:
xml = data.read()
geojson = osm2geojson.xml2geojson(xml, filter_used_refs=False, log_level='INFO')
# >> { "type": "FeatureCollection", "features": [ ... ] }
```
Convert OSM-json to Shape-objects:
```py
import codecs
import osm2geojson
with codecs.open('file.json', 'r', encoding='utf-8') as data:
json = data.read()
shapes_with_props = osm2geojson.json2shapes(json)
# >> [ { "shape": , "properties": {...} }, ... ]
```
### Development
Clone project with submodules
```sh
$ git clone --recurse-submodules https://github.com/aspectumapp/osm2geojson.git
```
Setup package
```sh
$ python setup.py develop
```
Run tests
```sh
$ python -m unittest tests
```
Run single test
```sh
$ python tests/main.py TestOsm2GeoJsonMethods.test_barrier_wall
```
Update osm-polygon-features to last version (if you want last version)
```sh
$ ./update-osm-polygon-features.sh
```
### ToDo
* Rewrite _convert_shapes_to_multipolygon (and other multipolygon methods) to support complex situations with enclaves
* Add tests and examples for cli tool
* Add actions related to cli tool (more info https://github.com/aspectumapp/osm2geojson/pull/32#issuecomment-1073386381)