NetworkManager Coordinates Conversion Design
The convert_db_coordinates.py script is a Python utility designed to convert geographic coordinates from one Coordinate Reference System (CRS) to another within a PostgreSQL database. This tool is specifically tailored for water network modeling applications, handling coordinate data across multiple database tables.
Purpose
The script performs coordinate system transformations for water network infrastructure data, converting from local/projected coordinate systems (like UTM zones) to the global WGS84 coordinate system (EPSG:4326). This is essential for:
- Integrating local network data with global mapping systems
- Ensuring compatibility with web-based mapping applications
- Standardizing coordinate data across different regions and projects
Target Database Tables
The script processes coordinate data in three main tables:
LinkGeoms - Contains JSON arrays of coordinate pairs representing link geometries
- Converts coordinate pairs in the
CoordsJSON field - Calculates and updates centroid coordinates (
XCoordCenter,YCoordCenter)
- Converts coordinate pairs in the
LinkVertices - Contains individual vertex coordinates for network links
- Converts
XCoordandYCoordcolumns
- Converts
Nodes - Contains node/intersection coordinates
- Converts
XCoordandYCoordcolumns
- Converts
Configuration
Database Connection
DB_HOST = "localhost"
DB_PORT = 5432
DB_NAME = "iitd_8_11_2025" # Configurable database name
DB_USER = "postgres"
DB_PASSWORD = "xxxxxxxxxx"
Coordinate Systems
- Input CRS: EPSG:32643 (UTM Zone 43N) - Configurable
- Output CRS: EPSG:4326 (WGS84) - Standard global coordinate system
Geographic Bounds
The script includes bounds validation to ensure converted coordinates fall within expected geographic ranges:
- Top Left: (49.501385, -123.618216) - Latitude, Longitude
- Bottom Right: (48.958044, -121.157745) - Latitude, Longitude
Key Features
1. Batch Processing
- Processes records in configurable batches (default: 1000 records)
- Reduces memory usage and improves performance for large datasets
- Provides progress feedback during processing
2. Coordinate Validation
- Validates output coordinates against expected geographic bounds
- Interactive prompts for handling out-of-bounds coordinates
- Option to skip validation for known coordinate ranges
3. Error Handling
- Comprehensive error handling for coordinate transformation failures
- Database transaction management with rollback capabilities
- Graceful handling of malformed coordinate data
4. Centroid Calculation
- Automatically calculates centroids for link geometries
- Uses numpy for efficient mathematical operations
- Handles edge cases with empty or invalid coordinate arrays
Core Functions
convert_coordinate_pair(x, y, transformer, output_bounds)
- Converts individual coordinate pairs using pyproj Transformer
- Validates output coordinates against bounds
- Returns transformed coordinates or error indicators
calculate_centroid(coords)
- Calculates geometric centroid of coordinate arrays
- Uses numpy for efficient computation
- Handles various coordinate array formats
convert_link_geoms(cursor, transformer, output_bounds)
- Processes LinkGeoms table with JSON coordinate arrays
- Converts coordinate pairs and calculates centroids
- Updates both coordinate arrays and centroid fields
convert_link_vertices(cursor, transformer, output_bounds)
- Processes LinkVertices table
- Converts individual vertex coordinates
- Updates XCoord and YCoord columns
convert_nodes(cursor, transformer, output_bounds)
- Processes Nodes table
- Converts node coordinates
- Updates XCoord and YCoord columns
Dependencies
- psycopg2: PostgreSQL database connectivity
- pyproj: Coordinate system transformations
- numpy: Mathematical operations for centroid calculations
- json: JSON data parsing and serialization
Usage
Configure the script:
- Set database connection parameters
- Configure input and output coordinate systems
- Define geographic bounds for validation
Run the script:
python convert_db_coordinates.pyMonitor progress:
- Script provides real-time feedback on processing status
- Batch commit confirmations
- Error reporting for problematic records
Safety Features
- Transaction Management: All changes are wrapped in database transactions
- Rollback Capability: Automatic rollback on errors or user cancellation
- Validation Checks: Coordinate bounds validation with user interaction
- Error Recovery: Graceful handling of database connection issues
Output
The script provides detailed console output including:
- Processing progress for each table
- Batch commit confirmations
- Error messages for problematic records
- Final summary of updated record counts
- Database connection status
Applications
This script is particularly useful for:
- Water utility network modeling
- Infrastructure asset management systems
- Geographic Information System (GIS) data integration
- Web-based mapping applications
- Cross-regional data standardization
Notes
- The script is designed for PostgreSQL databases with specific table schemas
- Coordinate validation can be disabled for known coordinate ranges
- Batch processing can be adjusted based on available memory and performance requirements
- The script maintains data integrity through transaction management