Задать вопрос

Как лучше хранить гео-точки (для последующего отображения на карте)?

Есть необходимость хранить в базе точки (longitude и latitude). Точки привязаны к некоторым другим сущностям (например, точка — филиал магазина).
Нужно придумать способ хранения, чтобы можно было быстро выбирать точки, которые попадают в отображаемый диапазон карты, при этом отфильтровав их по каким-то параметрам (например, тип магазина).
Точек может быть очень много (миллиарды) — нужно как то организовать шардинг.
При этом если отображается вся карта мира целиком — необходимо быстро посчитать примерное количество точек, отфильтрованных по параметрам.
  • Вопрос задан
  • 4442 просмотра
Подписаться 17 Оценить Комментировать
Решения вопроса 1
Можно попробовать mongodb. Там есть и географический индекс и шардинг. А вообще набор этих точек часто меняется? И насколько остро стоит вопрос производительности. А то можно и на каждом сервере в память загнать из файла. А также можно разбить их на тайлы и предрасчитать количество точек в каждом тайле. Получится некоторое подобие гиперкуба OLAP.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
Для работы с геометрическими данными использую PostgreSQL + PostGIS
gis-lab.info/qa/postgis-work.html
Ответ написан
Комментировать
Посмотрите в сторону elasticsearch, его типа geo-point и фильтра geo-distance или geo-bbox
Ответ написан
Комментировать
gnoul
@gnoul
Можете попробовать такой подход.
habrahabr.ru/post/147744/
Думаю, что даже для миллиардов точек вам подойдет предложенный выше Postgres + Postgis.
Про фильтрацию большого объема данных сошлюсь на другой пост того же автора.
habrahabr.ru/post/114113/
Вам лишь стоит объединить эти два подхода, в том числе и в случае использования mongo.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы