Сеть водопровода из ГИС

Модель водопровода из слоя труб ГИС водоканала: концы труб сшиваются, Т-примыкания разрезаются, источник ставится сам, задвижки берутся из слоя точек; модель лежит на реальных трассах.

Где найти
«Инструменты» (значок чемоданчика справа вверху) → Расчёты и диагностика → «Водопровод: расчёт сети» → «Загрузить сеть водоканала из ГИС (SHP, GeoPackage…)». То же — палитрой команд: Ctrl+K и начните набирать название.
Права
право «Справочники и шаблоны карточек» — иначе раздела в окне нет; «Проверить» и «Загрузить модель» — работающий расчётный движок водопровода.
Читаю как

Возможности

  • «Файл ГИС» — слой труб водоканала: GeoPackage, shapefile в zip, GeoJSON, FlatGeobuf, база ArcGIS в zip, KML, GML, MapInfo, SXF с классификатором. Сразу после выбора файл разбирается: формат, число объектов, тип геометрии, система координат, предупреждения.
  • Сопоставление: «Слой труб» (если линейных слоёв в файле несколько), «Слой задвижек» (точки из того же файла), «Поле диаметра», «Поле материала», «Поле номера трубы», «Поле «закрыта»» — подставляются по типичным именам полей, их можно поменять.
  • Параметры модели: «Отбор сети, л/с», «Напор источника, м», «Отметка сети, м», «Допуск сшивки, м» и что делать с несвязными частями — отбросить или дать каждой свой источник.
  • «Проверить» — собрать модель без записи: отчёт (трубы, длина, узлы, источники, связные части, разрезанные Т-примыкания, отброшенное, привязанные задвижки) и проверка, что движок EPANET модель читает.
  • «Загрузить модель» — после проверки: модель появляется в списке со своей системой координат («СК 32643»), трубы лежат на реальных трассах, задвижки из слоя точек сразу готовы для отключения.

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

Разбор. Файлы читает GDAL. Без указанного слоя берётся первый слой с объектами; у shapefile в zip — первый .shp архива (о других — предупреждение). Слой задвижек выбирается из точечных слоёв того же файла: по имени («valve», «задв», «арм», «zadv», «gate») или единственный точечный. Поля подсказываются по именам без учёта регистра и знаков: диаметр — dn, du, ду, d, diameter, диаметр…; материал — material, mat, материал…; номер — id, gid, fid, номер, код или имя на «id»; состояние — status, статус, состояние, state. Без файла .cpg атрибуты shapefile читаются в Windows-1251. Предел загрузки — 20 МБ (распакованный архив — до 200 МБ), в слое — до 50 000 объектов.

Сборка сети. Нужна система координат файла (у shapefile — .prj). Трассы переводятся в метры зоны UTM по центру сети (EPSG 326xx в северном полушарии) — она же система координат модели. Концы труб ближе «Допуска сшивки» (по умолчанию 0,5 м, до 20 м) становятся одним узлом. Конец трубы, легший на середину другой трубы в пределах допуска (Т-примыкание), режет её на две («T3-1», «T3-2»). Труба короче допуска (оба конца — один узел) отбрасывается. Трубы со значением поля «закрыта» closed, закрыта, off, 0, false, нет и т. п. попадают в модель закрытыми и связи не дают.

Части и источники. В ГИС нет насосных и водозаборов как узлов сети, поэтому источник — резервуар с напором «Отметка сети» + «Напор источника». Ставится он сам: в тупике самой крупной трубы части (ввод от водозабора или насосной), а если тупиков нет — в начале крупнейшей трубы. «Несвязные части — отбросить» — в модель идёт самая протяжённая часть со своим источником, остальные трубы отбрасываются (EPANET не считает узлы без источника). «Каждой части — свой источник» — источник получает каждая часть: так собирают сети, где зоны давления разделены насосными, нарисованными в ГИС точками.

Свойства труб и узлов. Диаметр — из поля в мм; если медиана значений меньше 5 — поле считается в метрах и переводится в мм; нет значения — 100 мм. Шероховатость Хазена — Вильямса — по материалу: сталь и чугун — 100, ВЧШГ — 130, ПЭ и ПВХ — 140, асбестоцемент и бетон — 120, нераспознанный — 110. «Отбор сети» разносится по узлам пропорционально половине длины примыкающих труб, с типовым суточным графиком (ночью 0,4 среднего, вечером до 1,5) — условно, пока нет своих данных. Отметка у всех узлов одна: давление считается над ней. Имена труб — из «Поля номера трубы», если все значения заполнены и не повторяются, иначе P1, P2…; узлы — J1, J2…, источники — R1, R2…. Модель — в л/с и метрах, сутки с шагом 1 ч.

Задвижки. Каждая точка привязывается к ближайшей трубе в пределах 5 м — у ближнего к точке конца трубы. Дальше 5 м — «без трубы рядом». Отчёт «Задвижек: N привязано» считает пары «труба — конец»: две точки у одного конца одной трубы дают одну задвижку, лишние точки отчёт называет отдельной строкой «Ещё N — повтор: на той же трубе у того же узла уже есть задвижка».

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

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

  • Слой труб линиями с системой координат; желательно — поля диаметра и материала, слой задвижек точками в том же файле (GeoPackage, база ArcGIS).
  • Раздел «Загрузить сеть водоканала из ГИС» виден при праве «Справочники и шаблоны карточек» и включённой записи на сервере (MUTATIONS_ENABLED).
  • «Проверить» и «Загрузить модель» — работающий расчётный движок водопровода: он проверяет модель. Разбор файла движок не требует.

Шаги

  1. Откройте «Инструменты» и наберите в поиске «Водопровод: расчёт сети» — пункт выделен рамкой.

    Пункт «Водопровод: расчёт сети» в панели «Инструменты»

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

    Окно «Водопровод: расчёт сети»

  3. Раскройте «Загрузить сеть водоканала из ГИС» и выберите файл: слой труб линиями, лучше — GeoPackage со слоем задвижек точками. Файл сразу разбирается: формат, число объектов, система координат; поля диаметра, материала, номера и «закрыта» и слой задвижек подставляются по именам полей. Задайте отбор сети, напор источника, отметку и допуск сшивки.

    Сеть водопровода из ГИС: шаг 3

  4. «Проверить» собирает модель без записи: трубы и их длина, узлы, источники, связные части, разрезанные Т-примыкания, отброшенные трубы, привязанные задвижки. Поменяли поле или параметр — проверьте снова.

    Сеть водопровода из ГИС: шаг 4

  5. «Загрузить модель» — модель появится в списке с системой координат зоны UTM («СК 32643») и сразу выберется; задвижки из ГИС готовы для отключения.

    Сеть водопровода из ГИС: шаг 5

Примеры

Копия Алматы, модель «net6». Учебная сеть Net6, выгруженная в GeoPackage (трубы и задвижки), загружена с «Каждой части — свой источник»: 3829 линий, 4 Т-примыкания разрезаны, 18 связных частей — 18 источников, 3833 трубы, 276,465 км, 3337 узлов; материалы — ПЭ100 (2044) и сталь (1785); отбор сети 1382 л/с. Из 4335 точек задвижек привязано 4212, «без трубы рядом» — 0, «Ещё 123 — повтор»: эти точки легли на уже занятые концы труб.

Вымышленная сеть из 9 линий (GeoPackage: слои pipes и valves, файл scripts/manual/fixtures/water-gis-synth.gpkg). Разбор: «GeoPackage · 9 объектов · LineString · EPSG:4326», предупреждение «Слоёв в файле: 2, взят «pipes»…», поля dn, material, id, status и слой valves подставлены сами. «Проверить» с настройками по умолчанию: «Труб в модели: 8 (1,353 км), узлов: 7, источников: 1. Связных частей: 2, в модели — 1; отброшено труб: 1 (не связаны с источником). Т-примыканий разрезано: 1. Нулевых труб (короче допуска сшивки): 1. Задвижек: 3 привязано, 1 без трубы рядом. Ещё 1 — повтор: на той же трубе у того же узла уже есть задвижка.» Из 5 точек задвижек одна в 50 м от труб, две — у одного конца трубы T2. После «Загрузить модель» — строка «8 / 8, СК 32643», «Задвижек в модели: 3 (из ГИС: 3)», «Рассчитать сутки» — давление 49,5…59,9 м, скорость до 1,7 м/с.

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

  • «В файле не указана система координат (.prj) — без неё трассы не перевести» — у слоя нет системы координат.
  • «В слое нет линий — нужен слой труб» — в файле нет линейного слоя: трубы должны быть линиями.
  • «В файле не указана система координат (.prj) — без неё трассы не перевести» — у слоя нет системы координат (после разбора — предупреждение «Система координат в файле не указана…»): добавьте .prj или сохраните слой с системой координат.
  • «В слое нет линий — нужен слой труб» — в файле нет линейного слоя. Если первым в GeoPackage лежит слой задвижек, окно само берёт первый линейный слой как слой труб.
  • «После сшивки концов не осталось труб — проверьте допуск» — допуск сшивки больше длины труб.
  • «Точка источника дальше 500 м от сети» — точка источника задана через API слишком далеко.
  • В отчёте «Связных частей: 40, в модели — 1; отброшено труб: …» — трассы не сходятся в пределах допуска или сеть действительно разделена: увеличьте «Допуск сшивки» (до 1–2 м) или выберите «Каждой части — свой источник».
  • «Без диаметра: N — взят диаметр по умолчанию.» — у N труб поле диаметра пустое или нулевое: им дано 100 мм.
  • «Слоя «…» в файле нет», «В загрузке нет данных ГИС: …», «Нет файла ….shx — shapefile неполный», «Загрузка больше 20 МБ», «В слое больше 50000 объектов…» — ошибки разбора; у shapefile нужны .shp, .shx, .dbf (и .prj) в одном zip.
  • Слой задвижек shapefile окно не возьмёт: из zip читается один слой. Используйте GeoPackage с двумя слоями или загрузку через API (valve_files).
  • «Файл не разобран», «Сеть не собрана», «Модель не загружена» — с текстом ответа сервера.

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

  • Чтение файлов — GDAL через pyogrio/geopandas в среде API, перевод координат — pyproj, геометрия — shapely; движок нужен только для проверки модели.
  • Отчёт сборки хранится в tgid_water_model.summary.gis_import, задвижки — в tgid_water_valve с source = 'gis'.

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

  • API (routers/water.py, логика — database/water_gis.py, чтение файла — parse_upload из database/network_import.py): POST /api/v1/water/models/gis/inspect (multipart files, layer, encoding) — слои, поля, образец, подсказки; POST /api/v1/water/models/gis (multipart files, valve_files — слой задвижек отдельным файлом, params — JSON: layer, valves_layer, diameter_field, material_field, id_field, status_field, default_diameter_mm, snap_m, total_demand_ls, elevation_m, source_head_m, source_lon, source_lat, valve_snap_m, components, encoding; name; dry_run). В окне нет полей default_diameter_mm, source_lon/source_lat, valve_snap_m, encoding и отдельного файла задвижек — они доступны через API.
  • Веб: components/WaterGisImport.vue (раздел окна WaterDialog.vue), utils/water.ts (gisLayers, gisReportLines), запросы — services/api/water.ts (inspectWaterGis, importWaterGis).
  • Тесты: API — tests/test_water_gis.py; веб — tests/utils/water.spec.ts («сеть из ГИС»); e2e — e2e/functions/water.spec.ts («сеть из ГИС: разбор, проверка и загрузка…» на scripts/manual/fixtures/water-gis-synth.gpkg).
Хотите увидеть эту функцию на своих данных?Покажем ТГИД на демонстрации и ответим на вопросы инженеров.
Запросить демо