У меня есть приложение, которое использует API Карт Google для геокодирования расстояний между лат/длинными парами как способ отображения людей рядом с вами на вашем телефоне (в настоящее время Android, работающий на iPhone). Проблема в том, что даже при использовании тестовой группы из 40 пользователей мы занимаем до 10 секунд для выполнения наших расчетов и отправки результатов обратно пользователям. В то время как 10 секунд звучат как долгое время, это не проблема, поскольку клиентское приложение идет, потому что это не обновление в реальном времени мест для людей (обновления происходят каждые несколько минут). Очевидно, что это проблема, хотя мы, очевидно, любим наращивать до десятков или даже сотен тысяч пользователей. Мне любопытно, есть ли у кого-нибудь еще опыт на этой арене в отношении использования API Карт Google для расчета расстояний между точками для больших объемов данных?
В стороне, мы используем Rails на сервере, где происходят все вычисления местоположения. Телефон просто отображает карты и обновляет сервер с координатами lat/long.
Взгляните на Geokit, это плагин Ruby Gem и Rails, чтобы делать то, что вы хотите, и многое другое, я думаю, вы Будем очень довольны скоростью и функциями.
Вам не нужно API карт google для вычисления расстояний, когда у вас уже есть координаты lat/lon. Вычисление расстояния большого круга может быть выполнено с использованием формулы haversine или vincenty.
Изменить: Если я правильно понимаю вашу проблему (поиск близких мест в одном месте в 10 000 записей), я могу только рекомендовать использовать для этой цели некоторую гео-библиотеку. Вычисление расстояний 10k - это плохая идея, когда поступает больше запросов. Вам обязательно нужно искать более разумные алгоритмы для этого (квадратное дерево кажется практичным).
Возможно, вы захотите рассмотреть преобразование lat long в локализованную эквидистантную проекцию, прежде чем делать какие-либо вычисления, если вы покрываете определенную область. Или, проще говоря, при покрытии глобальных областей, переведите лат долго в две ближайшие зоны UTM, сохранив два набора координат X Y и два идентификатора зон UTM. Затем вы можете сначала выбрать записи в совпадениях в зоне UTM и выполнить свои вычисления против этого подмножества с использованием прогнозируемых координат в секундах (что будет значительно быстрее, чем вычисление расстояния от лата).