我在php工作.
我想找出与地理纬度和经度相距给定距离的地方.
我在一个名为places的mysql数据库中有一个表,其中有三列placeId,latitude和longitude.
用户提供latitude,longitude一个地方的和distance,然后通过使用下面的公式:
d = 2*asin(sqrt((sin((lat1-lat2)/ 2))^ 2 + cos(lat1)cos(lat2)(sin((lon1-lon2)/ 2))^ 2));
我可以检查这些地方是否与用户给出的距离有关.
我想知道如何编写查询和函数来实现此功能.
我在MYSQL中创建了以下函数
DELIMITER $$
DROP FUNCTION IF EXISTS `great_circle_distance`$$
CREATE DEFINER=`root`@`localhost` FUNCTION `great_circle_distance`(
lat1 DOUBLE(10,6),
lon1 DOUBLE(10,6),
lat2 DOUBLE(10,6),
lon2 DOUBLE(10,6)
) RETURNS double(10,2)
DETERMINISTIC
BEGIN
DECLARE delta_lat DOUBLE(10,6);
DECLARE delta_lon DOUBLE(10,6);
DECLARE temp1 DOUBLE(10,6);
DECLARE EARTH_RADIUS DOUBLE(10,2);
DECLARE distance DOUBLE(10,2);
SET lat1 = RADIANS(lat1);
SET lon1 = RADIANS(lon1);
SET lat2 = RADIANS(lat2);
SET lon2 = RADIANS(lon2);
SET delta_lat = lat2 - lat1;
SET delta_lon = lon2 - lon1;
SET temp1 = pow(sin(delta_lat/2.0),2) + cos(lat1) * cos(lat2) * pow(sin(delta_lon/2.0),2);
SET EARTH_RADIUS = 3956.0;
SET distance = EARTH_RADIUS * 2 * atan2(sqrt(temp1),sqrt(1-temp1));
RETURN distance;
END$$
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)
用它作为
Select great_circle_distance(z.lat,z.log, 32.2342,-72.42342) AS Distance from tbl_abc AS z;
Run Code Online (Sandbox Code Playgroud)