ホームページ > データベース > mysql チュートリアル > 緯度と経度の座標を使用して半径 5 マイル以内の建物を見つける方法

緯度と経度の座標を使用して半径 5 マイル以内の建物を見つける方法

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

How to Find Buildings Within a 5-Mile Radius Using Latitude and Longitude Coordinates?

座標を使用して、指定した半径内の建物を検索します

地理データを処理するときは、通常、特定の場所の特定の範囲内でオブジェクトを検索する必要があります。これは、特定の点から一定の半径内にある建物を検索するなどのタスクに特に役立ちます。この記事では、指定された一連の座標から 8 マイル以内にあるすべての建物を検索することに焦点を当てます。

データ構造

データベース テーブルの名前は「Building」で、次の必要な情報が含まれています:

  • 名前: 建物名
  • lat: 緯度座標
  • lng: 経度座標

チャレンジ

特定の点から半径 5 マイル以内にあるすべての建物を取得したいと考えています。指定された座標セットを使用してこれを表します。

  • -84.38653999999998 (経度)
  • 33.72024 (緯度)

最初の試み

目的の範囲内の建物を検索するには、最初に ST_Contains 関数の使用を検討します。ただし、このアプローチは、座標を単一のジオメトリとして保存する場合にのみ機能します。緯度と経度の列を別々に使用しているため、ST_Contains を直接適用することはできません。

解決策

代わりに、他の 2 つの関数 ST_DWithin と ST_Distance を利用して、ポイントベースの地理空間計算を実行できます。個別に調べてみましょう。

1.ST_D

ST_DWithin を使用すると、ジオメトリが別のジオメトリから指定された距離内にあるかどうかを確認できます。この状況での使用例を次に示します:

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

2. ST_距離

ST_Distance 2 つのジオメトリ間の距離 (メートル単位) を計算します。これを使用して、5 マイル以内のすべての建物を検索し、距離をマイルに変換できます。

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

ST_Point ジオメトリを構築する場合、引数の順序が重要であることに注意してください。最初のパラメータは経度を表し、2 番目のパラメータは緯度を表します。

これら 2 つのクエリのいずれかを実行すると、必要な結果が得られます。つまり、建物の名前、経度、緯度、指定された座標からの距離のリストが、半径 5 マイル以内の建物のみを含むようにフィルター処理されています。

以上が緯度と経度の座標を使用して半径 5 マイル以内の建物を見つける方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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