Поиск алгоритма ближайшего соседа с использованием координат карты Google

0

Пожалуйста, помогите мне найти алгоритм, который находит ближайшего соседа по его координатам (широта/долгота). Я буду реализовывать его с помощью PHP

например. у нас есть 1 клиентский и 2 узла Node 1 = 32.9697, -96.8032 и узел 2 = 42.9697, -97.80322

каждый узел имеет свои собственные координаты (место на карте).

клиент отправит координаты широты и долготы в систему, и система узнает, находятся ли координаты, которые он получает от клиента, рядом с узлом 1 или узлом 2

Пожалуйста, извините мою грамматику. Надеюсь на ваш добрый ответ. заранее спасибо

Теги:
algorithm
coordinates

1 ответ

1
Лучший ответ

Если у вас есть только ограниченное количество возможных целей (как я бы догадался из вашего вопроса), вы можете использовать следующую функцию (скопированную здесь) и просто перебирать все свои цели, чтобы найти ближайшую.

function distance($lat1, $lng1, $lat2, $lng2, $miles = false)
{
    $pi80 = M_PI / 180;
    $lat1 *= $pi80;
    $lng1 *= $pi80;
    $lat2 *= $pi80;
    $lng2 *= $pi80;

    $r = 6372.797; // mean radius of Earth in km
    $dlat = $lat2 - $lat1;
    $dlng = $lng2 - $lng1;
    $a = sin($dlat / 2) * sin($dlat / 2) + cos($lat1) * cos($lat2) * sin($dlng / 2) * sin($dlng / 2);
    $c = 2 * atan2(sqrt($a), sqrt(1 - $a));
    $km = $r * $c;

    return ($miles ? ($km * 0.621371192) : $km);
}

Если у вас много возможных местоположений (> = 10 ^ 4), вы должны организовать эти точки данных в некоторой структуре, чтобы оценить их только часть. Я бы предложил Quadtree для этого, хотя он не будет работать как на полюсах, так и на границе datum. Я уверен, что вы найдете лучшие решения, если это необходимо для такого случая (который, как я полагаю, вам не нужен).

  • 0
    Спасибо за ответ, эта функция будет полезна для моей реализации. во всяком случае, вы можете объяснить мне о цели? как мне реализовать, какая часть кода?
  • 0
    Я не понимаю ваш комментарий. Просто пройдите все ваши узлы, вычислите расстояние до вашего клиента, используя функцию, и узел с наименьшим расстоянием - ваш ближайший сосед
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню