ホームページ > データベース > mysql チュートリアル > 指定された地点から 5 マイル以内のすべての建物を効率的に見つけるにはどうすればよいですか?

指定された地点から 5 マイル以内のすべての建物を効率的に見つけるにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2025-01-09 11:56:46
オリジナル
116 人が閲覧しました

How Can I Efficiently Find All Buildings Within 5 Miles of a Given Point?

空間クエリを最適化: 5 マイル以内のすべての建物を効率的に検索

この記事では、指定された座標点から指定された半径内にあるすべての建物を取得するという、一般的な空間問題について説明します。 ST_CONTAINS 関数を直接使用するのは効率的ではない可能性があるため、この記事ではより良い解決策を検討します。

データ表現の重要性

技術的な詳細に入る前に、正しいデータ表現の重要性を強調することが重要です。地理空間データを経度と緯度の別個の列として保存すると、クエリ操作が非効率になります。この目的のために、2 つの座標を 1 つのフィールドにカプセル化する geometry または geography データ型を使用することを強くお勧めします。

ST_DWithin を使用して近接クエリを効率的に実行します

ST_DWithin は、2 つのジオメトリが指定された距離内にあるかどうかを直接チェックする強力な関数です。 探索半径をメートルに変換し、ST_DWithin を使用して計算された距離と比較することで、目的の範囲内の建物を効率的に特定できます。

<code class="language-sql">SELECT name, long, lat
FROM building
WHERE ST_DWithin(
  ST_GEOMETRY_FROM_TEXT('POINT(-84.38653999999998,33.72024)'),
  ST_POINT(long, lat),
  8046.72
);
-- 8046.72 米 = 5 英里</code>
ログイン後にコピー

換算されたマイル距離を処理するには ST_Distance を使用します

または、ST_Distance を使用して幾何学的形状間の距離を計算することもできます。出力は最初はメートル単位ですが、単純な乗算係数を使用してマイルに変換できます:

<code class="language-sql">SELECT name, long, lat,
  ST_Distance(
    ST_GEOMETRY_FROM_TEXT('POINT(-84.38653999999998,33.72024)'),
    ST_POINT(long, lat)
  ) * 0.000621371 AS distance
FROM building
WHERE distance < 5;</code>
ログイン後にコピー

注: ST_Distance を使用する場合、インデックスを使用して空間クエリを効率的に処理する必要があります。 ST_Distance 自体はインデックス作成をサポートしていませんが、ST_GEOMETRY に空間インデックスを作成すると全体的なクエリのパフォーマンスを最適化できます。

概要

代替アプローチを検討し、データ表現の最適化に重点を置くことで、指定された範囲内の建物を効率的に取得する方法を実証します。このホワイトペーパーで紹介する手法は、実際のアプリケーションにおける空間クエリのスケーラビリティとパフォーマンスの向上を実現します。

以上が指定された地点から 5 マイル以内のすべての建物を効率的に見つけるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート