It's difficult to tell what is being asked here. This question is ambiguous, vague, incomplete, overly broad, or rhetorical and cannot be reasonably answered in its current form. For help clarifying this question so that it can be reopened, visit the help center




已关闭8年。




如果您的数据库中存储了经度和纬度,并且需要计算两个坐标之间的距离。如何使用MySQL函数计算它?

最佳答案

搜索了一会儿后,我放弃了,自己写了。我能够使其他一些代码适应以下MySQL函数。

DELIMITER $$
/*
Takes two latitudes and longitudes in degrees. You could comment out the conversion if you want to pass as radians.
Calculate the distance in miles, change the radius to the earth's radius in km to get km.
*/

DROP FUNCTION IF EXISTS GETDISTANCE$$
CREATE FUNCTION GETDISTANCE
  (deg_lat1 FLOAT, deg_lng1 FLOAT, deg_lat2 FLOAT, deg_lng2 FLOAT)
  RETURNS FLOAT
  DETERMINISTIC
BEGIN
  DECLARE distance FLOAT;
  DECLARE delta_lat FLOAT;
  DECLARE delta_lng FLOAT;
  DECLARE lat1 FLOAT;
  DECLARE lat2 FLOAT;
  DECLARE a FLOAT;

  SET distance = 0;

  /*Convert degrees to radians and get the variables I need.*/
  SET delta_lat = radians(deg_lat2 - deg_lat1);
  SET delta_lng = radians(deg_lng2 - deg_lng1);
  SET lat1 = radians(deg_lat1);
  SET lat2 = radians(deg_lat2);

  /*Formula found here: http://www.movable-type.co.uk/scripts/latlong.html*/
  SET a = sin(delta_lat/2.0) * sin(delta_lat/2.0) + sin(delta_lng/2.0) * sin(delta_lng/2.0) * cos(lat1) * cos(lat2);
  SET distance = 3956.6 * 2 * atan2(sqrt(a),  sqrt(1-a));

  RETURN distance;
END$$
DELIMITER ;

关于MySQL函数计算两个纬度和经度之间的距离,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13716313/

10-11 05:57