API Reference¶
Complete API documentation for the Nautical Graph Toolkit.
Under Development
The following classes are available but not yet fully tested and may change: GraphWeightOptimizer, FineTuning (weight optimization), RTZ (route export).
Core Modules¶
Graph Classes¶
The main classes for building and routing maritime networks.
from nautical_graph_toolkit.core.graph import (
BaseGraph, FineGraph, H3Graph,
GraphConfigManager, GraphUtils,
)
Classes:
BaseGraph— Coarse 0.3 NM navigation grid with multi-backend supportFineGraph(BaseGraph)— Progressive refinement (0.02–0.3 NM)H3Graph(BaseGraph)— Hexagonal hierarchical grids (H3 resolution 6–12)GraphConfigManager— Programmaticgraph_config.ymlreading/writing with comment preservationGraphUtils— Static utilities: haversine, NM↔degree conversion, graph validation, directed conversion
Directed Graph Conversion (v0.1.5):
GraphUtils provides five backend-specific conversion methods:
convert_to_directed_gdf()— In-memory GeoDataFrame conversionconvert_to_directed_sql()— SpatiaLite SQL-based conversionconvert_to_directed_gpkg()— GeoPackage dispatcherconvert_to_directed_postgis()— Database-side PostGIS conversionconvert_to_directed_nx()— NetworkX DiGraph conversion
All methods produce deterministic IDs: forward edges 1→N, reverse edges N+1→2N.
S-57 Conversion Classes¶
High-performance S-57 ENC conversion engines.
from nautical_graph_toolkit.core.s57_data import (
S57Base, S57Advanced, S57Updater,
ENCDataFactory,
PostGISManager, GPKGManager, SpatiaLiteManager,
)
Conversion Classes:
S57Base— Bulk conversion (100+ ENCs in minutes)S57Advanced— Feature-level conversion with attributionS57Updater— Incremental PostGIS updates
Data Factory:
ENCDataFactory— Backend-agnostic data access layer; automatic backend detection
Backend Managers:
PostGISManager— PostgreSQL/PostGIS backend for 1000+ ENC datasetsGPKGManager— GeoPackage backend for portable deploymentsSpatiaLiteManager— Lightweight SQLite backend for <500 ENCs
Weight System¶
Three-tier modular weight architecture introduced in v0.1.5.
from nautical_graph_toolkit.core.weight_calculator import WeightCalculator
from nautical_graph_toolkit.core.weights import BaseWeights, Weights, WeightsOpen
-
WeightCalculator— Stateless calculation engine; single source of truth for all weight logic- Three-tier methods:
calculate_blocking_factor(),calculate_penalty_factor(),calculate_bonus_factor() encode_depth_bands()— 5-band UKC penalty system (Grounding → Restricted → Shallow → Safe → Deep)encode_ver_clearance_meters()— Vertical clearance encoding for bridges/cables/pipelinesapply_static_weights_vectorized()— Fully vectorized spatial join pipeline (shapely 2.0 + pandas groupby)calculate_directional_factor_from_bands()— Configurable angular difference bandscalculate_dynamic_safety_margin()— Environmental condition adjustments (weather, visibility, night)- Smooth mode (
smooth_mode=True): Continuous exp/log weight functions for GNN/PyTorch pipelines
- Three-tier methods:
-
BaseWeights(ABC) — Shared infrastructure: S57 classification, config loading, column categorization, buffer zone configuration, vessel parameter management, edge enrichment -
Weights(BaseWeights)— Production weight managerapply_static_weights_gdf()— Vectorized static weight computation (GDF backend)apply_static_weights_sql()— SpatiaLite SQL-based processingapply_static_weights_postgis()— PostGIS server-side processingcalculate_dynamic_weights_gdf(),calculate_dynamic_weights_sql(),calculate_dynamic_weights_postgis()— Dynamic weight backends- Three-tier aggregation: blocking (MAX), penalty (PRODUCT/MAX), bonus (MAX)
-
WeightsOpen(BaseWeights)— ML-optimized weight manager with per-layer tracking- Same backend methods as
Weightsbut preserves individual layer contributions - Flat columns:
wt_{layer_name}(weight value) andwt_{layer_name}_n(feature count) per S-57 layer - Designed for GNN/PyTorch feature extraction pipelines
- Same backend methods as
Weight Optimization (under development)¶
ML pipeline utilities for weight optimization and training data management.
GraphWeightOptimizer— Stateless ML utilities: validate againstWeights, export for PyTorch, import learned weights (under development)FineTuning— Stateful database-side weight refinement withPostgisTableManager(under development)
Route Optimization¶
Pathfinding and route optimization with multiple A* variants.
from nautical_graph_toolkit.core.pathfinding_lite import (
Astar, AstarImproved, AstarMaritime, AstarMaritimeSmooth, Route,
)
Astar— Base A* with Euclidean distance heuristic andmin_cost_factorfor scaled admissibility when bonus weights < 1.0AstarImproved(Astar)— Pilot quantity heuristic favoring straighter pathsAstarMaritime(AstarImproved)— Two-pass corridor routing: A* scout (Pass 1) identifies rough course, Dijkstra (Pass 2) finds optimal route within a spatial corridor. Optional Rustworkx backend for Pass 1.compute_route_maritime()— Two-pass orchestration withget_maritime_metrics()export_debug_gpkg()— Multi-layer GeoPackage for QGIS inspection
AstarMaritimeSmooth(AstarMaritime)— Three-pass maritime routing: inherits Passes 1–2, adds string-pulling post-processing (Pass 3)_string_pull()— Greedy line-of-sight shortcutting replacing zig-zag segmentscompute_route_maritime_smooth()— Three-pass orchestration with shortcut metadata
Route— Route management and exportbase_route()— Dispatcher resolvingAstarMaritimeSmooth→AstarMaritime→AstarImproved→Astardetailed_route()— Full route with edge statisticsforced_route()— Multi-waypoint routing with fillet smoothing pipelineapply_fillet_smoothing()— Bearing-merge simplification + zone-based circular arc fillets (½/4 NM for pilot/coastal/open-water)save_route_to_file()/save_detailed_route_to_file()— Export to GeoPackage, GeoJSON, or CSV
Utility Modules¶
Database Utilities¶
Database connections, queries, and health monitoring across backends.
from nautical_graph_toolkit.utils.db_utils import (
DatabaseConnector, PostGISConnector, FileDBConnector,
)
DatabaseConnector(ABC) — Base class for all database backendsPostGISConnector(DatabaseConnector)— PostgreSQL/PostGIS with health monitoringcheck_active_queries()— Inspect running queriescheck_table_locks()— Detect table lockscheck_table_bloat()— Analyze table bloatterminate_backend()/terminate_all_backends()— Backend termination (with dry-run)check_database_health()— Combined diagnostic suite
FileDBConnector(DatabaseConnector)— GeoPackage/SpatiaLite file-based backend
Geometry Utilities¶
Geodesic buffer and bearing calculations extracted in v0.1.5.
Buffer— Nautical mile to degree conversion with latitude correctionapply_buffer_fine_gdf()— UTM-reprojected geodesically-accurate bufferapply_buffer_fast_gdf()— Per-feature lat-corrected degree buffer with post-filterresolve_method()— Auto-selects 'fine' (Point/Area) vs 'fast' (Line-only) based on geometry types
Bearing— Forward azimuth and angular difference calculationsbearing_scalar()/bearing_gdf()— Scalar and vectorized bearingangular_difference_scalar()/angular_difference_gdf()— Scalar and vectorized angular difference- SQL fragments for SpatiaLite and PostGIS bearing calculations
Slicer— Geometry subdivision and clippingGrid— Grid geometry creation
Route Export (under development)¶
Maritime route export in RTZ (Route Exchange Format).
RTZ— RTZ 1.2 XML route export (under development)from_linestring()/from_geojson()— Load waypointsto_xml()/save()— Generate and write RTZ XML
S-57 Utilities¶
S-57 object class lookups and attribute handling.
S57Utils— Attribute lookup, object class definitions, expected input specificationsNoaaDatabase— Live NOAA ENC catalog integration with version tracking
Port Utilities¶
World Port Index integration and port queries.
PortData— 15,000+ ports from NGA World Port Index with custom port support
PostGIS Bulk Operations¶
Optimized bulk weight updates for large PostGIS graphs.
PostgisTableManager— TEMP table lifecycle managercreate()— TEMP table creation with session tuningupsert_from_select()— Bulk insert with conflict resolutionbulk_update_from()— Single UPDATE from temp tablectas_swap()— CREATE TABLE AS SELECT for large updates- Reduces dead tuples by ~95%, prevents autovacuum lock contention
Quick Reference¶
Common Imports¶
# Core classes
from nautical_graph_toolkit.core.graph import BaseGraph, FineGraph, H3Graph, GraphConfigManager, GraphUtils
from nautical_graph_toolkit.core.s57_data import S57Base, S57Advanced, S57Updater, PostGISManager, GPKGManager
from nautical_graph_toolkit.core.weight_calculator import WeightCalculator
from nautical_graph_toolkit.core.weights import Weights, WeightsOpen
from nautical_graph_toolkit.core.pathfinding_lite import Astar, AstarMaritime, AstarMaritimeSmooth, Route
# Utilities
from nautical_graph_toolkit.utils.geometry_utils import Buffer, Bearing
from nautical_graph_toolkit.utils.db_utils import PostGISConnector, FileDBConnector
from nautical_graph_toolkit.utils.postgis_table_manager import PostgisTableManager
from nautical_graph_toolkit.utils.port_utils import PortData
from nautical_graph_toolkit.utils.s57_utils import S57Utils, NoaaDatabase
Typical Workflow¶
# 1. Convert S-57 ENC data
converter = S57Base(
input_path="/path/to/encs",
output_dest="maritime.gpkg",
output_format="gpkg"
)
converter.convert_by_enc()
# 2. Build routing graph
graph = FineGraph(
db_path="maritime.gpkg",
region="us_west_coast"
)
graph.build()
# 3. Apply three-tier weights
weights = Weights(
config_path="config/graph_config.yml",
db_path="maritime.gpkg"
)
weights.apply_static_weights_gdf(edges_gdf, vessel_params)
weights.apply_directional_weights(edges_gdf)
weights.calculate_dynamic_weights_gdf(edges_gdf, vessel_params, environmental_conditions)
# 4. Find optimal route
from nautical_graph_toolkit.core.pathfinding_lite import AstarMaritime, Route
pathfinder = AstarMaritime(graph, corridor_buffer_nm=5.0)
route_geom = pathfinder.compute_route_maritime(start_point, end_point)
# 5. Export result
route = Route(graph, data_manager)
route.save_route_to_file(route_geom, "route", output_path="route.gpkg", format="gpkg")
Class Hierarchy¶
ABC
├── BaseWeights
│ ├── Weights # Production weight manager
│ └── WeightsOpen # ML-optimized per-layer tracking
Astar
└── AstarImproved # Pilot quantity heuristic
└── AstarMaritime # Two-pass corridor routing
└── AstarMaritimeSmooth # Three-pass + string pulling
DatabaseConnector
├── PostGISConnector # PostgreSQL/PostGIS + health monitoring
└── FileDBConnector # GeoPackage / SpatiaLite
BaseGraph
├── FineGraph # Progressive refinement
└── H3Graph # Hexagonal hierarchical
Backend-Specific APIs¶
PostGIS Backend¶
For production deployments with 1000+ ENCs.
Connection setup:
from nautical_graph_toolkit.core.s57_data import PostGISManager
mgr = PostGISManager(
host="localhost",
user="maritime",
password="secure_pass",
dbname="enc_db"
)
GeoPackage Backend¶
For portable single-file deployments.
File-based setup:
from nautical_graph_toolkit.core.graph import FineGraph
graph = FineGraph(db_path="maritime.gpkg", fine_spacing_nm=0.1)
SpatiaLite Backend¶
For lightweight deployments <500 ENCs.
Connection setup:
from nautical_graph_toolkit.core.s57_data import SpatiaLiteManager
mgr = SpatiaLiteManager(db_path="maritime.db")
Related Documentation¶
- Setup Guide - Installation and configuration
- Jupyter Notebooks - Interactive examples
- PostGIS Workflow - Production setup
- GeoPackage Workflow - Portable setup
- Weights System Reference - Three-tier weight system details
- Troubleshooting - Solutions to common issues
Tips¶
- Docstrings: Use
help(ClassName)in Python REPL for quick access - Type hints: All functions include type annotations for IDE autocomplete
- Examples: See Jupyter notebooks for real-world usage patterns
- Source code: Click "view source" on any class/function to see implementation
API last updated: 2026-05-19
Version: 0.1.5