Стратегии для большого объема геокодирования местоположения - PullRequest
2 голосов
/ 27 октября 2009

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

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

Ответы [ 3 ]

3 голосов
/ 27 октября 2009

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

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

2 голосов
/ 27 октября 2009

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

1 голос
/ 28 октября 2009

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

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