半径 X マイル以内の行に対する mySQL 経度と緯度のクエリ
地理空間データを含む大規模なデータベース内では、多くの場合、行を取得する必要があります。特定の場所の特定の半径内にあるもの。これは通常、球面ジオメトリを使用して球上の 2 点間の距離を計算することで実現されます。
中心点から半径 25 マイル以内の行を検索するクエリの 1 つでは、距離が 86 マイルから 86 マイルにわたる不正確な結果が返されます。目標から800マイルまで。元のクエリは次のとおりです:
<code class="sql">SELECT *,(((acos(sin(($lat*pi()/180)) * sin((`latitude`*pi()/180))+cos(($lat*pi()/180)) * cos((`latitude`*pi()/180)) * cos((($lon - `longitude`)*pi()/180))))*180/pi())*60*1.1515) AS `distance` FROM `geo_locations` HAVING `distance` < 25 ORDER BY `distance` ASC</code>
この問題に対処するには、店舗検索アプリケーションに正常に実装されたソリューションに基づいてクエリを変更しましょう:
<code class="sql">SELECT `id`, ( 6371 * acos( cos( radians( :lat ) ) * cos( radians( `lat` ) ) * cos( radians( `long` ) - radians( :long ) ) + sin(radians(:lat)) * sin(radians(`lat`)) ) ) `distance` FROM `location` HAVING `distance` < :distance ORDER BY `distance` LIMIT 25</code>
この改訂版ではquery:
この更新されたクエリを使用すると、次のことができます。指定された中心位置から指定された半径 1 マイル以内にある行を効果的に取得します。
以上が## 指定したマイル半径内の MySQL 行を正確にクエリするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。