Импорт SHP / Excel / координат
Импорт узлов и участков из SHP или Excel и координат узлов: сопоставление полей, превью, отмена импорта.
Возможности
- Три режима: «Узлы» (точки → новые узлы фрагмента), «Участки» (линии → новые участки), «Координаты узлов» (перенос существующих узлов).
- Источники: файл ГИС (shapefile в zip или набором файлов, GeoPackage, GeoJSON и ESRI JSON, FlatGeobuf, SXF+RSC, GML, KML, MapInfo, база ArcGIS
*.gdbв zip), таблица.xlsxили.csv; для участков ещё треки.gpxи линии.dxf. - «Разобрать файл» — колонки, число строк, система координат файла, образец значений; у многолистовой книги — выбор «Лист», у многослойного файла ГИС — «Слой файла», у DXF — «Слои DXF (пусто — все)».
- Сопоставление полей: колонки предлагаются сами по названиям, любую можно сменить или выбрать «— не импортировать —»; обязательные поля отмечены звёздочкой, справа — пример значений из файла.
- Параметры: фрагмент; система координат («Из файла», «WGS84: долгота / широта», «Местная система (SRID 9998), м», «Координаты десктопа (x/y узлов, см)»); для участков — «Допуск привязки концов, м» (до 50 м); для координат — «Узел в файле — это» (код или номер), «Пересчитать длины участков по геометрии», «Построить геометрию участков без линии».
- «Проверить (dry-run)» — отчёт без записи: что будет создано или перенесено, ошибки по строкам. «Пропустить строки с ошибками» — применить без них.
- «Применить» и «Отменить импорт» — запись одной операцией и её отмена.
Как это работает
Разбор. Файл ГИС читает GDAL: система координат берётся из файла, у shapefile без .prj её нужно указать. Таблица Excel/CSV — первая строка заголовков, CSV в UTF-8 или Windows-1251. Если в колонках X/Y градусы, окно само выбирает WGS84. Не больше 5000 строк и 20 МБ за загрузку; zip распаковывается не больше чем в 200 МБ.
Узлы. Каждая строка — новый узел выбранного фрагмента в таблице nodes: код (externalnodename), наименование, рег. номер, отметка земли. Код расчётной схемы и признак нового узла — от ближайшего узла фрагмента, как при создании узла в редакторе.
Участки. Каждая линия — новый участок (linesobj) с паспортом трубы (heatpipesections) по образцу участка фрагмента; Ду и длина — из полей файла, если они сопоставлены. Концы линии привязываются к узлу фрагмента в пределах допуска, иначе создаются новые узлы; узлы, созданные этим же импортом, тоже находятся. Мультилинии нужно разбить заранее.
Координаты. Строка «код или номер узла → X, Y» переносит узел так же, как перенос в редакторе: концы участков идут за узлом, длины паспорта пересчитываются по геометрии. Поиск по коду ограничен выбранным фрагментом.
Проверка и запись. И проверка, и запись выполняют импорт целиком в одной транзакции; проверка затем откатывается — поэтому номера в отчёте проверки условные. Строка с ошибкой не ломает остальные. При записи строки с ошибками останавливают импорт, если не отмечено «Пропустить строки с ошибками». Записанный импорт — одна операция журнала отмены топологии (IMPORT_NODES, IMPORT_LINES или IMPORT_COORDS) и записи в audit_log; «Отменить импорт» удаляет созданное или возвращает прежние координаты. В отчёте — не больше 500 действий.
Ограничение. Проверка не сравнивает точки с районом сети: если выбрать неверную систему координат, узлы окажутся далеко от города, а отчёт покажет «Будет: узлов создано: …» без предупреждения. Смотрите на карту сразу после записи.
Что нужно для работы
- Пункт в «Инструментах» и разбор файла — общее право «Импорт сети» и право «Участки: Создание».
- Проверка (dry-run) — ещё и включённая запись топологии на сервере (
TOPOLOGY_MUTATIONS_ENABLED=true,MUTATIONS_ENABLED=true): проверка тоже пишет, хоть и откатывает. - «Применить» — роль «Администратор» (сервер проверяет роль, а не матрицу прав). Окно предупреждает: «Разбор и превью — редактору при включённых правках топологии на сервере; применение — только администратору».
- Отмена — пользователем, который сделал импорт, пока это его последняя операция топологии.
Шаги
Откройте «Инструменты» и наберите в поиске «Импорт SHP / Excel / координат» — пункт выделен рамкой.

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

Выберите, что импортировать («Узлы», «Участки» или «Координаты узлов»), укажите файл и нажмите «Разобрать файл». Ниже появятся параметры и таблица сопоставления полей. Выберите фрагмент, куда добавлять объекты, и систему координат файла; проверьте, что каждой колонке файла соответствует нужное поле.

Нажмите «Проверить (dry-run)». База не меняется: в отчёте видно, сколько объектов будет создано и какие строки с ошибками. Если всё верно — нажмите «Применить»; ошибочные строки можно пропустить флажком «Пропустить строки с ошибками».

Примеры
Учебный файл узлов. Файл import-nodes.csv из комплекта инструкции: три вымышленные точки «УЧ-1», «УЧ-2», «УЧ-3» с колонками code, name, x, y, elevation. «Разобрать файл»: «Таблица, строк: 3», сопоставление подставилось само (X ← x, Y ← y, код ← code, наименование ← name, отметка ← elevation), система — «WGS84: долгота / широта». «Проверить (dry-run)»: «Будет: узлов создано: 3 (строк: 3)», строки отчёта начинаются со «стр. 2» — первая строка файла занята заголовками.
Копия Алматы: запись и отмена. В учебный фрагмент — копию фрагмента 42 (14 узлов) — импорт записал три узла: в фрагменте стало 17 узлов, узел «УЧ-1» лёг в точку 76,9205; 43,2405. «Отменить импорт» удалил три узла, во фрагменте снова 14.
Если не получается
- Кнопка «Проверить» неактивна — не выбран фрагмент или не сопоставлено обязательное поле (они отмечены звёздочкой, список — под кнопкой).
- Объекты легли не туда — неверная система координат: «Отменить импорт», выберите систему в списке «Система координат» и проверьте снова. Проверка (dry-run) не сравнивает точки с районом сети — смотрите на карту после записи.
- Кнопка «Применить» неактивна — нет права на правку топологии, после проверки поменялись параметры (проверьте ещё раз), в отчёте есть ошибки без флажка «Пропустить строки с ошибками» или нет ни одной годной строки. Записать импорт может только администратор: иначе сервер отвечает «Применение импорта — роль admin (правка топологии)».
- Импорт сделан по ошибке — нажмите «Отменить импорт» в этом же окне.
- «Укажите фрагмент (fileid)» — фрагмент не выбран (для режимов «Узлы», «Участки» и координат по коду).
- «В файле больше 5000 строк — разбейте импорт на части», «Загрузка больше 20 МБ», «Архив распаковывается больше чем в 200 МБ» — слишком большой файл.
- «Не удалось определить кодировку CSV (ожидается UTF-8 или Windows-1251)», «Формат .xls (Excel 97–2003) не поддерживается — сохраните файл как .xlsx или CSV», «Нет файла … — shapefile неполный» — сохраните файл заново или добавьте недостающие части shapefile.
- «В … нет системы координат: укажите её (WGS84, местная или десктоп)» — выберите систему в списке «Система координат».
- «… — трассы участков: выберите режим «Участки»» — GPX и DXF бывают только трассами.
- Ошибки строк в отчёте: «… — не число», «долгота/широта вне диапазона WGS84», «нет геометрии», «мультилиния из … частей — разбейте на участки», «диаметр вне 0…2000 мм».
- «Применение импорта — роль admin (правка топологии)» — запись разрешена только администратору.
- «Отмена не выполнена: …» — после импорта были другие операции топологии этого пользователя или объекты правили; отмените их по порядку в «Истории правок».
Для администратора
- Флаги:
MUTATIONS_ENABLED,TOPOLOGY_MUTATIONS_ENABLED. Без них недоступны и проверка, и запись. - Импорт пишет журнал отмены топологии и
audit_log, после записи сбрасывается кеш моделирования отключений. Чтение файлов ГИС — через GDAL (pyogrio) на сервере API. - Кнопка «Сопоставить ИИ» в окне видна только при включённом помощнике ИИ.
Для разработчика
- API (
routers/network_import.py,database/network_import.py, трассы GPX/DXF —database/survey_formats.py):POST /api/v1/import/inspect(multipart:files,mode,encoding,sheet,layer) иPOST /api/v1/import/run(files,params— JSONmode, fileid, source_crs, mapping, match_by, snap_tolerance_m, recalc_lengths, build_missing_lines, skip_errors, sheet, layer, layers;dry_run). Ошибки строк при записи безskip_errors— 422row_errorsс отчётом. Отмена —POST /api/v1/topology/undo(operation_id). - Веб:
components/NetworkImportDialog.vue,utils/networkImport.ts, запросы —services/api/reports.ts(inspectNetworkImport,runNetworkImport). - Тесты: API —
tests/test_network_import.py,tests/test_network_import_gdal.py,tests/test_survey_import.py; веб —tests/utils/networkImport.spec.ts; e2e —e2e/functions/source-data.spec.ts(«Импорт сети из файла»: разборimport-nodes.csv, dry-run, запись в учебный фрагмент, отмена, сверка числа узлов через API).
