Data structures and algorithms project

Routify

A desktop route-planning application that finds and displays shortest, fastest, alternative, and multi-stop routes using real road data.

  • Python
  • PyQt6
  • Dijkstra & A*
  • OpenStreetMap

Project overview

Routify

01

The problem

Route planning requires more than drawing a line on a map. The application must model road data, search a graph efficiently, compare alternatives, and present the result in a usable desktop interface.

02

The solution

Routify turns OpenStreetMap data into a local graph and uses custom data structures with Dijkstra and A* to calculate routes. A PyQt6 interface displays the results on an interactive map and supports alternative and multi-stop journeys.

03

My responsibilities

  • Implemented graph, min-heap, hash-table, sorting, search, and AVL-tree components.
  • Built Dijkstra, A*, BFS, and DFS algorithms and connected them to routing services.
  • Created multi-stop optimization and alternative-route comparison logic.
  • Developed the PyQt6 desktop interface and interactive map integration.

04

Main challenges

  • Transforming raw OpenStreetMap exports into efficient local routing data.
  • Connecting custom algorithms to real road geometry and named locations.
  • Balancing shortest, fastest, alternative, and multi-stop route requirements.
  • Keeping generated map data outside Git while making setup repeatable.

05

How to run it

  1. 01

    Download the project

    Use Python 3.11 or newer, then clone the repository or download the ZIP.

    git clone https://github.com/Ahmed-hesham2306/routify.git
    cd routify
  2. 02

    Create the environment

    Create a Python virtual environment and activate it in PowerShell.

    python -m venv .venv
    .venv\Scripts\Activate.ps1
  3. 03

    Install Routify

    Install the dependencies and the project package.

    python -m pip install --upgrade pip
    pip install -r requirements.txt
    pip install -e .
  4. 04

    Prepare map data

    Export a small area from OpenStreetMap, save it as data/export.osm, and process it.

    python scripts/process_osm.py data/export.osm
  5. 05

    Launch and test

    Start the graphical interface. You can also run the automated tests.

    python -m routify --gui
    pytest