Code Monkey home page Code Monkey logo

openlineplanner's Introduction

Contributors Forks Stargazers Issues MIT License


Logo

OpenLinePlanner

Fast and Easy public transport network prototyping
Check out the Demo »

Report Bug · Request Feature · Send Feedback

Table of Contents
  1. About The Project
  2. Usage
  3. Setting up Developing Environment
  4. Contributing
  5. License
  6. Contact
  7. Acknowledgments

About The Project

OpenLinePlanner Screen Shot

Its main purpose is to prototype public transport lines on the open field, analyse the station coverage and find the optimal station position.

The tool allows to save configurations fast and export all results to a printable pdf.

It is build to be extendable and easy to adjust, to be applicable in different scenarios.

(back to top)

Built With

This project was build with:

Vue Vite Rust Matomo

And deployed with:

Docker

(back to top)

Usage

OpenLinePlanner allows you to

... draw schematic transportation lines on map
... name lines and stations
... give a custom color to each line
... analyse coverage area of stations
... export map and analysis as PDF
... automatically locate new stations, based on predicted demand

Calculation Methods

By default OpenLinePlanner is configured to show the absolute amount of residences living in the coverage area of each station. Every person in the influence radius of the station (default 500m) is rated with the weight of 1. i.e. if 200 people life in the influence are the result is a score of 200

Alternatively a relative measurement can be applied (Settings). This approach takes the distance between station and the home of a potential passenger into account:

// Calculation methods:
absolute: 1;
relative: 1 / sqrt(distance);

If your scenario requires adjusted parameters please reach out! (Contact via Email) Further adjustment dialogs are planned to be implemented if requested.

(back to top)

Screenshots

OpenLinePlanner coverage area visualization OpenLinePlanner coverage area visualization OpenLinePlanner coverage area visualization OpenLinePlanner coverage area visualization OpenLinePlanner coverage area visualization

(back to top)

Setting up Developing Environment

This is a short guide to setup your own development environment of OpenLinePlanner.

  1. To start of clone the Repo:
    $ git clone https://github.com/TheNewCivilian/OpenLinePlanner.git

Backend Setup

The backend can be build running

  1. Build backend

    $ cd openlineplanner-backend
    $ cargo build --release
  2. Gather data files from OpenPopulationEstimator (inhabitants geojson) and e.g. Protomaps (pbf file of region)

  3. Add ./settings/Settings.toml e.g.

     [data]
     residence = "./data/residence.geojson"
     osm = "./data/Wien_Donaustadt.osm.pbf"
  4. Install backend binaries

    $ cargo install --path .
  5. Startup Backend (Takes some minutes on first startup)

    $ openlineplanner-backend

Frontend Setup

All environment variables are automatically loaded by VITE from the available .env files. If you need to adjust ports or endpoints check these files.

  1. Install all NPM packages
    $ yarn
  2. Start development server
    $ yarn dev

(back to top)

Contributing

Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.

If you have a suggestion that would make OpenLinePlanner better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement". If this project brings you any value or inspires you don't forget to give the project a star! Thanks again!

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

(back to top)

License

Distributed under the GNU GPL V3 License. See LICENSE.txt for more information.

(back to top)

Contact

Email: [email protected]

Project Link: https://github.com/xatellite/OpenLinePlanner

(back to top)

Contributors

TheNewCivilian, zdmx

Acknowledgments

The following pages and resources have been very helpful in the creation of the project:

This project was created as part of the interdisciplinary project of the master class Rail Technology and Management of Railway Systems @FH-St.Pölten.

(back to top)

openlineplanner's People

Contributors

thenewcivilian avatar zandemax avatar

Stargazers

Jonas Gaiswinkler avatar  avatar Vytautas Liuolia avatar Joachim Meyer avatar Henri avatar

Watchers

 avatar  avatar  avatar

openlineplanner's Issues

Setup better deployment workflows

Currently, this repo does not support a test environment, while relying on docker-compose as the main deployment tool.
Going forward, a better deployment solution would be handy.

Offer local or server side computation?

If it hypes someday, this could be a easy and reasonable business case.

Local computation -> Free
Pro -> (Server side computation)
Expert -> (Server side computation, more extractors?)
Home hosted -> Free, can be added in settings to keep it centralized?

Allow automated line integration

For a specific area, a user should be able to import all present lines.
This should be as simple and straight forward as possible.
Separate line planning levels might be needed to be added first.

Add Datamanagement Workflow

Currently the data layer needs to be prepared upfront by the user.
To let more people use the tool, a simpler option to add new data to the tool is needed.
The following steps need to be done by the user:

  1. Tell the system which area should be added
  2. Input the inhabitants (commuters)

The system needs to fetch:

  1. A .pbf containing the street network (maybe building data)
  2. A generated .geojson containing the population count in the area (currently using OpenPopulationEstimator)

Interface Spec:

Layer

  • bounding box
  • [centroid]

PUT /layer/ Add custom layer -> {bbox, [centroids]}
POST /layer/calculate Calculate layer with bounding box -> {osm_id}

GET /osm/admin_bounds/{lat}/{lon} -> [{osm_id,geojson}]
v
GET /layer/types -> [{type_name, description, [{question_name,question,datatype}]}]
v
POST /layer/calculate {area_choice,type,answers}

GET /layer/{layer_id} Get single layer
GET /layer Get all layers
GET /layer/by_type/{type} Get merged layer by type
type:

  • residents
  • workplaces
  • shopping

user clicks map -> GET admin_bounds -> user chooses area -> type_modal -> user chooses type -> question_modal -> user answers questions -> POST /layer/calculate

Create Landingpage

Set up a landing page, that encourages users to share their creation.
To do so, projects need to have a visibility setting, allowing projects to be shared (read or read/write)

Frame(1)

Cache preprocessing results on server side

On every startup, the server rebuilds all data again.
We should check if the source files have changed and keep the preprocessed data for simple restart of the server.
This way, the time to restart the server is reduced to a split second.

Improve UX and UI of Settings-Menu

The current settings menu can be quite disorientating.
To improve the user experience and giving more direction to the user, the settings menu needs a more expressive UI and UX flow.

Bind Session to Project

Create Sessions on Backend side and bind them to a project.
A project should then consist out of datasets and planning.
The ability to saving the project locally needs to be discussed.
When adding datasets, there should be an option to add datasets from other projects (public and private).

Add excel export

For users an Excel export would improve the user experience and value added by the tool.
All gathered data should be structured and exported to excel.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.