Меню «Выгрузка»
Сеть выбранного или включённых на карте фрагментов файлом ГИС (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 и воркер; без них файл строится прямым запросом.
Шаги
Нажмите «Выгрузка» в шапке — откроется меню с группами «Геоданные» и «Ведомости Excel».

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

Примеры
Копия Алматы, фрагмент 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.
