1

この SQL クエリを使用して、GPS 座標に最も近いデータを取得しています。

SELECT geo_latitude, geo_longitude, geo_name, geo_country_code AS country, 
  (DEGREES(
    ACOS(
      SIN(RADIANS(47.470779)) * SIN(RADIANS(geo_latitude)) + 
      COS(RADIANS(47.470779)) * COS(RADIANS(geo_latitude)) * 
      COS(RADIANS(-87.890699 - geo_longitude))
    ) 
  ) * 60 * 1.1515)
  AS distance FROM `MyDatabase`.`allCountries` ORDER BY distance ASC LIMIT 20 ;

このクエリは、距離に関係なくすべてのデータを取得します。半径 10 マイル以内のデータのみを表示したいと考えています。どうすればこれを達成できますか?

4

1 に答える 1

2

私が見つけた2つの方法があります。1 つの方法は、SQL のセクションにタグ付けしたのと同じように、「where」セクションで大量の数学を使用して直接 SQL クエリを実行することですAS distance。基本的に - 概念的に - 「距離 < 10」

ただし、リクエストの速度が低下することがわかりました...さらに、データベースから円ではなく正方形を引き出すことを行いました。簡単に言えば、「西/北/東/南 10 マイル」の座標を計算し、それを入力しWHERE geo_latitude < X1 AND geo_latitude > x2 AND geo_longitude < x3 AND geo_longitude > x4て、返されるものに厳しい制限を設けます。次に、本当に正確にする必要がある場合は、表示するだけで角を切り落としますif( result.distance < 10 ){

または別の言い方をすると:

x1 = Coords + 10 miles north  
x2 = Coords + 10 miles south  
x3 = Coords + 10 miles east  
x4 = Coords + 10 miles west  

どのような方法で「北 10 マイル」を示し、それを使用して、中心点から北、南、西、東に 10 マイルの「正方形」を引き出します。geo_latitudeおよび列がインデックス化されている限りgeo_longitude、これは高速なデータベース呼び出しになるはずです。

于 2013-03-27T12:54:02.073 に答える