Awesome
osm2geojson
Parse OSM and Overpass JSON with python. This library is under development!
Usage
Install this package with pip:
$ 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-objectsxml2shapes(str xml_from_osm)
- to convert OSM xml or Overpass xml to *Shape-objectsjson2geojson(dict json_from_overpass)
- to convert Overpass json to Geojsonxml2geojson(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 asFalse
)log_level
- (default:'ERROR'
) controls logging level (will print all logs if set as'INFO'
). More details herearea_keys
- (default:None
) defines which keys and values of an area should be saved from the list of OSM tags, seeareaKeys.json
for the defaultspolygon_features
- (default:None
) defines a whitelist/blacklist of features to be included in resulting polygons, seepolygon-features.json
for the defaultsraise_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:
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:
osm2geojson --help
python3 -m osm2geojson --help
Examples
Convert OSM-xml to Geojson:
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:
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": <Shapely-object>, "properties": {...} }, ... ]
Development
Clone project with submodules
$ git clone --recurse-submodules https://github.com/aspectumapp/osm2geojson.git
Setup package
$ python setup.py develop
Run tests
$ python -m unittest tests
Run single test
$ python tests/main.py TestOsm2GeoJsonMethods.test_barrier_wall
Update osm-polygon-features to last version (if you want last version)
$ ./update-osm-polygon-features.sh
ToDo
- Add tests and examples for cli tool
- Add actions related to cli tool (more info https://github.com/aspectumapp/osm2geojson/pull/32#issuecomment-1073386381)