GSoC 2026 Make Biconnected Planar and Make Maximal Planar - pgRouting/pgrouting GitHub Wiki

Table of Contents

Proposal

Brief Description

This project completes pgRouting's planar graph pipeline by implementing two missing Boost Graph Library algorithms: pgr_makeBiconnectedPlanar and pgr_makeMaximalPlanar.

Together with the existing pgr_makeConnected, these form a complete pipeline:

pgr_makeConnected → pgr_makeBiconnectedPlanar → pgr_makeMaximalPlanar

This pipeline unlocks downstream Boost layout algorithms (chrobak_payne_straight_line_drawing, planar_canonical_ordering) that are currently inaccessible to pgRouting users.

State of the Project Before GSoC

pgRouting already provides pgr_makeConnected, pgr_isPlanar / pgr_boyerMyrvold, and pgr_bipartite. Two concrete gaps remain: no function to eliminate articulation points while preserving planarity, and no triangulation of biconnected planar graphs — leaving chrobak_payne_drawing and straight_line_drawing completely inaccessible.

Deliverables

Proposed:

  • Implementation of pgr_makeBiconnectedPlanar()
  • Implementation of pgr_makeMaximalPlanar()
  • Code with clear comments following pgRouting style guides
  • User documentation (RST format) for each new function
  • pgTap test cases for all functions
  • Weekly wiki progress reports
  • Detailed reports for midterm and final evaluations

Delivered: Link to PR or to Tag based on the final status

Detailed Proposal

Link to proposal PDF

Participants

Title GitHub Handle Name
1st Mentor @cvvergara Vicky Vergara
2nd Mentor @robe2 Regina Obe
Student Developer @Mohit242-bit Mohit Rawat

Timeline & weekly report

Note: in reverse order: the most recent is first

Second Coding Period

week 12

Week 12

Dates: (August 10 - August 16)

Proposed: Final polish - clean up all code, squash commits, format documentation, write final blog post / GSoC wiki summary, prepare final report.

Link to report mail

week 11

Week 11

Dates: (August 3 - August 9)

Proposed: Additional integration testing and performance benchmarking on OSM datasets (>1M edges). Address any remaining mentor feedback from Phase 2.

Link to report mail

week 10

Week 10

Dates: (July 27 - August 2)

Proposed: Pipeline Integration & Deliverable - fix any cross-function ID mapping issues. Deliverable: working pgr_makeMaximalPlanar with full tests and docs. Address mentor feedback from Phase 2 midterm review.

Link to report mail

week 9

Week 9

Dates: (July 20 - July 26)

Proposed: Phase 2: Documentation & Idempotency - complete RST docs and docqueries for pgr_makeMaximalPlanar. Verify idempotency (re-run returns empty, pgr_isPlanar still true). Full pipeline integration test.

Link to report mail

week 8

Week 8

Dates: (July 13 - July 19)

Proposed: Phase 2: Testing - write comprehensive pgTap tests for pgr_makeMaximalPlanar. Verify E = 3V-6 on all test graphs. Verify no parallel edges or self-loops introduced.

Link to report mail

week 7

Week 7

Dates: (July 6 - July 12)

Proposed: Phase 2: Core Logic & Edge Cases - handle all error conditions for pgr_makeMaximalPlanar. Handle already-maximal-planar case (empty return). Verify E = 3V-6.

Link to report mail

First Coding Period

week 6

Week 6

Dates: (June 29 - July 5)

Proposed: Phase 2: pgr_makeMaximalPlanar begins - implement triangulation_visitor with timestamp trick for O(1) neighbor marking. Connect to planar_face_traversal. Get basic triangulation working on C4 -> K4 (adds 2 diagonals).

Link to report mail

week 5

Week 5

Dates: (June 22 - June 28)

Proposed: Phase 1 -> Phase 2 Transition - address mentor feedback from Week 4. Create Phase 2 file scaffolding (src/planar/makeMaximalPlanar.*). Study triangulation_visitor source and end_face() phases 1-6 in detail.

Link to report mail

week 4

Week 4

Dates: (June 15 - June 21)

Proposed: Phase 1: Documentation & Delivery - complete RST documentation, write docquery examples, verify idempotency. Deliverable: working pgr_makeBiconnectedPlanar with full tests and docs.

Link to report mail

week 3

Week 3

Dates: (June 8 - June 14)

Proposed: Phase 1: Edge Cases & Output Mapping - handle already-biconnected (empty return), not-connected error, not-planar error. Write comprehensive pgTap tests: path graphs P3/P4/P5, cycle graphs, tree graphs, disconnected input.

Plan:

  • Refactor the code architecture to use a shared planar_driver and planar_process pattern.
  • Clean up the workspace by removing old, individual driver/process files.
  • Discussed and finalised the implementation of Makebiconnected algorithm and MakeMaximal planar algorithm implementation (disconnected components input case)

Report:

  • Refactored the core logic of pgr_makeBiconnectedPlanar and pgr_makeMaximalPlanar to use the shared 3-layer planar_driver and planar_process architecture.
  • Cleaned up the codebase by removing obsolete files.
  • Discussed and finalised the implementation of Makebiconnected algorithm and MakeMaximal planar algorithm implementation (disconnected components input case)

Link to report mail

week 2

Week 2

Dates: (June 1 - June 7)

Proposed: Phase 1: Core Algorithm - connect EdgeIndexMap and embedding to boost::make_biconnected_planar. Implement pgr_collect_edges_visitor. Map Boost vertex descriptors back to pgRouting IDs. Get a working end-to-end function on the 7-vertex walkthrough graph.

Plan:

  • Implement the core algorithm logic using Boost’s make_biconnected_planar and make_maximal_planar
  • Build the EdgeIndexMap and planar embedding infrastructure needed by the Boost calls
  • Implement pgr_collect_edges_visitor
  • Begin documentation for the new functionalities

Report:

  • Implemented the core algorithm logic using Boost’s make_biconnected_planar and make_maximal_planar.
  • Built the EdgeIndexMap and planar embedding infrastructure required by the Boost calls.
  • Implemented planar_visitor to extract the added edges.
  • Added standard error handling returning std::string messages.

Link to report mail

week 1

Week 1

Dates: (May 25 - May 31)

Proposed: Phase 1: pgr_makeBiconnectedPlanar begins - build and test EdgeIndexMap construction in isolation using BGL_FORALL_EDGES. Run boyer_myrvold_planarity_test with embedding storage enabled; verify embedding vector populates correctly on test graphs.

Plan:

  • Create foundational file structure for pgr_makeBiconnectedPlanar
  • Create foundational file structure for pgr_makeMaximalPlanar
  • Register new source files in src/planar/CMakeLists.txt
  • Register new SQL files in sql/planar/CMakeLists.txt
  • Add signatures of both functions to sql/sigs/pgrouting--4.1.sig
  • Open Pull Requests to initiate GSoC review

Report:

  • Create foundational file structure for pgr_makeBiconnectedPlanar
  • Create foundational file structure for pgr_makeMaximalPlanar
  • Register new source files in src/planar/CMakeLists.txt
  • Register new SQL files in sql/planar/CMakeLists.txt
  • Add signatures of both functions to sql/sigs/pgrouting--4.1.sig
  • Open Pull Requests to initiate GSoC review

Link to report mail

Community Bonding Period

Bonding period

Goal: arrive at Week 1 with pseudocode approved by mentors, test graphs designed, and a clear understanding of pgRouting architecture.

Week -1 (May 19 ~ May 24)

Proposed: Pre-Coding Preparation - run standalone tests of boost::make_biconnected_planar on path/tree graphs and boost::make_maximal_planar on simple planar graphs (C4 -> K4). Share pseudocode of C++ wrapper classes with mentors for review. Design specific test graphs for docqueries.

Plan for the week:

  • Run standalone tests of boost::make_biconnected_planar on path/tree graphs
  • Run standalone tests of boost::make_maximal_planar on simple planar graphs (C4 -> K4)
  • Write pseudocode for both C++ wrapper classes and share with mentors for review
  • Study maximal planar in detail and confirm the visitor should be non-mutating OR mutating

Report:

  • Standalone tests of boost::make_biconnected_planar run
  • Standalone tests of boost::make_maximal_planar run
  • Pseudocode for both wrappers(will link in report)
  • Studied maximal planar graph (revised proposal edit: mutating visitor )

Link to report mail

Week -2 (May 11 ~ May 18)

Proposed: Deep Codebase Reading - read make_biconnected_planar.hpp and make_maximal_planar.hpp in full Boost source. Write a private walkthrough document for each file and share with mentors for feedback.

Plan for the week:

  • Study boyer_myrvold_planarity_test embedding generation
  • Experiment with Graphviz planar graph examples
  • Research planar_face_traversal visitor workflow
  • Study pgRouting SQL -> C wrapper -> C++ driver -> Boost pipeline
  • Revise implementation approach after architecture study

Report:

  • Studied boyer_myrvold_planarity_test embedding generation
  • Studied Graphviz planar examples
  • planar_face_traversal workflow studied
  • pgRouting execution pipeline studied

Link to report mail

Week -3 (May 1 ~ May 10)

Proposed: Environment and Community - introduce myself on pgrouting-dev and soc@osgeo mailing lists. Verify pgRouting builds from source with all planar tests passing. Set up wiki progress page.

Plan for the week:

  • Introduce myself on pgrouting-dev and soc@osgeo mailing lists
  • Verify pgRouting builds from source with all planar tests passing
  • Set up wiki progress page at the pgRouting GSoC wiki

Report:

  • Bonding period meeting
  • Prepared Wiki (copied from proposal)
  • Worked on edges problem (maximal planar and biconnected planar should return edges or not in the output)

Link to report mail

Log of Pull Requests

Link to all the Pull Requests made in GSoC-pgRouting repository

Pull Request Description Date Status
TBD pgr_makeBiconnectedPlanar Skeleton files implemention TBD https://github.com/pgRouting/GSoC-pgRouting/pull/550
TBD pgr_makeMaximalPlanar - Implementation (Closed : wrong branch ) TBD https://github.com/pgRouting/GSoC-pgRouting/pull/553
TBD pgr_makeMaximalPlanar Skeleton files implemention TBD https://github.com/pgRouting/GSoC-pgRouting/pull/554
TBD pgr_makeBiconnectedPlanar - Week 2 implementation TBD https://github.com/pgRouting/GSoC-pgRouting/pull/558
TBD pgr_makeMaximalPlanar Week 2 Implementation TBD https://github.com/pgRouting/GSoC-pgRouting/pull/560
TBD pgr_makeBiconnectedPlanar - Week 3 implementation TBD https://github.com/pgRouting/GSoC-pgRouting/pull/570
TBD pgr_makeMaximalPlanar Week 3 Implementation TBD https://github.com/pgRouting/GSoC-pgRouting/pull/571

Slides

TBD

Final Report

TBD

  1. Links:

(i) Code Documentation:

TBD

(ii) Tags:

TBD

(iii) Pull Requests:

TBD

(iv) Wiki Pages:

TBD

  1. Images:

TBD

  1. Media:

TBD

References

  1. boost::make_biconnected_planar - Boost Graph Library

  2. boost::make_maximal_planar - Boost Graph Library

  3. Boyer-Myrvold Planarity Testing/Embedding - Boost Graph Library

  4. biconnected_components (Tarjan) - Boost Graph Library

  5. planar_face_traversal - Boost Graph Library

  6. planar_canonical_ordering - Boost Graph Library

  7. chrobak_payne_straight_line_drawing - Boost Graph Library

  8. pgRouting Sample Data

⚠️ **GitHub.com Fallback** ⚠️