843 B
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 |
|
true |
|
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 %}