Зачем вычислять геодистанцию ​​по широте / долготе вместо кеширования картовых точек? - PullRequest
4 голосов
/ 26 июня 2010

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

Проблема здесьэто, конечно, производительность.Формула haversine требует тонны вызовов функций cos / sin, но не проще ли сохранить проецированные значения X, Y и Z точки широты / долготы в базе данных и применить точечное произведение напрямую?Для этого потребуется один вызов arccos, если я не ошибаюсь.

Ответы [ 3 ]

3 голосов
/ 26 июня 2010

Поскольку любая данная декартова проекция даст правильный ответ только для определенных точек - проекция, которая дает правильное расстояние между двумя точками на одном конкретном круге вокруг сферы, будет искажать расстояния вдоль другого конкретного круга.такие как Haversine не зависят от относительного расположения различных точек на сфере;они возвращают правильное расстояние независимо.

0 голосов
/ 14 мая 2013

Расчет расстояния между двумя координатами X, Y, Z даст вам расстояние по прямой (по мере того, как стрелка летит). Формула Haversine дает кратчайший путь на поверхности искривленной земли (сферическое расстояние). Большинство географических программных приложений должны вычислять расстояние по поверхности Земли, поэтому используются алгоритмы Haversine или аналогичные алгоритмы сферической тригонометрии.

0 голосов
/ 26 июня 2010

Нет, вы не ошиблись.Хотя две вещи.Во-первых, очевидно, что ваши преимущества в производительности будут зависеть от характера вашего приложения.Если вам нужно многократно использовать одни и те же точки в своих вычислениях, вы повысите производительность, выполнив то, что вы предлагаете.

Во-вторых, используемая вами формула здесь не является проблемой.Если вы предварительно вычислили и сохранили sin и cos широты / долготы и использовали haversine, вы получите точно такие же улучшения производительности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...