Хранение данных о местоположении (точки, группировка по расстоянию и т. Д.) - лучшие практики и рекомендуемые решения - PullRequest
3 голосов
/ 07 февраля 2012

Я столкнулся с проблемой, которую никогда раньше не решал, но часто нахожу ее реализованной в различных приложениях, поэтому я хотел бы спросить, есть ли общий способ ее решения.У меня есть набор аналитических данных, каждый из которых представляет какое-то действие по регистрации (например, информация, предупреждение и т. Д.).У каждого из этих предметов есть местоположение и тип (то есть действие).На каждую область может приходиться миллионы таких элементов (в зависимости от размера области или масштаба карты).

Я ищу лучший способ сохранить этот набор данных в моей базе данных.Мне очень удобно с SQL Server, но я не возражаю против того, какую БД я должен использовать, если он может соответствовать требованиям масштабируемости.Если Amazon WS предлагает такой продукт или какое-либо другое облачное решение, то это даже лучше, чем мы планируем разместить это приложение.Карты Google будут использоваться для визуализации данных.

Некоторые требования:

  1. Возможность отображать все данные для данного прямоугольника карты (общий интерфейс карты Google с маркерами, представляющими протоколирование).действия)
  2. Уметь увеличивать / уменьшать масштаб и получать соответствующие данные для нового прямоугольника карты
  3. Уметь "группировать" маркеры в один больший маркер, если данные очень близки.Например, если точка A находится на расстоянии 1 км от точки B, и я вижу карту радиусом 10 км, то я должен увидеть две независимые точки, A и B. Но если я уменьшу радиус до 500 км, то точки A и B будутслишком близко друг к другу, поэтому я хотел бы сгруппировать их в один маркер.Надеюсь, что это возможно.
  4. Если SQL Server не является хорошим решением, то следует рекомендовать бесплатное, очень дешевое или облачное хранилище (нет, я не могу позволить себе Oracle).

Все вышеперечисленные запросы должны быть в состоянии возвращаться в течение миллисекунд или как-то кэшироваться.Запросы будут иметь следующий вид: Получить мне все аналитические данные для данного окна карты с масштабированием заданного прямоугольника широты / долготы.

Спасибо, Яннис

1 Ответ

1 голос
/ 07 февраля 2012

Если я правильно недооцениваю, у вашего вопроса есть две стороны:

1- Система баз данных, которая поддерживает хранение и поиск пространственных данных. Многие из СУБД с открытым / открытым исходным кодом имеют пространственные расширения: MySQL и Postgres ( PostGIS ), в частности. Пространственные данные хранятся, как и любые другие данные, с добавлением атрибута пространственной геометрии, который описывает форму вашего экземпляра данных (точка, прямоугольник, многоугольник, эллипс, ...). Вы можете запрашивать объекты пространственных данных с помощью пространственных фильтров. И, конечно, пространственные запросы поддерживают соединения и объединения и почти все виды конструкций SQL.

2 - API клиент-сервер, который будет поддерживать рендеринг пространственных данных (с обычными функциями, такими как увеличение, уменьшение, панорамирование и т. Д.), Кэширование и детализацию. Насколько я знаю, нет ни одного API, который бы поддерживал все эти функции вместе, из коробки. Но есть некоторые интересные apis , которые вы, возможно, захотите исследовать.

Надеюсь, это поможет.

...