Меню «Выгрузка»

Сеть выбранного или включённых на карте фрагментов файлом ГИС (GeoPackage, FlatGeobuf, SHP, DXF, GeoJSON) и ведомости Excel: участки, задвижки, байпасы, насосные агрегаты, потребители, технические условия.

Где найти
шапка приложения → «Выгрузка».
Функция показана в сквозном сценарии:Отчёты и выгрузки
Читаю как

Возможности

  • Меню «Выгрузка» в шапке; на экране уже 960 px — в выдвижном меню. Две группы пунктов. Меню видно только с правом «Выгрузки и отчёты».
  • «Геоданные»: «GeoPackage (узлы и участки)», «FlatGeobuf (узлы и участки, zip)», «SHP (узлы и участки, zip)», «DXF (линии участков)», «GeoJSON (геометрия и паспорт)», «GeoJSON с атрибутами (L, D, K_E)».
  • «Ведомости Excel»: «Участки теплопроводов», «Задвижки», «Байпасы», «Насосные агрегаты», «Потребители», «Технические условия».
  • Выгрузка идёт по фрагментам карты: по выбранному фрагменту, а если он не выбран — по всем включённым. Ведомость без фрагментов выгружается по всей сети.
  • После выгрузки — уведомление с форматом или названием ведомости и номерами фрагментов; если упёрлись в предел объектов или строк — предупреждение.

Как это работает

Какие фрагменты. Берётся выбранный фрагмент; если его нет — все фрагменты, включённые на карте. Геоданные без фрагментов не выгружаются: «Выберите фрагмент на карте перед экспортом GeoPackage». Ведомость без фрагментов строится по всей сети. Пока идёт любая выгрузка — геоданных или ведомости, — пункты меню неактивны, а повторное нажатие даёт «Выгрузка уже идёт — дождитесь её окончания».

Какие объекты. Участок входит, если он сам числится во фрагменте и не удалён. В геоданные попадают только участки с геометрией. Узлы — свои узлы фрагмента и концы его участков, даже если они числятся в другом фрагменте. Координаты во всех файлах геоданных — WGS 84 (долгота, широта в градусах), включая DXF.

Геоданные. Предел — 50 000 участков и 50 000 узлов; при обрезке: «GeoPackage: выгрузка неполная — достигнут предел 50 000 объектов. Выберите меньше фрагментов, чтобы выгрузить сеть полностью.»

Пункт Файл Содержимое
GeoPackage network_export_f74.gpkg (несколько фрагментов — _frag) слои nodes (точки: id, fileid, name) и lines (линии: id, nodeid1, nodeid2, externalsignlineid, fileid, diameter, length)
FlatGeobuf network_export_f74.zip nodes.fgb и lines.fgb с теми же полями
SHP network_export_f74.zip nodes и lines в наборах .shp, .shx, .dbf, .prj, .cpg (кодировка UTF-8); имя поля признака урезано до externalsi
DXF network_f74.dxf только линии участков: полилинии в слое HEATNET, формат R2010, без атрибутов
GeoJSON network_f74.geojson участки: id, name (учётный номер), fileid, nodeid1, nodeid2, length, diameter, roughness
GeoJSON с атрибутами network_attrs_f74.geojson участки: Sys (id), Type = 1, Name (учётный номер или «Участок N»), Fragment, Node1, Node2, L, D, K_E, Kst = 1,0

Поля паспорта берутся из участков трубопровода (heatpipesections), но по-разному:

  • GeoPackage, FlatGeobuf, SHP: diameter — условный диаметр Ду, мм; length — длина, м; берётся самый длинный участок паспорта.
  • GeoJSON: diameter — внутренний диаметр, мм; length — м; roughness — эквивалентная шероховатость, мм; берётся первый участок паспорта.
  • GeoJSON с атрибутами: L — м, D — внутренний диаметр в метрах, K_E — шероховатость, мм. Это обычный GeoJSON с короткими именами полей для загрузки в ZuluGIS или QGIS, а не формат ZuluGIS.

Без паспорта поля пустые (null). externalsignlineid — признак трубопровода десктопа: 2 — подающий, 3 — обратный. DXF строится фоновой задачей; ход виден под пунктом меню, в начале — «DXF: формирование файла, это может занять до минуты…».

Ведомости Excel. Книги собираются сервером по колонкам шаблонов десктопа (G_UT, G_ZD и другие). Задвижки, байпасы и насосы отбираются по фрагменту своего участка, потребители — по фрагменту узла. Листы результатов берут последний расчёт каждого фрагмента; если расчёта нет — остаются с шапкой, а на листе «Примечание» написано «Лист «Гидравлика»: результатов расчёта нет (расчёт не выполнен) — лист содержит только шапку.» Там же — «Отбор по фрагментам: 74.»

Пункт Листы (колонок)
Участки теплопроводов «Участки теплопроводов» (24), «Гидравлика» (24)
Задвижки «Задвижки» (19), «Все» (22)
Байпасы «Байпасы» (10: ID, участок, наименование, узел подключения, состояние, трубопровод, длина, внутренний диаметр, заданные расход и напор)
Насосные агрегаты «Насосные агрегаты» (24), «Насосы (расчёт)» (25)
Потребители «Потребители реальные» (35), «Потребители обобщённые» (35), «Расч.Нагрузки» (24), «Гидравлика» (22), «Тепло» (30), «ТеплоГидравл.» (37), «Отключенные» (17)
Технические условия «Технические условия» (9: ID, номер, дата, организация, объект, адрес, источник, район, состояние)
  • Технические условия к фрагментам не привязаны: выгружается весь реестр с пометкой «Ведомость «Технические условия» не привязана к фрагментам сети: выгружены все записи (выбранные фрагменты 74 не применяются).»
  • Предел строк: по фрагментам — до предела листа Excel (1 048 575 строк), по всей сети — 200 000. Если строк больше, на листе «Примечание» — «Ведомость неполная: выгружено N строк из M», в уведомлении — «Ведомость неполная: выгружено N из M строк.» и совет выбрать фрагмент или сузить выбор.
  • Имя файла — report_ut_f74.xlsx, по нескольким фрагментам — report_ut_frag.xlsx, по всей сети — report_ut.xlsx.
  • Пока ведомость строится, пункты меню неактивны; после скачивания — уведомление с названием ведомости: «Ведомость «Участки теплопроводов» (фрагменты: 74) скачана», по всей сети — «(вся сеть)».
  • В ведомости «Технические условия» колонки «Дата», «Организация», «Источник» и «Район» заполняются из реестра ТУ: дата выдачи, заявитель, источник тепла и район. Имена заявителей-людей в Excel не маскируются.

Чем отличается от окна «Отчёты Excel». Там отчёты десктопа строятся по одному фрагменту и выбранному расчёту по правилу десктопа, а сводные ведомости — всегда по всей сети. Здесь ведомости идут по фрагментам карты, а результаты — последнего расчёта.

Что нужно для работы

  • Право «Выгрузки и отчёты»: без него меню «Выгрузка» в шапке нет. Сервер это право для файлов выгрузки не проверяет — ограничение только в интерфейсе.
  • Для геоданных — выбранный или включённый на карте фрагмент; для листов результатов — расчёт фрагмента.
  • DXF — модуль ezdxf на сервере API и у воркера (в requirements.txt есть); без него — ошибка 503 с пояснением.
  • Фоновая выгрузка DXF и ведомостей — Redis и воркер; без них файл строится прямым запросом.

Шаги

  1. Нажмите «Выгрузка» в шапке — откроется меню с группами «Геоданные» и «Ведомости Excel».

    Меню «Выгрузка»: шаг 1

  2. Выберите формат или ведомость — файл скачается, уведомление назовёт ведомость и фрагменты. Без выбранного фрагмента геоданные берут включённые на карте фрагменты, ведомость Excel — всю сеть.

    Меню «Выгрузка»: шаг 2

Примеры

Копия Алматы, фрагмент 74, GeoPackage. Файл network_export_f74.gpkg, 1,2 МБ: 3821 участок и 3771 узел (2028 узлов фрагмента 74 и 1743 узла фрагмента 99 — концы его участков). Ду — от 40 до 1400 мм, чаще всего 500 мм (595 участков); суммарная длина — 394 826,6 м; у 151 участка нет паспорта — Ду и длина пустые. Признак: 3515 участков — 1, 172 — подающие, 134 — обратные. FlatGeobuf и SHP того же фрагмента содержат те же 3821 и 3771 объект, GeoJSON и «GeoJSON с атрибутами» — те же 3821 участок; учётных номеров у участков нет, поэтому Name везде «Участок N». DXF того же фрагмента — network_f74.dxf, около 0,9 МБ, формат R2010: 3821 полилиния в слое HEATNET, по одной на участок.

Тот же фрагмент, ведомость «Участки теплопроводов». report_ut_f74.xlsx: 4018 строк — на 197 больше, чем в геоданных: у этих участков нет геометрии. Лист «Гидравлика» — только шапка: на копии у фрагмента нет расчётов. Остальные ведомости фрагмента 74: задвижки — 70, байпасы — 0 (на всей копии байпасов нет), насосные агрегаты — 82, потребители — 6 реальных и 1031 обобщённый, технические условия — весь реестр, 4775.

Вся сеть. Если на карте не выбран и не включён ни один фрагмент, ведомость «Насосные агрегаты» на копии Алматы содержит 332 строки, «Задвижки» — 12 211.

Если не получается

  • Выберите фрагмент на карте перед экспортом GeoPackage
  • Выгрузка уже идёт — дождитесь её окончания
  • GeoPackage: выгрузка неполная — достигнут предел 50 000 объектов. Выберите меньше фрагментов, чтобы выгрузить сеть полностью.
  • Ошибка экспорта GeoPackage: Нечего выгружать: нет объектов с координатами
  • Ошибка скачивания ведомости
  • «Выберите фрагмент на карте перед экспортом GeoPackage» (DXF, GeoJSON…) — не выбран и не включён ни один фрагмент.
  • «Ошибка экспорта GeoPackage: Нечего выгружать: нет объектов с координатами» — у участков и узлов фрагмента нет геометрии.
  • «Ошибка экспорта DXF: Выгрузка DXF недоступна: на сервере API не установлен модуль ezdxf — обратитесь к администратору» — на сервере нет модуля DXF.
  • «Выгрузка уже идёт — дождитесь её окончания» — предыдущая выгрузка ещё не закончилась.
  • Нет меню «Выгрузка» — у роли нет права «Выгрузки и отчёты».
  • «Ошибка экспорта ‹формат›: Не удалось выгрузить сеть в ‹формат›» — сбой записи файла на сервере.
  • «Ошибка скачивания ведомости» с текстом сервера — ведомость не построилась.
  • Под пунктом DXF — «Формирование файла на сервере (синхронно)…» — фоновый воркер не взял задачу, файл строится прямым запросом; дождитесь его.

Для администратора

  • DXF: пакет ezdxf в окружении API и воркера.
  • Фоновые файлы: REDIS_ADDR, REDIS_DB, REDIS_PASSWORD, FILE_JOBS_QUEUE, FILE_JOBS_TTL, FILE_STORAGE.
  • Право «Выгрузки и отчёты» (export) скрывает меню только в вебе. Адреса /api/export/network, /shp, /dxf, /geojson*, /api/reports/excel/* и фоновые задачи файлов сервер отдаёт любому вошедшему.
  • Выгрузки не маскируют персональные данные: маскирование работает только для ответов JSON.

Для разработчика

  • Геоданные: GET /api/export/network?format=gpkg|fgb|shp&fragments=&limit= (routers/reports.py, database/export_shp.py, database/vector_export.py), GET /api/export/dxf (routers/exports_p4.py, database/network_export.py), GET /api/export/geojson и GET /api/export/geojson-attrs (старый адрес /api/export/zulugis), прежний SHP — GET /api/export/shp. Заголовки полноты — X-Export-Rows, X-Export-Limit, X-Export-Truncated.
  • Ведомости: GET /api/reports/excel/{doc_type}?fragments=&year= (reports_generator.py, EXCEL_SHEETS, MAX_NETWORK_REPORT_ROWS, EXCEL_MAX_DATA_ROWS); заголовки X-Report-Rows, X-Report-Total, X-Report-Truncated, X-Report-Fragments. Фоновые задачи — POST /api/v1/file-jobs (network_dxf, report_excel).
  • Веб: пункты меню — utils/headerMenu.ts (buildHeaderMenu, NETWORK_FILE_FORMATS; меню — только с правом export), блокировка на время выгрузки — exportBusy, isChildBusy в layouts/default.vue, действия — layouts/default.vue (resolveExportFragmentIds, downloadNetworkFile, downloadDxf, downloadGeoJson, downloadExcel), запросы — services/api/reports.ts, разбор заголовков — services/api/http.ts; строки — headerMenu.*, shell.export*, shell.excel*, net.exportTruncated, net.reportTruncated.
  • Тесты: веб — tests/utils/headerMenu.spec.ts, tests/services/networkExport.spec.ts, tests/services/fileJobs.spec.ts; API — tests/test_vector_export.py, tests/test_network_export.py, tests/test_export_fragment_rule.py, tests/test_export_web_schema.py, tests/test_reports_router.py; e2e — блок «Выгрузки» в e2e/functions/equipment-registries.spec.ts.
Хотите увидеть эту функцию на своих данных?Покажем ТГИД на демонстрации и ответим на вопросы инженеров.
Запросить демо