gergelypolonkai-web-jekyll/_posts/2013-03-05-haversine-in-mysql.markdown

843 B

layout title date permalink tags published author
post Haversine in MySQL 2013-03-05 12:49:28+00:00 /blog/2013/3/5/haversine-in-mysql
mysql
development
true
name email
Gergely Polonkai gergely@polonkai.eu

Just insert it in your database, feed them two Google coordinates, and you get the distance in kilometres. If you happen to need it in miles, change the constant 12756.200 in the RETURN row to 7922.6 instead.

{% highlight sql %} DELIMITER

CREATE FUNCTION haversine (lng1 FLOAT, lat1 FLOAT, lng2 FLOAT, lat2 FLOAT) RETURNS float NO SQL DETERMINISTIC BEGIN SET @a = ABS(POWER(SIN(RADIANS(lat1 - lat2)) / 2, 2) + COS(RADIANS(lat1)) * COS(RADIANS(lat2)) * POWER(SIN(RADIANS(lng1 - lng2)) / 2, 2)); RETURN 12756.200 * ATAN2(SQRT(@a), SQRT(1 - @a)); END$$ {% endhighlight %}