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

1

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

В стороне, мы используем Rails на сервере, где происходят все вычисления местоположения. Телефон просто отображает карты и обновляет сервер с координатами lat/long.

Теги:
iphone
google-maps
geolocation

3 ответа

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

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

  • 0
    На самом деле, обсуждая это с моим партнером (он работал на сервере, я работал на телефоне), мы, очевидно, уже используем GeoKit. Если вы ручаетесь за его производительность, то мне интересно, плохо ли мы его используем. В защиту моего партнера, хотя, мы были в довольно напряженный срок в то время :)
  • 0
    Группа из 40 пользователей не должна занимать 10 секунд для результата вообще. Должно быть что-то еще, связывающее ответ. У меня есть около 150 строк модели, имеющих широту и долготу, и используют: origin в качестве почтового индекса и порядок по: distance .. мои результаты возвращаются в миллисекундах.
Показать ещё 5 комментариев
3

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

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

1

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

  • 0
    Вы полностью взорвали мой разум. : D

Ещё вопросы

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