MYSQL付近の人の設計構想


モバイルインターネットが広く発展している今日、アプリの開発は多くの企業がモバイルインターネットに入る第一選択となっている.筆者は多くのアプリを開発したが、多くのアプリにこのような機能があることに気づいた.それは近くの人を取得することであり、どのように近くの人を取得するかということだ.実は簡単です.ユーザーの座標(緯度)情報を常にデータベースに記録し、現在のユーザーの座標に基づいて、データベース内、現在の座標位置が一定範囲内のすべてのユーザーを検索します.
以下、筆者は自分のいくつかの考え方とコードを提供して皆さんの参考にします!
近くの人を得るには、まず2つの座標間の距離を計算しなければなりません.
       
DELIMITER $$
DROP FUNCTION IF EXISTS `getDistance`$$

CREATE  FUNCTION `getDistance`(lat1 double,lng1 double,lat2 double,lng2 double) RETURNS double
begin
IF(LENGTH(lat1) =0 || LENGTH(lng1) =0 || LENGTH(lat2) =0 || LENGTH(lng2) =0 || lat1 IS NULL|| lng1 IS NULL|| lat2 IS NULL|| lng2 IS NULL) THEN
      RETURN -1;
    END IF;
	return round(6378.138*2*asin(sqrt(pow(sin( (lat1*pi()/180-lat2*pi()/180)/2),2)+cos(lat1*pi()/180)*cos(lat2*pi()/180)* pow(sin( (lng1*pi()/180-lng2*pi()/180)/2),2)))*1000);
end$$

DELIMITER ;

次に、SQL文を使用してデータベースのクエリーを開始します(現在のユーザーの緯度が(106,30)であると仮定します).
      
SELECT * FROM user u WHERE  getDistance(30,106,u.lat,u.lng) < 5000
 
  
 
  
       5KM , , , getDistance, 5000 , , , 100 100 , 10 、100 1000 ? 。

        , , 1°, , 1° , , , :

SELECT * FROM user u WHERE u.lat - 30 < 1 AND u.lat - 30 > -1 AND u.lng - 106 < 1 AND u.lng - 106 > -1 AND  getDistance(30,106,u.lat,u.lng) < 5000

これで の を に れることができ、 が に しましたが、これはまだ の ではありません. で のプロジェクトと びつけて することができます.