2014-11-28 2 views
0

После поиска довольно долго я не смог обнаружить или написать правильный запрос mysql для функции, которая оценивает уникальность (или близость) точки GPS. Это включает оценку широты и долготы в той же строке базы данных.Поиск двух близких идентичных значений mysql

База дороги имеет строки для roadid, широчайшие и 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 тоже.

+0

Вы используете DECIMAL или тип данных FLOAT? – Strawberry

+0

Значения FLOAT. – user1917232

ответ

4

В принципе, вам просто нужно это:

SELECT ... 
... 
WHERE $lat BETWEEN (lat - $tolerance AND lat + $tolerance) 

или

WHERE (abs(lat - $lat) <= $tolerance) 
+0

Не понравилось бы (или подобное), чтобы найти близкие значения? Заголовок вопроса OP читается как «Поиск двух близких значений mysql». –

+0

не очень. как бы принудительное преобразование строк. между версиями и абзацами останется числовой. –

+0

Хорошо, я понимаю; спасибо, Марк. –

Смежные вопросы