sql >> データベース >  >> RDS >> Mysql

2つの緯度と経度の間の距離を計算する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 ;
    



    1. PHPフォームからデータベースに複数の行を挿入する

    2. MySQLは複数の行を列として結合します

    3. phpを使用してテーブルにデータを挿入します

    4. 日付列のMySQL条件付きORDERBYASC / DESC