嗨,我有一个 phonegap 应用程序,当检测到路面变形(例如坑洼和减速带)时,它会存储纬度、经度、地址和严重程度。
到目前为止,通过 PHP PDO 将这些保存在数据库中根本不是问题。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 次。我需要做的是,获取距离用户一定距离内的坑洞列表(使用haversine公式完成),然后从这个列表中过滤坑洞,以便我只得到不同的坑洞而不是相同的坑洞坑洼被退回10次。任何人都知道如何进行这种过滤?谁能告诉我如何在 PHP/PDO 中做到这一点,或者如果可以的话,请给我一些类似的教程?
这是我需要做的简要说明:假设我在坑洼 A 和坑洼 B 附近,并说我在数据库中有 6 个坑洼 A 的报告和 8 个坑洼 B 的报告(等等)。通过使用harsine 公式,我得到了坑洞A 和坑洞B 的所有报告值(即14 个结果)。我需要的是获得坑洼 A 报告的中点和坑洼 B 报告的中点(使用:http ://www.geomidpoint.com/calculation.html )并返回 2 个结果(一个用于 A 和一个用于 B)而不是 14 个结果。