После поиска в течение некоторого времени я не смог найти или написать правильный запрос mysql для функции, которая оценивает уникальность (или почти уникальность) точки GPS. Это включает в себя оценку широты и долготы в пределах одной строки базы данных.
База данных дороги имеет ряды для roadid, Lat, а также LNG.
Проблема в том, что используемый мной API не всегда возвращает именно так то же значение, что и предыдущие вызовы, я предполагаю, что они интерполированы. Тем не менее, это означает, что ответом может быть «35.000000, 40.000000», а в следующий раз будет «35.000008, 39.999992».
Я хочу написать функцию PHP, которая будет передавать объект базы данных, широту, долготу и допуск. Допуск следует применять как к точкам широты, так и к долготе, чтобы можно было найти любые точки в «зоне допуска».
Он должен возвращать либо true (нет результатов сопоставления на основе допустимого отклонения и заданного значения lat / long) ИЛИ он должен возвращать объект ответа mysql для обработки и дальнейшей оценки неуникальных точек.
Вот что у меня так далеко:
private function checkunique($db, $lat, $lng, $tolerance = 0)
{
//check database for lat/lng
$response = $db->query("SELECT roadid FROM roads WHERE lat = " . $lat . " AND lng = " . $lng);
if($response->num_rows == 0)
{
//unique
return true;
}
else
{
//duplicate or duplicate within tolerance found.
$response = $response->fetch_object();
return $response;
}
}
Я предполагаю, что единственное, что мне действительно нужно, — это правильное выражение MySQL, но я отмечаю это и в PHP.
По сути, вам просто нужно это:
SELECT ...
...
WHERE $lat BETWEEN (lat - $tolerance AND lat + $tolerance)
или же
WHERE (abs(lat - $lat) <= $tolerance)
Других решений пока нет …