Стратегии для большого объема геокодирования местоположения

StackOverflow https://stackoverflow.com/questions/1631710

Вопрос

У меня есть приложение, которое использует API Карт Google для геокодирования расстояний между широтно-длинными парами для отображения людей рядом с вами на вашем телефоне (в настоящее время Android работает на iPhone). Проблема в том, что даже с тестовой группой из 40 пользователей мы затрачиваем более 10 секунд на выполнение наших расчетов и отправку результатов обратно пользователям. Хотя 10 секунд звучат как долгое время, на самом деле это не проблема для клиентского приложения, потому что это не обновление местоположений людей в режиме реального времени (обновления происходят каждые несколько минут). Очевидно, что это проблема, поскольку мы, очевидно, хотели бы увеличить число пользователей до десятков или даже сотен тысяч. Мне интересно, есть ли у кого-нибудь еще опыт в этой области в отношении использования API Карт Google для расчета расстояний между точками для больших объемов данных?

Кроме того, мы используем Rails на сервере, где происходят все вычисления местоположения. Телефон (ы) просто отображает карты и обновляет сервер с широтой / долготой.

Это было полезно?

Решение

Загляните на Geokit , это плагин Ruby Gem and Rails, который делает то, что вы хотите, и более того, я думаю, вы будете очень довольны скоростью и возможностями.

Другие советы

Вам не нужен API Google Maps для расчета расстояний, когда у вас уже есть координаты широты / долготы. Вычисление расстояния по большому кругу можно выполнить с помощью формулы Хаверсина или Винсенти.

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

Возможно, вы захотите подумать о преобразовании lat long в локализованную равноудаленную проекцию, прежде чем выполнять какие-либо вычисления, если вы покрываете определенную область. Или, проще говоря, если охватывать глобальные области, преобразуйте широту в две ближайшие зоны UTM, сохраняя два набора координат X Y и два идентификатора зон UTM. Затем вы можете сначала выбрать записи для совпадений зон UTM и выполнить свои вычисления для этого подмножества, используя проекционные координаты секунды (что будет значительно быстрее, чем вычисление расстояния от широты).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top