https://github.com/a-b-street/osm2streets
Convert OSM to street networks with detailed geometry
Science Score: 23.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
○CITATION.cff file
-
✓codemeta.json file
Found codemeta.json file -
○.zenodo.json file
-
○DOI references
-
○Academic publication links
-
✓Committers with academic emails
1 of 10 committers (10.0%) from academic institutions -
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (12.1%) to scientific vocabulary
Repository
Convert OSM to street networks with detailed geometry
Basic Info
- Host: GitHub
- Owner: a-b-street
- License: apache-2.0
- Language: Jupyter Notebook
- Default Branch: main
- Homepage: https://a-b-street.github.io/osm2streets
- Size: 87.6 MB
Statistics
- Stars: 125
- Watchers: 10
- Forks: 12
- Open Issues: 32
- Releases: 0
Metadata Files
README.md
osm2streets
OpenStreetMap (OSM) has many details about streets, but the schema presents
many challenges for rendering, routing, and analyzing done at the detail of
lanes, especially in the presence of dual carriageways, separated cycletracks
and footways, and complex intersections. osm2streets provides a simplified
street network schema, a library transforming OSM data into this representation,
and tools to render and work with the results.
Getting started
- Open StreetExplorer
- Select a test area from the left, then click Reimport
- Or navigate to anywhere in the world and press Import current view (change the driving side in Settings first)
Features
A schema able to represent:
- Roads leading between two intersections
- Thickened line-strings
- A list of lanes from left-to-right, with: type, direction, width
- Intersections linking roads
- Polygon areas, with each road polygon intersecting at a perpendicular angle
- Planned: turning movements and crosswalks
- Planned: bike boxes / advanced stop lines, pedestrian crossing islands, modal filters
Rendering to GeoJSON
- Individual lane and intersection polygons
- Lane markings: lines between lanes, schematic display of turn arrows and access restrictions
Transformations to simplify complex OSM situations
- Collapsing "unnecessary" intersections between 2 roads
- Merging "sausage links" and dual carriageways into a single road
- Merging "dog-leg" intersections and other short roads into one logical intersection
- "Snapping" parallel cycletracks and footways to the main road
There are other planned features:
- routing (score functions can take advantage of knowing how a cycle lane is segregated from the road)
- isochrone / walkshed calculations
- map-matching GPS trajectories to routes
- tracing the area in between roads ("walking around the block")
- robustly representing user-created edits to the street network model, even when underlying OSM data is updated
Some of these extra features may sound redundant with libraries like osmnx and existing OSM routers. osm2streets will support these features in a way that uses the lane-level detail and consolidated road representation, is compatible with user-made edits to the network, and can be deployed in a variety of environments (native, web, offline without running an external server).
Users
- StreetExplorer: a web app to interactively import OSM and explore the osm2streets output
- A/B Street: a collection of projects to design cities
friendlier to walking, cycling, and public transit.
osm2streetsbegan life here. - Bus Spotting: a bus network
GTFS viewer, using
osm2streetsto snap routes to roads - MapLibre route snapper plugin: draw line-strings snapped to the road network
- osm2streets-vector-tileserver: Dynamically generate vector tiles and view with QGIS, Mapbox, etc
- safe-cycling-map is an example Mapbox use
- lane editor to edit OSM tags and see visual results
- Planned: plugins for iD and JOSM to display streets in detail and visually edit lane tagging
Using osm2streets in your projects
You can use osm2streets today with Leaflet, Mapbox, OpenLayers, or any other web map frameworks. The osm2streets Javascript API can render to GeoJSON.
There are Python bindings, complete with an example notebook.
Since the API isn't stable yet, please get in touch first.
Java bindings are also in progress, with C++ planned.
Architecture
The osm2streets library itself (Rust):
- osm2streets with the schema, transformations, rendering, etc
- streets_reader to read
osm.xmlinput
Bindings for other languages:
- osm2streets-js: Javascript via WebAssembly
- Planned: Java, Python, R
The StreetExplorer web app (Javascript, CSS using Leaflet):
Contributing
There's many opportunities to help out:
- writing and improving transformations of street networks
- adjusting the schema to represent bike boxes, modal filters, lanes that change width, etc
- designing how to render lane detail
- integrating the library into your own OSM tool
- adding test cases for representative situations requiring simplification
Check out the issues.
Further reading
- An early article just about intersection geometry
- The followup talk at FOSSGIS (March 2022)
- The State of the Map talk: slides, video (August 2022)
Owner
- Name: A/B Street
- Login: a-b-street
- Kind: organization
- Email: dabreegster@gmail.com
- Location: Seattle, WA
- Website: abstreet.org
- Twitter: CarlinoDustin
- Repositories: 14
- Profile: https://github.com/a-b-street
Transportation planning and traffic simulation software for creating cities friendlier to walking, biking, and public transit
GitHub Events
Total
- Issues event: 1
- Watch event: 29
- Issue comment event: 6
- Push event: 6
- Pull request review event: 5
- Pull request review comment event: 4
- Pull request event: 2
- Fork event: 4
Last Year
- Issues event: 1
- Watch event: 29
- Issue comment event: 6
- Push event: 6
- Pull request review event: 5
- Pull request review comment event: 4
- Pull request event: 2
- Fork event: 4
Committers
Last synced: about 1 year ago
Top Committers
| Name | Commits | |
|---|---|---|
| Dustin Carlino | d****r@g****m | 443 |
| Ben Ritter | b****r@g****m | 164 |
| ginnyTheCat | g****t@l****t | 31 |
| lukasbeuster | 1****r | 15 |
| Matthieu Foucault | f****u@g****m | 6 |
| Hugo Ledoux | h****x@t****l | 4 |
| Mason Pike | m****e@f****m | 4 |
| James Hinshelwood | j****1@g****m | 2 |
| Jake Coppinger | j****e@j****m | 1 |
| David Futcher | d****d@f****o | 1 |
Committer Domains (Top 20 + Academic)
Issues and Pull Requests
Last synced: 12 months ago
All Time
- Total issues: 80
- Total pull requests: 71
- Average time to close issues: 5 months
- Average time to close pull requests: 4 days
- Total issue authors: 13
- Total pull request authors: 7
- Average comments per issue: 4.3
- Average comments per pull request: 2.08
- Merged pull requests: 65
- Bot issues: 0
- Bot pull requests: 0
Past Year
- Issues: 1
- Pull requests: 2
- Average time to close issues: 3 days
- Average time to close pull requests: 12 days
- Issue authors: 1
- Pull request authors: 2
- Average comments per issue: 1.0
- Average comments per pull request: 1.0
- Merged pull requests: 2
- Bot issues: 0
- Bot pull requests: 0
Top Authors
Issue Authors
- dabreegster (53)
- BudgieInWA (13)
- Kovoschiz (2)
- robhubi (2)
- tordans (2)
- dmfutcher (1)
- marce2710 (1)
- pswsm (1)
- rouelibre1 (1)
- jamiedtor (1)
- matthieu-foucault (1)
- ryancasburn-KAI (1)
- larsschwarz (1)
- gisfromscratch (1)
Pull Request Authors
- dabreegster (67)
- ginnyTheCat (9)
- BudgieInWA (8)
- matthieu-foucault (3)
- lukasbeuster (2)
- JamesHinshelwood (2)
- sqrtM (1)
Top Labels
Issue Labels
Pull Request Labels
Dependencies
- 104 dependencies
- actions/checkout v2 composite
- actions/setup-node v3 composite
- jetli/wasm-pack-action v0.3.0 composite
- peaceiris/actions-gh-pages v3 composite
- @esbuild/android-arm 0.16.12 development
- @esbuild/android-arm64 0.16.12 development
- @esbuild/android-x64 0.16.12 development
- @esbuild/darwin-arm64 0.16.12 development
- @esbuild/darwin-x64 0.16.12 development
- @esbuild/freebsd-arm64 0.16.12 development
- @esbuild/freebsd-x64 0.16.12 development
- @esbuild/linux-arm 0.16.12 development
- @esbuild/linux-arm64 0.16.12 development
- @esbuild/linux-ia32 0.16.12 development
- @esbuild/linux-loong64 0.16.12 development
- @esbuild/linux-mips64el 0.16.12 development
- @esbuild/linux-ppc64 0.16.12 development
- @esbuild/linux-riscv64 0.16.12 development
- @esbuild/linux-s390x 0.16.12 development
- @esbuild/linux-x64 0.16.12 development
- @esbuild/netbsd-x64 0.16.12 development
- @esbuild/openbsd-x64 0.16.12 development
- @esbuild/sunos-x64 0.16.12 development
- @esbuild/win32-arm64 0.16.12 development
- @esbuild/win32-ia32 0.16.12 development
- @esbuild/win32-x64 0.16.12 development
- @swc/core 1.3.24 development
- @swc/core-darwin-arm64 1.3.24 development
- @swc/core-darwin-x64 1.3.24 development
- @swc/core-linux-arm-gnueabihf 1.3.24 development
- @swc/core-linux-arm64-gnu 1.3.24 development
- @swc/core-linux-arm64-musl 1.3.24 development
- @swc/core-linux-x64-gnu 1.3.24 development
- @swc/core-linux-x64-musl 1.3.24 development
- @swc/core-win32-arm64-msvc 1.3.24 development
- @swc/core-win32-ia32-msvc 1.3.24 development
- @swc/core-win32-x64-msvc 1.3.24 development
- ansi-styles 4.3.0 development
- chalk 4.1.2 development
- color-convert 2.0.1 development
- color-name 1.1.4 development
- esbuild 0.16.12 development
- fs-extra 10.1.0 development
- fsevents 2.3.2 development
- function-bind 1.1.1 development
- graceful-fs 4.2.10 development
- has 1.0.3 development
- has-flag 4.0.0 development
- is-core-module 2.11.0 development
- jsonfile 6.1.0 development
- nanoid 3.3.4 development
- narrowing 1.5.0 development
- path-parse 1.0.7 development
- picocolors 1.0.0 development
- postcss 8.4.20 development
- resolve 1.22.1 development
- rollup 3.9.0 development
- source-map-js 1.0.2 development
- supports-color 7.2.0 development
- supports-preserve-symlinks-flag 1.0.0 development
- universalify 2.0.0 development
- vite 4.0.3 development
- vite-plugin-top-level-await 1.2.2 development
- vite-plugin-wasm-pack 0.1.11 development
- @geoman-io/leaflet-geoman-free 2.13.1
- @googlemaps/js-api-loader 1.15.1
- @turf/bbox 6.5.0
- @turf/bearing 6.5.0
- @turf/boolean-contains 6.5.0
- @turf/boolean-point-in-polygon 6.5.0
- @turf/boolean-point-on-line 6.5.0
- @turf/destination 6.5.0
- @turf/distance 6.5.0
- @turf/helpers 6.5.0
- @turf/invariant 6.5.0
- @turf/kinks 6.5.0
- @turf/line-intersect 6.5.0
- @turf/line-segment 6.5.0
- @turf/line-split 6.5.0
- @turf/meta 6.5.0
- @turf/nearest-point-on-line 6.5.0
- @turf/square 6.5.0
- @turf/truncate 6.5.0
- @types/geojson 7946.0.8
- fast-deep-equal 3.1.3
- geojson-rbush 3.2.0
- leaflet 1.9.2
- leaflet 1.9.3
- leaflet-geosearch 3.7.0
- leaflet-hash 0.2.1
- leaflet-osm 0.1.0
- lodash 4.17.21
- polygon-clipping 0.15.3
- quickselect 2.0.0
- rbush 3.0.1
- splaytree 3.1.1
- vite ^4.0.0 development
- vite-plugin-top-level-await ^1.2.2 development
- vite-plugin-wasm-pack 0.1.11 development
- @geoman-io/leaflet-geoman-free ^2.13.1
- leaflet ^1.9.3
- leaflet-geosearch ^3.7.0
- leaflet-hash ^0.2.1
- leaflet-osm ^0.1.0