## 指定したマイル半径内の MySQL 行を正確にクエリするにはどうすればよいですか?

Patricia Arquette
リリース: 2024-10-26 12:33:03
オリジナル
598 人が閲覧しました

## How to Accurately Query for MySQL Rows Within a Specified Mile Radius?

半径 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:

  • :lat と :long は、パラメーターとして渡される中心点の緯度と経度を表します。
  • lat と long は、データベースに保存されている緯度と経度の値です。
  • : distance は、クエリに渡されるユーザー定義の距離パラメータです。
  • 6371 は、マイル単位の地球の半径です。

この更新されたクエリを使用すると、次のことができます。指定された中心位置から指定された半径 1 マイル以内にある行を効果的に取得します。

以上が## 指定したマイル半径内の MySQL 行を正確にクエリするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!