这里定义了一个函数来进行简化计算,实际上还是数学计算。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16DELIMITER $$
DROP FUNCTION IF EXISTS get_distance_in_km $$
CREATE FUNCTION get_distance_in_km(geo1_longitude decimal(10,6), geo1_latitude decimal(10,6), geo_db_latitude varchar(512))
returns decimal(10,2) DETERMINISTIC
BEGIN
DECLARE geo2_longitude decimal(10,6) DEFAULT 0;
DECLARE geo2_latitude decimal(10,6) DEFAULT 0;
SET geo2_longitude = SUBSTRING_INDEX(geo_db_latitude,',',1);
SET geo2_latitude = SUBSTR(geo_db_latitude,INSTR(geo_db_latitude, ',')+1);
return ((ACOS(SIN(geo1_latitude * PI() / 180) * SIN(geo2_latitude * PI() / 180) + COS(geo1_latitude * PI() / 180) * COS(geo2_latitude * PI() / 180) * COS((geo1_longitude - geo2_longitude) * PI() / 180)) * 180 / PI()) * 60 * 1.1515 * 1.609344 );
END $$
DELIMITER ;
参考网址点这里