PostGIS в связке с GeoPackage на ноутбуке ГИС-специалиста: когда пора уходить от плоских файлов к пространственной СУБД
Градостроитель, аналитик инженерных сетей водоканала или лесоустроитель быстро нащупывает потолок обычных файловых слоёв: когда в проекте мастер-плана агломерации лежат 2,5 миллиона кадастровых участков, полмиллиона зданий OSM, охранные зоны ЗОУИТ, граф дорог и красные линии, стандартный инструмент QGIS «Пересечение (Intersection)» по плоским файлам крутит прогресс-бар 50 минут на одном потоке и рискует побить файл при выключении питания.
Поднятый прямо на локальном ноутбуке сервер PostgreSQL + PostGIS в связке с обменными контейнерами OGC GeoPackage (*.gpkg) ускоряет те же самые пространственные выборки с 50 минут до 4–8 секунд за счёт параллельных воркеров SQL, плоских нарезанных полигонов ST_Subdivide и индексов GiST.
Чёткая граница ролей: что хранить в GeoPackage, а что переносить в локальный PostGIS
| Критерий задачи | Файловый контейнер GeoPackage (*.gpkg на SQLite) |
Локальная / командная СУБД PostgreSQL + PostGIS |
|---|---|---|
| Передача заказчику одним файлом или выезд в поле без сети | Идеально: один компактный файл .gpkg хранит десятки векторных слоёв, стили QGIS, атрибутивные справочники и растровые тайлы |
Требует экспорта дампа или выгрузки витрины в .gpkg перед отправкой стороннему подрядчику |
| Одновременное редактирование слоя двумя коллегами в сетевой папке | Категорически опасно! Блокировки SQLite WAL по сети SMB портят файл базы! |
Штатный режим MVCC-транзакций, триггеры аудита правок, роли доступа и топологические ограничения CHECK (ST_IsValid(geom)) |
| Пересечение миллионов сложных полигонов ЗОУИТ и лесных кварталов | Однопоточная геометрия, высокий расход времени на «монстр-полигонах» в 50 тыс. вершин | Параллельные планы запросов Parallel Seq Scan / Nested Loop, функции ST_Subdivide, кластеризация на диске CLUSTER и GiST |
| Вес проекта на ноутбуке | Комфортно до 1–5 ГБ на один рабочий контейнер |
Легко обслуживает 20–300+ ГБ пространственных таблиц при мизерном потреблении памяти в простое |
Идеальный рабочий конвейер современного ГИС-инженера объединяет оба мира: тяжёлая аналитическая сборка территории региона живёт и считается в локальном PostGIS на SSD ноутбука, а конкретный район выезда выгружается со стилями и формами ввода в лёгкий офлайн-пакет GeoPackage для полевой съёмки и обхода в QField вместе с офлайн-тайлами подложек.
Четыре строки настройки postgresql.conf, без которых PostGIS на ноутбуке работает на 15 % своей силы
Сразу после установки PostgreSQL на Windows, macOS или Linux его заводской конфиг настроен так консервативно, будто он запущен на офисном сервере 2008 года со старым жёстким диском HDD и 128 МБ буфера! На ноутбуке с 16–32 ГБ ОЗУ и NVMe SSD внесите в postgresql.conf четыре ключевых параметра под рабочую станцию аналитика:
# Настройки для рабочего ноутбука ГИС-аналитика с 32 ГБ ОЗУ и NVMe SSD:
shared_buffers = 6GB # ~20% ОЗУ (не ставьте слишком много, если параллельно крутится QGIS + браузер)
work_mem = 128MB # Память на одну сортировку / Hash Join сложных геометрий без сброса на диск!
maintenance_work_mem = 2GB # Резко (в 5-10 раз!) ускоряет построение индексов CREATE INDEX ... USING GIST!
random_page_cost = 1.1 # Сообщает планировщику, что база лежит на быстром NVMe SSD, а не на медленном HDD (4.0)!
max_parallel_workers_per_gather = 4 # Разрешает параллельный расчёт тяжёлых ST_Intersects по ядрам ноутбука!
(Когда вы не работаете с базой на батарее в кафе, службу postgresql удобно держать в ручном запуске Start on demand или в контейнере Docker, чтобы фоновые чекпоинты вообще не тратили заряд аккумулятора.)
Два секретных приёма PostGIS против «зависания на границе реки или ЛЭП»
Почему даже с созданным индексом CREATE INDEX ON parcels USING GIST (geom); запрос попадания 500 000 земельных участков в водоохранную зону реки внезапно думает 12 минут? Потому что индекс GiST сравнивает ограничивающие прямоугольники (Bounding Box)! У извилистой реки длиной 180 км по диагонали области её единый гигантский прямоугольник BBox накрывает вообще всю область целиком, и индекс пропускает все 500 000 участков на медленную точную проверку геометрии!
Функция ST_Subdivide(geom, 256) разрезает гигантский полигон охранной зоны на аккуратные мелкие плитки максимум по 256 вершин с крошечными BBox — тот же самый запрос ускоряется в 80–150 раз и выполняется за 3 секунды!
-- Мгновенная нарезка сложных зон ЗОУИТ с индексацией на ноутбуке:
CREATE TABLE zouit_tiled AS
SELECT id, zone_type, ST_Subdivide(ST_MakeValid(geom), 256) AS geom
FROM raw_zouit;
CREATE INDEX idx_zouit_tiled_geom ON zouit_tiled USING GIST (geom);
ANALYZE zouit_tiled;
И второй обязательный нюанс для российских градостроительных проектов: выполняйте метрические буферы ST_Buffer и расчёт площадей ST_Area в утверждённой плоской прямоугольной проекции МСК субъекта РФ или через тип geography на сфероиде, но никогда не передавайте метры в функцию ST_Buffer(geom_4326, 50) по градусным координатам EPSG:4326 (PostGIS построит гигантский буфер радиусом 50 градусов — на полпланеты!).
Какой ноутбук идеален для локального PostGIS + QGIS + WebGIS
- MacBook Air / Pro на Apple Silicon (16–32 ГБ объединённой памяти) или ноутбук с Linux / Windows 11 Pro на 8–12 ядрах AMD Ryzen / Intel Core Ultra с 32 ГБ ОЗУ: нативное приложение Postgres.app на macOS (подробное сравнение поколений чипов см. в статье MacBook на Apple Silicon M1, M2 и M3) и сборки PostgreSQL под Linux с библиотекой
GEOS 3.12+демонстрируют великолепную скорость однопоточных и параллельных геометрических операций при полной тишине в переговорной администрации города. - NVMe SSD от
1 ТБс буферомDRAM: построение индексовGiSTи перезапись таблицCREATE TABLE AS SELECTсоздают интенсивный смешанный ввод-вывод; быстрый TLC-накопитель экономит часы времени на пересборках генпланов.
Чек-лист гигиены пространственной базы на ноутбуке
- [ ] В каждой таблице геометрии явно задан
SRID(например,geometry(MultiPolygon, 32637)или пользовательскийSRIDместной МСК в таблицеspatial_ref_sys), а не обезличенныйSRID = 0. - [ ] На всех колонках геометрии и внешних ключах построены индексы
GiST / B-treeи выполнена командаVACUUM ANALYZE. - [ ] Слой импортированных кадастровых/градостроительных контуров прогнан через
ST_MakeValidдо расчёта пересечений, чтобы не получать исключенийTopologyException. - [ ] Настроены регулярные сжатые логические бэкапы проектов
pg_dump -Fc mydb > backup_2026-10-20.dumpна внешний носитель.
Частые вопросы
Тормозит ли ноутбук в обычных программах, если на нём установлен сервер PostgreSQL?
Вообще нет: без активных тяжёлых SQL-запросов фоновые процессы PostgreSQL потребляют менее 0,1 % процессора и несколько десятков мегабайт собственной памяти (кэш страниц освобождается или служба останавливается одной кнопкой в трее за секунду после завершения ГИС-сессии).
Почему при открытии огромной таблицы PostGIS в QGIS сам QGIS подвисает на 20 секунд при добавлении слоя?
При добавлении таблицы или SQL-представления (VIEW) QGIS по умолчанию сканирует всю таблицу, чтобы узнать тип геометрии и охват экстента! В диалоге подключения к PostGIS в QGIS обязательно поставьте галочку «Использовать расчётные метаданные таблиц (Use estimated table metadata)» — слои на 5 миллионов объектов начнут открываться на холсте мгновенно!