緯度と経度を使用した位置情報検索のための MySQL クエリの最適化
MySQL では、地理的近接性に基づいてデータを取得するのが一般的なタスクです。経度と緯度の値を操作する場合、予期しない結果を避けるために効率的なクエリを使用することが重要です。
中心の緯度と経度から半径 25 マイル以内の行を検索しようとする次のクエリを考えてみましょう。
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` このクエリは通常は機能しますが、一部の行については不正確な結果が生成され、指定された行からはるかに離れた結果が表示される可能性があります。 radius.
精度を向上させるには、次の最適化されたクエリを検討してください:
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` このクエリでは、:lat パラメータと :long パラメータは中心点の緯度と経度を表し、: distance は半径をマイル単位で表します。
2 つのクエリの主な違いラジアンをマイルに変換するための変換係数として 6371 を使用することです。この係数は、元のクエリで使用されている 3959 よりも正確です。さらに、最適化されたクエリでは、緯度と経度に基づいて距離を計算するためのより厳密な式が使用されます。
これらの最適化を実装することで、緯度と経度の値を使用して位置情報検索を実行する際の MySQL クエリの精度を大幅に向上させることができます。結果が常に指定された半径距離内に収まるようにします。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3