Haversine Distance
Great-circle (haversine) distance between two lat/lon column pairs.
Spherical-Earth approximation: a straight-line distance, not a driving distance. The backend must support trigonometric functions.
haversine_distance(lat_col, lon_col, target_lat_col, target_lon_col, radius=6371.0)
Compute the Haversine distance between two sets of latitude and longitude columns.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
lat_col
|
Column
|
Source latitudes in degrees. |
required |
lon_col
|
Column
|
Source longitudes in degrees. |
required |
target_lat_col
|
Column | Scalar
|
Target latitudes in degrees; |
required |
target_lon_col
|
Column | Scalar
|
Target longitudes in degrees. |
required |
radius
|
float
|
Earth's radius in the desired output units; defaults to 6371.0 km. |
6371.0
|
Returns:
| Type | Description |
|---|---|
Column
|
ibis.Column: Lazy expression for each source/target pair's distance, in |
Examples:
>>> from openretailscience.analysis import haversine_distance
>>> stores = ibis.memtable(
... {"store_id": [101, 102], "latitude": [51.5072, 53.4808], "longitude": [-0.1276, -2.2426]}
... )
>>> km = haversine_distance(
... lat_col=stores.latitude, lon_col=stores.longitude,
... target_lat_col=ibis.literal(52.6369), target_lon_col=ibis.literal(-1.1398),
... )
>>> stores.mutate(km_to_warehouse=km).order_by("store_id").to_pandas()
store_id latitude longitude km_to_warehouse
0 101 51.5072 -0.1276 143.404197
1 102 53.4808 -2.2426 119.314868