home / skills / dkyazzentwatwa / chatgpt-skills / distance-calculator

distance-calculator skill

/distance-calculator

This skill computes geographic distances, finds nearby points, and generates efficient routing data to streamline logistics and location analysis.

npx playbooks add skill dkyazzentwatwa/chatgpt-skills --skill distance-calculator

Review the files below or copy the command above to add this skill to your agents.

Files (3)
SKILL.md
4.3 KB
---
name: distance-calculator
description: Calculate distances between geographic coordinates, find nearby points, and compute travel distances. Use for logistics, delivery routing, or location analysis.
---

# Distance Calculator

Calculate geographic distances and find nearby locations using various methods.

## Features

- **Point-to-Point Distance**: Haversine, Vincenty, great circle
- **Matrix Distances**: All pairs distances
- **Nearest Neighbors**: Find closest N points
- **Radius Search**: Find all points within distance
- **Batch Processing**: Process CSV files
- **Multiple Units**: km, miles, meters, nautical miles

## Quick Start

```python
from distance_calc import DistanceCalculator

calc = DistanceCalculator()

# Simple distance
dist = calc.distance(
    (40.7128, -74.0060),  # New York
    (34.0522, -118.2437)  # Los Angeles
)
print(f"Distance: {dist:.2f} km")

# Find nearest points
nearest = calc.find_nearest(
    origin=(40.7128, -74.0060),
    points=store_locations,
    n=5
)
```

## CLI Usage

```bash
# Distance between two points
python distance_calc.py --from "40.7128,-74.0060" --to "34.0522,-118.2437"

# Find nearest from CSV
python distance_calc.py --origin "40.7128,-74.0060" --input stores.csv --nearest 5

# Points within radius
python distance_calc.py --origin "40.7128,-74.0060" --input stores.csv --radius 50

# Distance matrix
python distance_calc.py --input locations.csv --matrix --output distances.csv

# Different units
python distance_calc.py --from "40.7128,-74.0060" --to "34.0522,-118.2437" --unit miles
```

## API Reference

### DistanceCalculator Class

```python
class DistanceCalculator:
    def __init__(self, unit: str = "km", method: str = "haversine")

    # Point-to-point
    def distance(self, point1: tuple, point2: tuple) -> float
    def distance_with_details(self, point1: tuple, point2: tuple) -> dict

    # Batch operations
    def distance_matrix(self, points: list) -> list
    def distances_from_origin(self, origin: tuple, points: list) -> list

    # Search
    def find_nearest(self, origin: tuple, points: list, n: int = 1) -> list
    def find_within_radius(self, origin: tuple, points: list, radius: float) -> list

    # File operations
    def from_csv(self, filepath: str, lat_col: str, lon_col: str) -> list
    def matrix_to_csv(self, matrix: list, labels: list, output: str)
```

## Distance Methods

### Haversine (Default)
- Great circle distance assuming spherical Earth
- Fast and accurate for most purposes
- Error: ~0.5% max

### Vincenty
- More accurate, accounts for Earth's ellipsoid shape
- Slightly slower
- Error: ~0.5mm

```python
calc = DistanceCalculator(method="vincenty")
```

## Units

| Unit | Description |
|------|-------------|
| `km` | Kilometers (default) |
| `miles` | Miles |
| `m` | Meters |
| `nm` | Nautical miles |
| `ft` | Feet |

```python
calc = DistanceCalculator(unit="miles")
# Or convert after
dist_km = calc.distance(p1, p2)
dist_miles = calc.convert(dist_km, "km", "miles")
```

## Example Workflows

### Find Nearest Stores
```python
calc = DistanceCalculator(unit="miles")
stores = calc.from_csv("stores.csv", "lat", "lon")

customer = (40.7128, -74.0060)
nearest = calc.find_nearest(customer, stores, n=3)

for store in nearest:
    print(f"{store['name']}: {store['distance']:.1f} miles")
```

### Delivery Zone Check
```python
calc = DistanceCalculator(unit="km")
warehouse = (40.7128, -74.0060)
delivery_radius = 50  # km

customers = calc.from_csv("customers.csv", "lat", "lon")
in_zone = calc.find_within_radius(warehouse, customers, delivery_radius)

print(f"{len(in_zone)} customers in delivery zone")
```

### Distance Matrix for Routing
```python
calc = DistanceCalculator()
stops = [
    (40.7128, -74.0060),
    (40.7589, -73.9851),
    (40.7484, -73.9857),
    (40.7527, -73.9772)
]

matrix = calc.distance_matrix(stops)
calc.matrix_to_csv(matrix, ["HQ", "Store1", "Store2", "Store3"], "distances.csv")
```

## Output Formats

### Distance Result
```python
{
    "distance": 3935.75,
    "unit": "km",
    "from": {"lat": 40.7128, "lon": -74.0060},
    "to": {"lat": 34.0522, "lon": -118.2437},
    "method": "haversine"
}
```

### Nearest Points Result
```python
[
    {"point": (lat, lon), "distance": 5.2, "data": {...}},
    {"point": (lat, lon), "distance": 8.1, "data": {...}},
]
```

## Dependencies

- geopy>=2.4.0

Overview

This skill provides a robust distance-calculation toolkit for geographic coordinates. It computes point-to-point distances, distance matrices, nearest neighbors, and radius searches, and supports batch CSV processing and multiple distance units. Use it to power logistics, delivery routing, location analysis, and proximity-based features.

How this skill works

The core class exposes methods to compute distances using Haversine (default) or Vincenty, and returns numeric results or detailed dictionaries with metadata. It can build full distance matrices, compute distances from an origin to many points, and run nearest-neighbor or radius searches. CSV import/export helpers enable easy batch workflows and integration with routing or inventory systems.

When to use it

  • Estimating straight-line distances between two coordinates for ETAs or reporting
  • Finding the N closest facilities, stores, or assets to an origin point
  • Identifying all customers or points within a delivery radius
  • Generating a distance matrix to feed route optimization or VRP solvers
  • Batch-processing coordinate lists from CSVs for analytics or audits

Best practices

  • Choose Haversine for speed and typical accuracy; switch to Vincenty when ellipsoidal precision matters
  • Keep coordinates as (lat, lon) tuples and validate ranges before batch processing
  • Use distance matrices sparingly for large datasets; pre-filter with bounding boxes to reduce compute
  • Specify units explicitly (km, miles, m, nm, ft) and convert consistently when combining sources
  • When using CSVs, include clear latitude/longitude column names and sample rows to validate parsing

Example use cases

  • Compute driving-area approximations by finding all customers within a 50 km delivery zone
  • Produce a distance matrix for a set of stops and export CSV to feed a route optimizer
  • Find the 5 nearest stores to a customer and present distance-sorted options in an app
  • Batch-convert a customer CSV into distances-from-warehouse for SLA reporting
  • Switch to Vincenty when generating high-precision offshore or surveying distances

FAQ

Which method should I use by default?

Haversine is fast and accurate enough for most applications. Use Vincenty when you need extra ellipsoid precision for surveying or nautical use.

How do I handle large point sets without huge memory use?

Stream CSV rows, pre-filter by bounding box or coarse grid, and compute pairwise distances in chunks rather than building full in-memory matrices.