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

指定された座標から 5 マイル以内の建物を効率的に検索するにはどうすればよいですか?

Barbara Streisand
リリース: 2025-01-09 11:47:42
オリジナル
115 人が閲覧しました

How to Efficiently Retrieve Buildings within 5 Miles of Given Coordinates?

半径 5 マイル以内の建物の位置を特定する: 地理空間ソリューション

この記事は、指定された座標から半径 5 マイル以内にあるすべての建物を識別するという共通の課題に取り組みます。 この空間クエリに対する高パフォーマンスのソリューションを紹介します。

シナリオ:

「名前」、「緯度」 (「lat」)、「経度」 (「lng」) の列を持つ「建物」データベース テーブルを想像してください。 各建物の位置は緯度と経度によって定義されます。

問題:

目的は、特定の座標ペアから 5 マイル以内にあるすべての建物を取得することです (例: -84.38653999999998、33.72024)。

非効率なアプローチ:

緯度と経度の値を個別に保存した ST_CONTAINS のような関数を使用するのは非効率的です。 このアプローチでは、クエリ処理に大幅なオーバーヘッドが追加されます。

最適なソリューション: 空間データ型の活用

最適なパフォーマンスを得るには、座標をジオメトリまたは地理データ型として保存します。これにより、距離の計算が大幅に効率化されます。 PostGIS 関数の使用をデモします。

効率的な方法: ST_DWithin および ST_Distance

PostGIS は、効率的な距離計算のための強力な空間関数を提供します。 ST_DWithinST_Distance の使用方法は次のとおりです。

ST_DWithin の使用 (ブール結果):

ST_DWithin は、ジオメトリが指定された距離内にあるかどうかを示すブール値を返します。

<code class="language-sql">SELECT name, lng, lat,
  ST_Distance('POINT(-4.6314 54.0887)'::geography,
              ST_MakePoint(lng,lat)::geography) * 0.000621371 AS distance
FROM building
WHERE
  ST_DWithin('POINT(-4.6314 54.0887)'::geography,
              ST_MakePoint(lng,lat)::geography, 8046.72); -- 8046.72 meters = 5 miles</code>
ログイン後にコピー

ST_Distance の使用 (マイル単位の距離):

ST_Distance は距離をメートル単位で返します。換算係数を使用してマイルに換算します。

<code class="language-sql">SELECT name, lng, lat,
  ST_Distance('POINT(-4.6314 54.0887)'::geography,
              ST_MakePoint(lng,lat)::geography) * 0.000621371 AS distance
FROM building
WHERE 
  ST_Distance('POINT(-4.6314 54.0887)'::geography,
              ST_MakePoint(lng,lat)::geography) * 0.000621371 <= 5;</code>
ログイン後にコピー

これらの空間関数を使用し、座標を適切に保存することで、効果的な地理空間アプリケーションに不可欠な、半径 5 マイル以内の建物の正確かつ効率的な検索を実現できます。 (-4.6314, 54.0887) を実際の座標に置き換えることを忘れないでください。

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

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