Зачем ГИС нужны базы данных
Публикации

Зачем ГИС нужны базы данных

Если вы всерьёз работаете с геоданными — файлы вам не друзья. Представьте, что вы ищете книгу в библиотеке. Но у библиотеки нет каталога. Только коробки с книгами. Вы открываете первую коробку — перебираете. Нет нужной. Открываете вторую. Третью. Сотую…вот именно так работает поиск в KML или GEOJson. База данных строит пространственные индексы — специальные структуры, которые говорят: «Искомый объект где-то тут, в этом квадрате карты. Остальное можно не трогать». В результате поиск среди миллиона объектов занимает меньше времени, чем вы моргнёте.

Даже лёгкая SQLite читает данные быстрее, чем операционная система читает файлы. 

Но это самая незначительная проблема при использовании файловой структуры в проекте. Ситуация: Вася открыл KML, добавил новый объект, сохраняет. Петя в это же время открыл тот же KML, добавил свой объект, сохраняет. Результат: Кто последний сохранил — тот и молодец. Работа Васи ушла в никуда. В базе данных есть транзакции. Вася работает в своей сессии, Петя — в своей. Оба сохраняют. Оба их изменения остаются. Преимущества баз данных, которые придумали умные дяди в 1970-х.

Или предположим перед вами стоит задача: найти все кафе в радиусе километра, отсортировать по рейтингу, показать только открытые сейчас, посчитать средний чек. KML: Открываем файл → парсим XML в память (надеемся, что хватит RAM) → считаем расстояние до каждой точки (привет, математика на коленке) → фильтруем вручную → плачем.

PostGIS:

sql
Copy
SELECT name, rating, avg_check 
FROM cafes 
WHERE ST_DWithin(geom, my_location, 1000)  
AND is_open_now = true  
AND rating > 4 
ORDER BY rating DESC;

Время: 12 миллисекунд. Двенадцать.

Чек-лист: пора ли вам переходить на базу данных

  • [ ] У вас больше 10 000 объектов
  • [ ] Работаете вдвоём или больше над одними данными
  • [ ] Нужен поиск по атрибутам или пространству
  • [ ] Хотите историю изменений
  • [ ] Нужна автоматизация (скрипты, обработка)
  • [ ] Данные постоянно обновляются

Если отметили хоть один пункт — добро пожаловать в PostgreSQL+PostGIS. Это бесплатно, open-source, и есть тонны туториалов. В PostGISне только атрибуты, но и геометрия стала типом данных, как число или текст. Можно индексировать. Можно считать в SQL. Можно делать JOIN по пересечению полигонов.