Фон: Я получаю long и lat в качестве параметров для веб-службы. Обычно они имеют до 6 десятичных знаков. Когда новый запрос получен, я вычисляю расстояние между последним записанным loc и long / lat в параметрах запроса. Если расстояние больше определенного порога в милях друг от друга, я обновляю текущее местоположение.
Проблема: Я использую geokit gemit / plugin для вычисления расстояния между локациями. Очень редко обнаруживается ошибка (ошибка нулевого расстояния, упомянутая на сайте автора - я использую 1.4.1, которая утверждает, что ошибка исправлена, но я все еще вижу, что это происходит shrug ), которая вызывает расстояние calc вычисляет что-то крайне неточное при расчете расстояния между двумя точками, которые идентичны (это происходит, если пользователь не двигается). Это вызывает обновления текущего местоположения пользователя, что не должно происходить. Вы, наверное, задаетесь вопросом - ну, если это просто обновляет loc, чтобы она была точно такой же координаты, кого это волнует? Что ж, ответ таков: при обновлении loc возникает куча других дерьмов, что делает ее актуальной проблемой.
Попытка решения: Я попытался добавить в логику, чтобы вручную проверить, идентичны ли два локса, прежде чем вычислять расстояние, а затем просто пропустить расчет и не обновлять, если это так. Входящие параметры: long / lats с точностью до 6 десятичных знаков; в то время как в моей базе данных я храню значения как числа с плавающей запятой, которые, по-видимому, хранят только 4 десятичных знака. Это приводит к тому, что мое сравнение с плавающей точкой всегда завершается ошибкой, и продолжают появляться неподходящие обновления loc.
Фу, хорошо, так что реальный вопрос: как мне провести это сравнение? Должен ли я усечь 2 десятичных знака из входящих лат / длин, как-то округлить, чтобы четвертая цифра была правильной, а затем сравнить? Или я должен выполнить сравнение «в определенном диапазоне» (например, reports_loc.long> current_loc.long - .0001 && reports_loc.long
Вот пример вывода из журнала:
[update_loc] Last location history record at lat: 41.5024, long: -81.6816
[update_loc] Current loc at lat: 41.502467, long: -81.681623
[update_loc] Distance from current loc and last loc history: 5795.10615113555 miles
[update_loc] Locs not identical and distance greater than threshold, inserting new loc history
[update_loc] Location update complete
Спасибо
Tom