GSoC 2026 Make Biconnected Planar and Make Maximal Planar - pgRouting/pgrouting GitHub Wiki
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.
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.
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
| Title | GitHub Handle | Name |
|---|---|---|
| 1st Mentor | @cvvergara | Vicky Vergara |
| 2nd Mentor | @robe2 | Regina Obe |
| Student Developer | @Mohit242-bit | Mohit Rawat |
Note: in reverse order: the most recent is first
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.
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.
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.
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.
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.
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.
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).
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.
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.
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.
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.
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.
Bonding period
Goal: arrive at Week 1 with pseudocode approved by mentors, test graphs designed, and a clear understanding of pgRouting architecture.
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_planaron path/tree graphs - Run standalone tests of
boost::make_maximal_planaron 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_planarrun - Standalone tests of
boost::make_maximal_planarrun - Pseudocode for both wrappers(will link in report)
- Studied maximal planar graph (revised proposal edit: mutating visitor )
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_testembedding generation - Experiment with Graphviz planar graph examples
- Research
planar_face_traversalvisitor workflow - Study pgRouting SQL -> C wrapper -> C++ driver -> Boost pipeline
- Revise implementation approach after architecture study
Report:
- Studied
boyer_myrvold_planarity_testembedding generation - Studied Graphviz planar examples
-
planar_face_traversalworkflow studied - pgRouting execution pipeline studied
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 all the Pull Requests made in GSoC-pgRouting repository
| Pull Request | Description | Date | Status |
|---|---|---|---|
| TBD |
pgr_makeBiconnectedPlanar - Phase 1 implementation |
TBD | TBD |
| TBD |
pgr_makeMaximalPlanar - Phase 2 implementation |
TBD | TBD |
TBD
TBD
- Links:
(i) Code Documentation:
TBD
(ii) Tags:
TBD
(iii) Pull Requests:
TBD
(iv) Wiki Pages:
TBD
- Images:
TBD
- Media:
TBD