ホームページ >データベース >mysql チュートリアル >MySQL の空間拡張と緯度/経度を使用して円内の点を選択する方法
MySQL 空間拡張: 緯度/経度に基づいて円内の点を選択する
背景:
MySQL は、その空間拡張を使用して地理空間データを保存できます。これにより、点、線、ポリゴンなどの空間オブジェクトの効率的なクエリと操作が可能になります。一般的なタスクの 1 つは、指定された場所から指定された半径内のポイントを選択することです。
地理空間拡張の使用:
このタスクを実行するために、MySQL はバッファーなどのいくつかの地理空間関数を提供します。 () は、点または線の周囲にバッファー ゾーンを作成します。ただし、MySQL は緯度と経度に基づく近接計算をネイティブにサポートしていないことに注意することが重要です。
代替アプローチ:
以下に基づいて円内の点を決定します。緯度と経度が異なる場合は、別のアプローチが必要です。大圏距離公式を使用して、地球の表面上の 2 点間の距離を計算できます。これを MySQL クエリに組み込んで、指定した半径内のポイントをフィルタリングできます。
サンプル クエリ:
次のクエリは、大圏距離の式を使用して次のことを行う方法を示しています。指定された緯度と経度から半径 100 メートル以内のフラグを選択します:
SELECT id, coordinates, name, r, units * DEGREES(ACOS(LEAST(1.0, COS(RADIANS(latpoint)) * COS(RADIANS(latitude)) * COS(RADIANS(longpoint) - RADIANS(longitude)) + SIN(RADIANS(latpoint)) * SIN(RADIANS(latitude))))) AS distance FROM flags JOIN ( SELECT 42.81 AS latpoint, -70.81 AS longpoint, 10.0 AS r, 69.0 AS units ) AS p ON (1=1) WHERE MbrContains(GeomFromText ( CONCAT('LINESTRING(', latpoint-(r/units),' ', longpoint-(r /(units* COS(RADIANS(latpoint)))), ',', latpoint+(r/units) ,' ', longpoint+(r /(units * COS(RADIANS(latpoint)))), ')')), coordinates)
この例ではクエリでは、latpoint パラメーターと Longpoint パラメーターはユーザーの位置を表します。 r パラメータと単位パラメータは、半径 (メートル単位) と緯度ごとの距離単位を指定します。
追加の考慮事項:
次のようにします。このアプローチでは、緯度と経度に基づいて円内の点を効果的に選択でき、MySQL 空間拡張機能を使用して位置ベースのアプリケーションを作成できるようになります。
以上がMySQL の空間拡張と緯度/経度を使用して円内の点を選択する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。