Batch Processing
Efficiently process massive CSV files with thousands of A → B coordinates in seconds.
Global Formats
Supports Decimal Degrees (DD), Degrees-Minutes-Seconds (DMS), and Decimal Minutes (DDM).
Strict Validation
Choose between Permissive mode for bulk processing or Strict mode for data integrity.
Technical Specifications
Input Requirements
The CSV must include headers: name_a, lat_a, lon_a, name_b, lat_b, lon_b.
Coordinate Systems
- DD:
48.858056(Decimal) - DMS:
48°51'29.6"N(Secs) - DDM:
48°51.4'N(Dec. Mins)
Output Data
Ektaon enriches your data with:
- Distances in km and miles
- WGS84 Normalized coordinates
- DMS conversion for all points
- Nearly-identical flags (11cm tolerance)
CLI Usage
Example Command
# Standard run
ektaon --input points.csv --output results.csv --input-format=ddm
# Strict mode (stops on first invalid line)
ektaon -i input.csv -o output.csv -f dms --strict
Build from source
Quick Start
# 1. Clone & Enter
git clone https://github.com/ethal/ektaon.git
cd ektaon
# 2. Build optimized binary
cargo build --release
# 3. Use it from anywhere
./target/release/ektaon --input dd_edge_case.csv --output out.csv
Full Test Suite Results
Below is the complete output generated by Ektaon for our edge-case test suite. Scroll horizontally to see all computed columns.
| id | name_a | lat_a_dd | lon_a_dd | lat_a_dms | lon_a_dms | name_b | lat_b_dd | lon_b_dd | lat_b_dms | lon_b_dms | dist_km | dist_mi | n_lat | n_lon | n_both |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Paris | 48.8580 | 2.2945 | 48°51'29"N | 2°17'40"E | Lyon | 45.7640 | 4.8356 | 45°45'50"N | 4°50'8"E | 393.73 | 244.65 | false | false | false |
| 2 | Eiffel | 48.8580 | 2.2945 | 48°51'29"N | 2°17'40"E | Copy | 48.8580 | 2.2945 | 48°51'29"N | 2°17'40"E | 0.00 | 0.00 | true | true | true |
| 3 | Point A | 48.8580 | 2.2945 | 48°51'29"N | 2°17'40"E | Micro | 48.8580 | 2.2945 | 48°51'29"N | 2°17'40"E | 0.00 | 0.00 | true | true | true |
| 4 | Eq_Start | 0.0000 | 0.0000 | 0°0'0"N | 0°0'0"E | Eq_End | 0.0000 | 1.0000 | 0°0'0"N | 1°0'0"E | 111.19 | 69.09 | true | false | false |
| 5 | N_Pole | 90.0000 | 0.0000 | 90°0'0"N | 0°0'0"E | S_Pole | -90.0000 | 0.0000 | 90°0'0"S | 0°0'0"E | 20015.09 | 12436.8 | false | true | false |
| 6 | Greenwich | 0.0000 | 0.0000 | 0°0'0"N | 0°0'0"E | Antipode | 0.0000 | 180.0000 | 0°0'0"N | 180°0'0"E | 20015.09 | 12436.8 | true | false | false |
| 7 | East_Side | 10.0000 | 179.0000 | 10°0'0"N | 179°0'0"E | West_Side | 10.0000 | -179.0000 | 10°0'0"N | 179°0'0"W | 219.01 | 136.09 | true | false | false |