https://github.com/a-b-street/osm2streets

Convert OSM to street networks with detailed geometry

https://github.com/a-b-street/osm2streets

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
Last synced: 11 months ago · JSON representation

Repository

Convert OSM to street networks with detailed geometry

Basic Info
Statistics
  • Stars: 125
  • Watchers: 10
  • Forks: 12
  • Open Issues: 32
  • Releases: 0
Created about 4 years ago · Last pushed 12 months ago
Metadata Files
Readme Changelog Contributing License

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

  1. Open StreetExplorer
  2. Select a test area from the left, then click Reimport
  3. 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. osm2streets began life here.
  • Bus Spotting: a bus network GTFS viewer, using osm2streets to 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
  • 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

osm2streets architecture

The osm2streets library itself (Rust):

Bindings for other languages:

The StreetExplorer web app (Javascript, CSS using Leaflet):

  • web: the Svelte web app
  • tests: regression tests covering complex OSM input

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

Owner

  • Name: A/B Street
  • Login: a-b-street
  • Kind: organization
  • Email: dabreegster@gmail.com
  • Location: Seattle, WA

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

All Time
  • Total Commits: 671
  • Total Committers: 10
  • Avg Commits per committer: 67.1
  • Development Distribution Score (DDS): 0.34
Past Year
  • Commits: 28
  • Committers: 4
  • Avg Commits per committer: 7.0
  • Development Distribution Score (DDS): 0.464
Top Committers
Name Email 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
enhancement (8) bug (7) good first issue (6) help wanted (4) tracking issue (4) question (1)
Pull Request Labels

Dependencies

Cargo.lock cargo
  • 104 dependencies
.github/workflows/web.yml actions
  • actions/checkout v2 composite
  • actions/setup-node v3 composite
  • jetli/wasm-pack-action v0.3.0 composite
  • peaceiris/actions-gh-pages v3 composite
street-explorer/package-lock.json npm
  • @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
street-explorer/package.json npm
  • 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