緯度経度の円と球上の円が重なるかどうかを判断する
-
03-07-2019 - |
質問
サーバースクリプト言語としてPHPを、データベースとしてMySQLを使用して、Geo Proximity Search機能を備えたアプリケーションを作成しています。
状況を考慮してください:
緯度と経度の位置がそれぞれのオブジェクトに関連付けられているオブジェクトの特定のセットがある場合。 KMで範囲/半径とともに国や都市などの場所の詳細を指定すると、たとえばMySQLクエリを使用して、その半径/範囲内にあるオブジェクトを取得しています:
SELECT [columns]
FROM [column]
WHERE 1=1
AND 3963.191 *
ACOS(
(SIN(PI() * [latitude] / 180) * SIN(PI() * [column].latitude / 180)) +
(COS(PI() * [latitude] /180) * cos(PI() * [column].latitude / 180) * COS(PI() * [column].longitude / 180 - PI() * [longitude] / 180)) )
<= 10
上記の計算により、地球上の国/都市の中心点から10 KMの範囲内にあるオブジェクトが得られます。
今、この10 KMの領域ではなく、地球上の国/都市の中心点から15 KMにある1つのオブジェクト(緯度と経度付き)があるとします。このオブジェクトのサービス範囲は10 KMです(10 KMのエリアまでサービスを提供します)。
質問は、国/都市の中心点から10 KMの範囲内のオブジェクトを探している場合、サービス範囲10 KMのオブジェクト(国/都市の中心点から15 KM離れている)も検索に含める必要があることです。
どうすればそれを可能にできますか?国/都市の中心緯度、長い座標、範囲/半径(オブジェクトを見つける必要があります)、および配送半径を持つオブジェクト(例:10 KM)とその対応する座標があります。
PHP、MySQLを使用してそれを行う方法を教えていただけますか?
解決
MySQL空間拡張を使用する http://dev.mysql.com/doc/refman/ 5.1 / en / spatial-extensions.html
一方、与えられた円と交差する他の円を特定したい場合、それらはすべてこれらの円になり、円の中心間の距離は半径の合計よりも小さくなります。つまり、元のポイントと範囲がトリプル( x 0 、 y 0 、 r 0 )、すべてが必要です( x n 、 y n 、 r n )の対象
&#8730;(( x 0 - x n )&#178; +(< em> y 0 - y n )&#178;)&#8804; r 0 + r n