Итак, я работаю над окончательным проектом на языке Java, в этом проекте есть серверная часть (за которую я отвечаю) и клиент с графическим интерфейсом (за который отвечает кто-то другой).
В качестве сервера я постоянно получаю GPS-координацию (как широту и долготу) от клиентов Android, и мне нужно ответить их эквивалентным местоположением в предварительно выделенной сетке.
Сетка задается 4 координатами LatLng, отправленными мне клиентом GUI, и количеством линий сетки, на которые нужно разделить. Например. Я получаю (35.000,35.000),(35.000,36.000),(36.000,36.000),(36.000,35.000) и 40x40.
Текущий метод, который я использую, заключается в вычислении расстояния в градусах радиана для расстояния по широте области и расстояния по долготе отдельно, а затем я делю его на 40 (как в приведенном примере), каждое частное — это мой «щелчок», единая единица расстояния, которую я использую позже.
Когда я получаю новую координату, я делю ее на свой «щелчок» и делаю Math.floor, частное этой операции - это местоположение на сетке. Но что-то не так, мои расчеты видимо неверны, так как GUI клиент со мной не согласен (обычно по 1 сетке север/юг и 1 сетка запад/восток, он просто берет карту (например гугл-карту) и манипулирует ею как картинкой просто разделение прямоугольной области.Что я делаю неправильно?Есть ли лучший способ дискретизации области, заданной этой установкой?
Вещи, которые я уже проверил: 1. Это не какое-то недополнение с плавающей запятой, я использовал BigDecimal и SimpleLatLng .
- Клиент с графическим интерфейсом соглашается со мной в местах, расположенных ближе к относительному блоку сетки 0x0, так что это не обычная ошибка смещения на единицу.
РЕДАКТИРОВАТЬ: мне удалось исправить большую часть ошибки, у меня все еще есть ошибка, за которую я не знаю, какая часть кода может быть ответственной.
РЕДАКТИРОВАТЬ 2: Проблема, кажется, решена, проблема заключалась в том, что в первую очередь не был получен правильный пеленг, и просто предполагалось, что сетка была привязана к северу, правильный код прилагается: