📍 Ektaon

High-performance CLI tool to calculate geographic distances between points in CSV files using the Haversine formula.

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