Фрагменты: экспорт, импорт, слияние
Фрагменты .tgid десктопа: выгрузить фрагмент, загрузить с проверкой, слить несколько фрагментов в один.
Возможности
- «Экспорт» — выбрать фрагмент и «Скачать .tgid»: файл того же формата, что «Экспорт фрагмента» десктопа.
- «Импорт» — «Файл .tgid» (
.tgid,.zipили самtgid.txt), «Название нового фрагмента (необязательно)», «Система координат файла, EPSG» для слоя не в местной системе города. «Проверить» — отчёт без записи, «Импортировать» — запись новым фрагментом. - «Слияние» — «Фрагменты (два и более, первый — основной)», «Название объединённого фрагмента», «Свести коды с одинаковым названием в один (в десктопе не делается)»; «Проверить» и «Объединить».
- «Из ZuluGIS» — «Файлы слоя Zulu или zip», «Проверить слой» (объекты слоя по типам, кнопка показа на карте), «Название фрагмента», «Расчётная Tнв для отопления, °C», «Проекция слоя, EPSG»; «Конвертировать» — готовый фрагмент сразу подставляется на вкладку «Импорт» и проверяется.
- Отчёт: созданные узлы и участки, геометрия, район, куда ляжет сеть, строки по таблицам, обнулённые ссылки, совпадающие коды, узлы в одинаковых координатах. После записи — «Отменить операцию».
Как это работает
Формат. .tgid — zip с одним файлом tgid.txt: заголовок с версией и кодировкой, затем секции таблиц в CSV. Таблицы и порядок — как у десктопа: фрагмент, коды расчётной схемы, справочники фрагмента (расчётные температуры, удельные расходы, Kv, графики ГВС), узлы, участки, направления, потребители, источники, оборудование, паспорта труб — всего 46 таблиц. В выгрузку попадают действующие объекты фрагмента и строки, связанные с его узлами и участками. Геометрия, служебные поля и пометка «снят» не выгружаются: координаты узлов идут полями x/y, изломы участков — полем coords.
Импорт. Все строки получают новые номера, ссылки внутри файла перенумеровываются, ссылка на объект вне файла обнуляется — отчёт показывает «Ссылки на объекты вне файла обнулены: …». Геометрия восстанавливается сразу: узел — по x/y в местной системе города, участок — по узлам и изломам; с указанным EPSG — пересчитывается в систему города. В отчёте «Сеть ляжет: …» — проверьте, что это ваш город. Загруженный файл и существующие фрагменты не меняются.
Слияние. Каждый выбранный фрагмент копируется, копии сводятся в первую, она получает название объединённого фрагмента (к названию добавляются дата и время). Исходные фрагменты остаются. Совпадающие названия кодов расчётной схемы отчёт перечисляет; с флажком «Свести коды…» ссылки переводятся на первый код, дубли удаляются. Стыки фрагментов не сливаются, как в десктопе, — отчёт называет число узлов в одинаковых координатах.
Из ZuluGIS. Слой проверяется на сервере, затем конвертер десктопа ТГИД переводит его во фрагмент фоновой задачей; готовый файл импортируется обычным порядком.
Проверка и запись. И «Проверить», и запись выполняют импорт или слияние целиком в одной транзакции; проверка затем откатывается, поэтому номер фрагмента в отчёте проверки условный. Запись — одна операция журнала отмены топологии и запись в audit_log. «Отменить операцию» удаляет все созданные строки вместе с фрагментом, пока их не правили и это последняя операция пользователя.
Что нужно для работы
- «Экспорт» сервер отдаёт любому вошедшему, но само окно открывается из «Инструментов» только с правом «Импорт сети».
- Пункт в «Инструментах», «Проверить» на вкладках «Импорт», «Слияние», «Из ZuluGIS» — общее право «Импорт сети» и «Участки: Создание», включённая запись топологии на сервере (
TOPOLOGY_MUTATIONS_ENABLED=true,MUTATIONS_ENABLED=true). - «Импортировать» и «Объединить» — права «Перемещение и изломы» и «Удаление» с охватом «все» для участков и узлов.
- «Из ZuluGIS» — служба фоновых задач (Celery-воркер с очередью файловых задач); время конвертации ограничено
ZULU_TIMEOUT_S(по умолчанию 30 минут). - Размеры: файл
.tgid— до 100 МБ, загрузка слоя Zulu — до 200 МБ.
Шаги
Откройте «Инструменты» и наберите в поиске «Фрагменты: экспорт, импорт, слияние» — пункт выделен рамкой.

Нажмите пункт — откроется окно.

«Импорт» — выберите файл .tgid и нажмите «Проверить»: отчёт без записи покажет, сколько узлов и участков будет создано, сколько строк в каждой таблице и куда ляжет сеть. «Импортировать» создаёт новый фрагмент с новыми номерами объектов; загруженный файл и существующие фрагменты не меняются. Сразу после импорта его отменяет «Отменить операцию».

«Слияние» — объединить выбранные фрагменты в один новый, как в десктопе; исходные фрагменты остаются.

«Из ZuluGIS» — слой тепловой сети ZuluGIS (все файлы папки слоя или zip): конвертер переводит его в .tgid, готовый фрагмент импортируется на вкладке «Импорт». Импорт и слияние отменяются кнопкой «Отменить операцию» в этом окне сразу после записи или «Отменить» редактора топологии, пока это последняя операция.

Примеры
Копия Алматы: экспорт и импорт маленького фрагмента. «СВЭР Толстого,6б» (42) выгрузился файлом 9 КБ. В выгрузке: узлов 14, участков 10 (девять участков фрагмента и один участок без фрагмента между его узлами), паспортов труб 10, направлений 20, потребителей 2 реальных и 2 обобщённых, источников 3, графиков температур 30. «Проверить»: «Проверка (ничего не записано): … узлов 14, участков 10», геометрия у всех 14 узлов и 10 участков, сеть ляжет в 76,95–77,00 в. д., 43,34–43,38 с. ш. — это Алматы. Импорт записал фрагмент с теми же числами строк; «Отменить операцию» удалил его вместе со всеми 99 строками.
Та же копия: проверка слияния. Фрагменты 42 и «СВЭР ТП Алтай» (43): «Проверить» — узлов 124 (14 + 110), участков 121, кодов расчётной схемы 3; название получилось «… 2026_11_06 15:20:50». В базе ничего не появилось.
Если не получается
- Кнопки «Проверить» и «Импортировать» неактивны, сверху пояснение «Импорт — редактор топологии…» — нет права на правку топологии или на сервере выключена запись топологии.
- «Файл больше 100 МБ», «Загрузка больше 200 МБ» — разбейте фрагмент или слой.
- «Применение — права «Перемещение» и «Удаление» всех участков и узлов» — проверить можно, записать — нет; запись делает пользователь с охватом «все».
- «Ссылки на объекты вне файла обнулены: …» — в файле есть ссылки на объекты, которых нет в выгрузке (например, на чужой код); проверьте эти поля после импорта.
- «Сеть ляжет: …» показывает чужой район — у файла другая система координат: укажите её в «Система координат файла, EPSG» и проверьте снова.
- «Совпадающие коды: …» при слиянии — отметьте «Свести коды с одинаковым названием в один», если это один и тот же код.
- «В базах слоя ещё N строк без объектов на карте — записи удалённых объектов, они не переносятся.» — это не ошибка.
- «Конвертация не удалась», «Конвертация не уложилась в … мин (ZULU_TIMEOUT_S)» — см. текст ответа; при таймауте администратор увеличивает
ZULU_TIMEOUT_S. - «Отменить операцию» отвечает ошибкой — после импорта была другая операция топологии или объекты фрагмента правили; отменяйте по порядку в «Истории правок».
Для администратора
- Флаги:
MUTATIONS_ENABLED,TOPOLOGY_MUTATIONS_ENABLED; для ZuluGIS —ZULU_TIMEOUT_Sи очередь файловых задачFILE_JOBS_QUEUE(по умолчанию — очередь города), нужен запущенный Celery-воркер. - Импорт и слияние пишут журнал отмены топологии
topology_undo_logиaudit_log, после записи сбрасывается кеш топологии. - Секцию справочников (Lookups) веб в
.tgidне пишет: десктоп её пишет, но при импорте не читает.
Для разработчика
- API (
routers/fragment_transfer.py,database/fragment_transfer.py):GET /api/v1/fragments/{fileid}/export(zip, заголовокX-Fragment-Rows),GET /api/v1/fragments/{fileid}/summary(строки по таблицам),POST /api/v1/fragments/import(multipartfile,name,dry_run,source_srid),POST /api/v1/fragments/merge(fragment_ids2–20,name,unify_external_codes,dry_run). ZuluGIS —routers/zulu_import.py,database/zulu_import.py, конвертерzulu_converter/:POST /api/v1/zulu/upload,POST /api/v1/zulu/convert→ задачаzulu_convert, статус и файл —GET /api/v1/file-jobs/{task_id}и…/download. Отмена —POST /api/v1/topology/undo. - Веб:
components/FragmentTransferDialog.vue,utils/zuluImport.ts, запросы —services/api/fragments.ts,services/api/zulu.ts. - Тесты: API —
tests/test_fragment_transfer.py,tests/test_export_fragment_rule.py,tests/test_zulu_import.py; веб —tests/utils/zuluImport.spec.ts; e2e —e2e/functions/source-data.spec.ts(«Фрагменты .tgid»: экспорт файлом, проверка и импорт новым фрагментом, отмена; dry-run слияния 42 + 43 со сверкой через API).
