こんにちは私は、路面の変形(ポットホールやスピードバンプなど)が検出されたときに緯度、経度、住所、重大度を保存する電話ギャップアプリケーションを持っています。
これまでのところ、PHPPDOを介してこれらをデータベースに保存することはまったく問題ではありません。PDOは、報告されている甌穴がすでに10回報告されている場合(15メートルの範囲内のエントリがないかデータベースをチェックする)、報告されない(つまり、データベースに再度挿入される)ように設計されています。また、表面の変形をロードすることも問題ではありません。私はそれを行うためにHaversineの式を使用しています。ここでは、ユーザーの緯度と経度を渡し、特定の距離内の値を取得します。
$stmt = $dbh->prepare("
SELECT
lat, lng,
( 6378160 * acos( cos( radians(?) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(?) ) + sin( radians(?) ) * sin( radians( lat ) ) ) ) AS distance
FROM myTable
HAVING distance > 0
ORDER BY distance
LIMIT 0 , 30
");
私が抱えている問題は、同じ甌穴が10回報告される可能性があるため、同じ甌穴が地図上にチャートを作成するためのアプリケーションに10回報告されることになります。私がする必要があるのは、ユーザーから一定の距離内にある甌穴のリストを取得し(半正矢関数を使用して実行)、このリストから、同じではなく個別の甌穴のみを取得するように甌穴をフィルタリングすることです甌穴は10回返されます。誰かが私がそのようなフィルタリングをどのように行うことができるか考えていますか?PHP / PDOでこれを行う方法を教えてもらえますか、または利用可能な場合は同様のチュートリアルを教えてもらえますか?
簡単に言うと、次のようにする必要があります。データベースに、ポットホールAとポットホールBの近くにいて、ポットホールAのレポートが6つ、ポットホールBのレポートが8つあるとします。半正矢関数を使用することにより、ポットホールAとポットホールBのレポートのすべての値を取得します(つまり、14の結果)。必要なのは、ポットホールAのレポートの中間点とポットホールBのレポートの中間点を取得し(http://www.geomidpoint.com/calculation.htmlを使用)、2つの結果(1つはAと14の結果ではなくB)の1つ。