Фрагменты: экспорт, импорт, слияние

Фрагменты .tgid десктопа: выгрузить фрагмент, загрузить с проверкой, слить несколько фрагментов в один.

Где найти
«Инструменты» (значок чемоданчика справа вверху) → Исходные данные → «Фрагменты: экспорт, импорт, слияние». То же — палитрой команд: Ctrl+K и начните набирать название.
Права
право «Импорт сети» — иначе пункт в меню не виден.
Читаю как

Возможности

  • «Экспорт» — выбрать фрагмент и «Скачать .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 МБ.

Шаги

  1. Откройте «Инструменты» и наберите в поиске «Фрагменты: экспорт, импорт, слияние» — пункт выделен рамкой.

    Пункт «Фрагменты: экспорт, импорт, слияние» в панели «Инструменты»

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

    Окно «Фрагменты: экспорт, импорт, слияние»

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

    Фрагменты: экспорт, импорт, слияние: шаг 3

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

    Фрагменты: экспорт, импорт, слияние: шаг 4

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

    Фрагменты: экспорт, импорт, слияние: шаг 5

Примеры

Копия Алматы: экспорт и импорт маленького фрагмента. «СВЭР Толстого,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 (multipart file, name, dry_run, source_srid), POST /api/v1/fragments/merge (fragment_ids 2–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).
Хотите увидеть эту функцию на своих данных?Покажем ТГИД на демонстрации и ответим на вопросы инженеров.
Запросить демо