Skip to content

Instantly share code, notes, and snippets.

@slachiewicz
Forked from pavlov99/haversine.scala
Created January 14, 2020 21:34
Show Gist options
  • Save slachiewicz/ac5ae5fe3c726eb287ce288ef64bfaa5 to your computer and use it in GitHub Desktop.
Save slachiewicz/ac5ae5fe3c726eb287ce288ef64bfaa5 to your computer and use it in GitHub Desktop.
Spherical distance calcualtion based on latitude and longitude with Apache Spark
// Based on following links:
// http://andrew.hedges.name/experiments/haversine/
// http://www.movable-type.co.uk/scripts/latlong.html
df
.withColumn("a", pow(sin(toRadians($"destination_latitude" - $"origin_latitude") / 2), 2) + cos(toRadians($"origin_latitude")) * cos(toRadians($"destination_latitude")) * pow(sin(toRadians($"destination_longitude" - $"origin_longitude") / 2), 2))
.withColumn("distance", atan2(sqrt($"a"), sqrt(-$"a" + 1)) * 2 * 6371)
>>>
+--------------+-------------------+-------------+----------------+---------------+----------------+--------------------+---------------------+--------------------+------------------+
|origin_airport|destination_airport| origin_city|destination_city|origin_latitude|origin_longitude|destination_latitude|destination_longitude| a| distance|
+--------------+-------------------+-------------+----------------+---------------+----------------+--------------------+---------------------+--------------------+------------------+
| HKG| SYD| Hong Kong| Sydney| 22.308919| 113.914603| -33.946111| 151.177222| 0.3005838068886348|7393.8837884771565|
| YYZ| HKG| Toronto| Hong Kong| 43.677223| -79.630556| 22.308919| 113.914603| 0.6941733892671567|12548.533187172497|
+--------------+-------------------+-------------+----------------+---------------+----------------+--------------------+---------------------+--------------------+------------------+
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment