Ідеальна структура даних для зберігання даних карт?


12

Про це мене запитали в тесті на інтерв'ю. Я зробив нормально тест, але не знав достатньо, щоб відповісти на це питання. Мені цікаво знати, які структури даних я можу використовувати для швидкого запиту даних.

По суті, ідея полягає у тому, щоб існували ділянки дороги (лінії, складені з точок), що зберігаються в якійсь структурі даних. Слід швидко запитати, які ділянки дороги (або пункти) знаходяться в певній відстані від точки (радіуса).


Щоб дійсно дізнатися більше, я б прочитав на: cgal.org , потім подивіться на ці проекти: cgal.org/projects.html#gis , знайдіть той, що нагадує те, що ви хочете, а потім вивчіть використання API та нарешті макіяж API.
Робота

Відповіді:


16

Типовим способом зберігання географічних даних є структура просторових даних, така як R-дерево (або якийсь варіант, такий як дерево R +, R * дерево тощо). Це так, як типи географічних даних зазвичай реалізуються в ГІС-сумісній системі RDBMS. (Я знаю, що Microsoft SQL Server 2008 і PostGIS використовують R-дерева для географічних типів.) Вони відповідають усім описаним вами базовим вимогам і тривіально підтримують перехрестя, розташування, відстань та інші типи запитів.

Залежно від типу даних, ви також можете зустріти такі речі, як kD-дерева, квадратики, октриси, ієрархії обмежувального обсягу (включаючи дерева, що обмежують вісь, орієнтовані на осі) тощо. Це насправді набагато частіше зустрічається у 3D-іграх, оскільки розмір та форма предмета більше стосуються запитів перетину. Вони рідше використовуються для ГІС, ніж R-дерева.


0

Для різних результатів операцій з картографічними даними потрібні різні формати зберігання для досягнення оптимальних результатів. Розглянемо, наприклад, такі три завдання:

  1. Давши крапку, знайдіть найближчу до цієї точки дорогу
  2. Враховуючи географічну область певного розміру, знайдіть усі дороги, які знаходяться в межах цього району.
  3. З огляду на дві дороги, знайдіть найкоротший маршрут між ними.

Відмінності в вимогах є досить великими, якщо, якщо вам не потрібно буде вмістити "живі" зміни на карті, можливо, краще буде зберігати три окремі копії даних - кожна оптимізована під одне з вищезазначених завдань - ніж намагатися придумати формат, який добре впорається з усіма трьома завданнями.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.