ホームページ >データベース >mysql チュートリアル >MySQL 空間拡張機能を使用して円内の点を効率的に見つけるにはどうすればよいですか?

MySQL 空間拡張機能を使用して円内の点を効率的に見つけるにはどうすればよいですか?

DDD
DDDオリジナル
2025-01-06 12:11:40894ブラウズ

How Can I Efficiently Find Points Within a Circle Using MySQL Spatial Extensions?

MySQL 空間拡張機能を使用した円内の点の検索

ユーザーの位置が緯度と経度によって決定されるシナリオでは、一般的なタスクは次のとおりです。特定の半径内で近くのフラグを取得します。 MySQL の空間拡張機能を使用すると、地理空間データに対して近接クエリを実行できます。

Circle クエリ用の空間関数

MySQL には当初、緯度/経度の距離を計算するための空間関数がありませんでした。 、MySQL 5.7 のリリースでは、そのような地理空間サポートが導入されました。計算。円形近接クエリの場合、ST_Distance_Sphere 関数を使用できます。

SELECT * FROM flags
WHERE ST_Distance_Sphere(coordinates, ST_GeomFromText('POINT(latpoint longpoint)')) < 100;

このクエリでは、座標は地理空間ポイントを含む列を表し、latpoint とlongpoint はユーザーの場所の緯度と経度の値です。円の半径はメートル単位で指定します。

代替アプローチ

MySQL 5.7 より前では、ユーザーは代替アプローチを使用できました:

  • Haversine 公式: この公式は、上の 2 点間の大圏距離を計算します。球体。これは、ACOS や SIN などの SQL 関数を使用して実装できます。
  • 境界四角形: ユーザーの円を囲む境界四角形を作成すると、MBRContains 関数を使用して四角形内の点を識別できます。このアプローチには、実際の円の外側の点が含まれる可能性があるため、制限があります。

使用例

幾何学模様として「座標」を持つ「フラグ」テーブルを想定point 列では、次のクエリはユーザーの 100 メートル以内にあるすべてのフラグを取得します。 location:

SELECT * FROM flags
WHERE ST_Distance_Sphere(coordinates, ST_GeomFromText('POINT(42.81 -70.81)')) < 100;

結論

MySQL の空間拡張機能は、緯度に基づいて円内の点を検索する機能など、地理空間データに対する効率的な近接クエリのための強力なツールを提供します。と経度の位置。

以上がMySQL 空間拡張機能を使用して円内の点を効率的に見つけるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。