座標を使用して、指定した半径内の建物を検索します
地理データを処理するときは、通常、特定の場所の特定の範囲内でオブジェクトを検索する必要があります。これは、特定の点から一定の半径内にある建物を検索するなどのタスクに特に役立ちます。この記事では、指定された一連の座標から 8 マイル以内にあるすべての建物を検索することに焦点を当てます。
データ構造
データベース テーブルの名前は「Building」で、次の必要な情報が含まれています:
チャレンジ
特定の点から半径 5 マイル以内にあるすべての建物を取得したいと考えています。指定された座標セットを使用してこれを表します。
最初の試み
目的の範囲内の建物を検索するには、最初に 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 サイトの他の関連記事を参照してください。