ホームページ  >  記事  >  データベース  >  指定された半径を持つ複数の円形マーカーに重なる結果をデータベースにクエリするにはどうすればよいですか?

指定された半径を持つ複数の円形マーカーに重なる結果をデータベースにクエリするにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-31 03:04:31446ブラウズ

How to Query a Database for Results Overlapping Multiple Circular Markers with Specified Radii?

半径オーバーラップ内の結果をデータベースにクエリする

問題:

地理情報を含むデータベース内データの場合、指定した半径を持つ複数の円形マーカーと部分的に重なる結果を選択したいとします。既存の SQL クエリは、複数のマーカーと重複する結果を正確に識別できません。

解決策:

正確な結果を得るには、次の SQL ステートメントを使用できます:

<code class="sql">SELECT A.user_id, A.radius_id, A.latitude, A.logitude
FROM UserA AS A, 
     (SELECT user_id, latitude, longitude 
       FROM UserB 
       WHERE user_id = 8) AS B
WHERE (POW((A.latitude-B.latitude)*111.12, 2) + POW((A.longitude - B.longitude)*111.12*cos(A.latitude), 2)) <= 4</code>

説明:

このクエリは、円の方程式を使用して、(UserA からの) 指定された点が円の半径 (緯度とによって定義される) 内にあるかどうかを判断します。 UserB からの半径の経度)。次の手順が含まれます:

  1. 緯度と経度をキロメートルに変換します。 緯度と経度の差に 111.12 を乗じて、キロメートルに変換します。
  2. 計算円の方程式を使用した距離: 修正された式 POW((A.latitude-B.latitude)*111.12, 2) POW((A.longitude - B. longitude)*111.12*cos(A.latitude), 2).
  3. 距離と半径の比較: 計算された距離が半径の 2 乗以下の場合、ポイントは範囲内にあります。半径。

このクエリを使用すると、円が互いに接触している場合でも、複数の円形マーカーに重なる結果を正確に識別できます。

以上が指定された半径を持つ複数の円形マーカーに重なる結果をデータベースにクエリするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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