Ответы пользователя по тегу Спутниковая навигация
  • Выборка ближайших точек?

    Ramzeska
    @Ramzeska
    Ну а если вас интересует функция, переводящая две координаты в расстояние между ними, с радостью поделюсь кусочком:
    <?php
        private function LatLngDist($p, $q) {
            $R = 6371; // Earth radius in km
    
            $dLat = (($q[0] - $p[0]) * pi() / 180);
            $dLon = (($q[1] - $p[1]) * pi() / 180);
            $a = sin($dLat / 2) * sin($dLat / 2) +
                    cos($p[0] * pi() / 180) * cos($q[0] * pi() / 180) *
                    sin($dLon / 2) * sin($dLon / 2);
            $c = 2 * atan2(sqrt($a), sqrt(1 - $a));
    
            return $R * $c;
        }
    
    Ответ написан
    Комментировать
  • Выборка ближайших точек?

    Ramzeska
    @Ramzeska
    Используйте функции spatial движка mysql. dev.mysql.com/doc/refman/5.1/en/spatial-extensions.html
    Там есть и специальные индексы и оптимизированный поиск по ним. Вам достаточно lat,lng поля превратить в одно поле типа GeoPoint и создать на нем spatial индекс. А далее дело техники сделать выборку в пределах квадрата по индексу и через having отрезать до окружности. Лучше поступать именно так, потому что там используется специальный для этого индекс. Не знаю что там у вас урезано, но мы проверяли быстродействие при поиске по двум полям и по point полю, так последний показал в разы большую производительность.
    Ответ написан