Реверс формулы Haversine для MySQL?

Один общий класс констант - плохая идея. Константы должны быть сгруппированы вместе с классом, с которым они наиболее логически связаны.

Вместо того, чтобы использовать какие-либо переменные (особенно перечисления), я бы предложил использовать методы. Создайте метод с тем же именем, что и у переменной, и пусть он возвращает значение, которое вы присвоили переменной. Теперь удалите переменную и замените все ссылки на нее вызовами только что созданного вами метода. Если вы чувствуете, что константа достаточно универсальна, и вам не нужно создавать экземпляр класса просто для ее использования, тогда сделайте метод константы методом класса.

8
задан Benjamin 2 October 2015 в 08:34
поделиться

2 ответа

MySQL имеет целый ряд функций для работы с пространственными данными:

Пространственные расширения MySQL

Я думаю, что вам нужен раздел об измерении взаимосвязей между геометриями:

Взаимосвязи между геометриями

3
ответ дан 6 December 2019 в 00:08
поделиться

Я выполнил аналогичный географический поиск, вычислив ограничивающую рамку через расстояние большого круга и запросив база данных для этого. Вам по-прежнему нужен еще один проход в вашем приложении, чтобы «скруглить углы» от ограничивающей рамки до круга.

Итак, учитывая базу данных точек, точку поиска (X, Y) и расстояние D, найдите все точки в пределах D от (X, Y):

  1. Вычислить deltaX, которая является точкой, если вы переместили расстояние D по оси Y.
  2. Вычислите deltaY, которая является точкой, если вы переместили расстояние D вдоль оси X.
  3. Вычислить ваша ограничивающая рамка: (X-deltaX, Y-deltaY), (X + deltaX, Y + deltaY)
  4. База данных запроса точек использует оператор SQL BETWEEN: ВЫБРАТЬ * ИЗ ТАБЛИЦЫ, ГДЕ X МЕЖДУ X-deltaX И X + deltaX И Y МЕЖДУ Y-deltaY И Y + deltaY
  5. Постобработка списка возвращенных точек, вычисление фактического расстояния по большому кругу, для удаления точек в углах квадрата, которые не находятся в пределах вашего круга расстояния.

В качестве сокращения я обычно вычисляю градусы на милю для широты и долготы (на экваторе, так как градусы на милю на полюсах различаются для долготы) и вывести deltaX и deltaY как (D * градусы-широты на милю) или градусы-долготы на милю. Разница на экваторе и полюсе не имеет большого значения, поскольку я уже вычисляю фактическое расстояние после запроса SQL.

К вашему сведению - от 0,167469 до 0,014564 градуса-долона на милю и 0,014483 градуса-широты на милю. миля

чтобы удалить точки в углах квадрата, которые не находятся в пределах вашего круга расстояния.

В качестве сокращения я обычно вычисляю градусы на милю для широты и долготы (на экваторе, поскольку градусы на милю -mile отличается на полюсах для lon), и вывести deltaX и deltaY как (D * градусы-широты на милю) или градусы-долготы на милю. Разница на экваторе и полюсе не имеет большого значения, поскольку я уже вычисляю фактическое расстояние после запроса SQL.

К вашему сведению - от 0,167469 до 0,014564 градуса-долона на милю и 0,014483 градуса-широты на милю. миля

чтобы удалить точки в углах квадрата, которые не находятся в пределах вашего круга расстояния.

В качестве сокращения я обычно вычисляю градусы на милю для широты и долготы (на экваторе, поскольку градусы на милю -mile отличается на полюсах для lon), и вывести deltaX и deltaY как (D * градусы-широты на милю) или градусы-долготы на милю. Разница на экваторе и полюсе не имеет большого значения, поскольку я уже вычисляю фактическое расстояние после запроса SQL.

К вашему сведению - от 0,167469 до 0,014564 градуса-долона на милю и 0,014483 градуса-широты на милю. миля

2
ответ дан 6 December 2019 в 00:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: