Выборка по условиям

Выборка участков и узлов по условиям: паспорт, режим, износ, расстояние «в N м от узла». Вопрос словами разбирает помощник ИИ.

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

Возможности

  • Выборка участков или узлов по условиям на поля паспорта, расчёта и износа: до 8 условий, «Все условия» (и) или «Любое» (или).
  • «Рядом с узлом»: только объекты в N м от узла (по имени или коду), от 1 до 5000 м, по умолчанию 200 м; список тогда идёт от ближнего к дальнему.
  • «Рядом с социальными объектами»: школы, детские сады, больницы, поликлиники, соцучреждения — все или выбранные; рядом с названием — сколько их загружено.
  • «В видимой области карты» и выбор фрагментов: «На карте (N)», «Все фрагменты».
  • «Порядок» по любому числовому полю, по убыванию или возрастанию, и «Не больше» — предел строк (до 5000, по умолчанию 1000).
  • Запрос словами над списком: что именно выбрал сервер. Найденное — на карте, «Оставить на карте» и «Снять с карты».
  • «Скачать»: CSV для Excel, GeoPackage, FlatGeobuf или Shapefile (zip) — с геометрией, для QGIS и ArcGIS.
  • «Спросите словами»: помощник ИИ переводит вопрос в те же условия, сервер проверяет и выполняет их (если ИИ включён).

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

Окно собирает запрос из полей и отправляет его серверу. Поля, операции и значения справочников сервер берёт только из своего списка — произвольный SQL передать нельзя. Значения подставляются параметрами, запрос ограничен 20 секундами.

Поля участков и откуда они берутся:

Поле Источник
Условный диаметр, Год прокладки (перекладки), Тип прокладки, Длина по паспорту, Глубина заложения, Число повреждений паспорт участка; если паспортов у участка несколько — самый длинный
Располагаемый напор и Напор подачи в конце участка, Скорость воды, Удельные потери напора, Расход сетевой воды последний расчёт каждого фрагмента, строки подающего трубопровода
Износ, % последний расчёт износа (окно «Износ и план ремонтов»)
Нормативные теплопотери (среднегодовые) последний расчёт нормативных теплопотерь

Год прокладки — год перекладки, если он есть, иначе год первой прокладки. Число повреждений — поле паспорта, а не журнал нарушений.

Поля узлов: «Тип узла (карточка)» — потребитель, обобщённый потребитель, источник тепла, насосная станция или простой узел; «Вид узла» — справочник (камера, павильон, ввод…); «Имя узла» — содержит или равно; «Нагрузка потребителя» — сумма расчётных нагрузок всех потребителей узла, Гкал/ч. Узлы внутренних схем в выборку не попадают.

Рядом с узлом. Узел ищется по части имени: сначала точное совпадение, затем узел из выбранных фрагментов, затем самое короткое имя. Расстояние — геодезическое, в метрах, до ближайшей точки участка. При включённом «Рядом с узлом» фрагменты переключаются на «Все фрагменты»: узел может лежать в другом фрагменте. Центр и радиус рисуются на карте окружностью.

Фрагмент участка — номер фрагмента, записанный у самого участка. На копиях баз, где одна магистраль лежит в нескольких фрагментах, одна труба может найтись дважды, а «Все фрагменты» дают дубли.

Результат. Над списком — «Найдено: N», при пределе — «(показано K)», у участков — суммарная длина по паспорту всех найденных, а не только показанных. В окне — первые 200 строк; на карте и в выгрузке — все в пределах «Не больше». CSV собирается в браузере из найденного, файлы ГИС — сервер повторяет запрос и пишет геометрию.

Вопрос словами. Модель получает список полей и вопрос и возвращает условия конструктора — SQL она не пишет. Если фрагменты в вопросе не названы, берутся фрагменты на карте; при «рядом с узлом» — все. Без расстояния — 200 м. Конструктор заполняется условиями модели — их можно поправить и нажать «Выбрать». Если модель не уверена, к пояснению добавляется «проверьте условия».

Выборка ничего не сохраняет. Сервер выполняет одновременно не больше 4 выборок, у одного пользователя — не больше 2.

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

  • Вход с любой ролью, включая «Просмотр».
  • Условия по режиму — гидравлический расчёт фрагмента; по износу — расчёт износа; по теплопотерям — расчёт нормативных теплопотерь.
  • «Рядом с социальными объектами» — загруженные социальные объекты (окно «Социальные объекты»).
  • «Скачать» (CSV, GeoPackage, FlatGeobuf, Shapefile) — право «Выгрузки и отчёты»; без него кнопки нет.
  • «Спросите словами» — помощник ИИ включён на сервере и право «Запуск расчётов»; без них строки вопроса нет.

Шаги

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

    Пункт «Выборка по условиям» в панели «Инструменты»

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

    Окно «Выборка по условиям»

  3. Выберите, что ищем — участки или узлы. Нажмите «+ Условие», выберите поле, условие и значение (на кадре — условный диаметр не меньше 400 мм). Условий может быть несколько: все сразу или любое из них.

    Выборка по условиям: шаг 3

  4. Нажмите «Выбрать». Над списком — запрос словами и сколько найдено; найденное подсвечено на карте. «Скачать» выгружает список, щелчок по строке приближает карту к объекту.

    Выборка по условиям: шаг 4

  5. Нажмите «Оставить на карте» — окно закроется, найденные участки останутся подсвеченными. «Снять с карты» в окне убирает подсветку.

    Выборка по условиям: шаг 5

Примеры

Все примеры — копия базы Алматы, фрагмент 74, текущий расчёт.

Крупные трубы. «Условный диаметр ≥ 400», порядок — по условному диаметру: «Найдено: 2446 (показано 1000) · длина по паспорту 286,86 км». Первые строки — Ду 1400 у ТЭЦ-1 и ЦТРП, и каждая встречается дважды: в этой копии во фрагменте 74 лежат и участки копии магистрали (фрагмент 99).

Вокруг камеры. «Условный диаметр ≥ 300», «Рядом с узлом» 2КОК-5, 300 м, фрагмент 74: 26 участков, 2,84 км. Запрос словами: «в 300 м от узла «2КОК-5» (id 534810, фрагмент 74)». С «Все фрагменты» — 78 участков: та же труба есть во фрагменте 1 и среди участков без фрагмента.

Быстрая вода. «Скорость воды (подача) > 1,5 м/с», порядок — по скорости: 162 участка, 19,97 км. Наибольшая скорость — 4,5 м/с на коротком участке ЦТРП (10,1 м), дальше 2,76 м/с у ТЭЦ-1 и 2,73 м/с за НС-1.

Крупные потребители. Узлы, «Тип узла (карточка)» — потребитель и обобщённый потребитель, «Нагрузка потребителя > 5»: 100 узлов, самый крупный — 55,28 Гкал/ч.

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

  • Условие без значения не учитывается: в строке «Запрос» его не будет.
  • «Расчёта нормативных теплопотерь ещё нет — условие по нему проверить нельзя» (то же для износа) — сначала выполните этот расчёт.
  • «Узел «…» не найден (или без координат)» — нет живого узла с таким именем или у него нет точки на карте; проверьте имя в поиске узлов.
  • «Нет … на карте — загрузите их в окне «Социальные объекты»» — социальные объекты выбранных категорий не загружены.
  • «Выборка слишком долгая — сузьте условия (фрагменты, область)» — запрос не уложился в 20 с; включите «В видимой области карты» или выберите фрагменты.
  • «Сервер занят другими выборками — повторите через несколько секунд» / «Дождитесь окончания предыдущей выборки» — превышено число одновременных выборок.
  • «Запрос ИИ не прошёл проверку: …» — модель предложила недопустимое условие; конструктор уже заполнен, поправьте и нажмите «Выбрать».
  • «Вопрос не похож на выборку объектов сети — уточните его» — в вопросе нет условий на поля сети.
  • «Нет права «Выгрузки и отчёты»» при скачивании — право сняли, пока окно было открыто.
  • В условии по режиму нашлось меньше, чем ожидалось, — у части фрагментов нет расчёта: такие участки условию по режиму не удовлетворяют.

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

  • Помощник ИИ: AI_ENABLED, AI_MODEL, ANTHROPIC_API_KEY, AI_TIMEOUT_S. Без них работает только конструктор.
  • Социальные объекты — таблица tgid_poi; расчёт износа — wear_out, теплопотерь — ut_teplo_out.
  • Выборка открыта и внешним системам: OGC API Processes (процесс network-select) и MCP (инструмент select_network).

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

  • API: GET /api/v1/network-select/fields (поля, операции, max_limit, max_near_m, категории социальных объектов), POST /api/v1/network-select ({spec, bbox} → description, total, truncated, total_length_m, items, geojson, near_center), POST /api/v1/network-select/export (format: gpkg, fgb, shp), POST /api/v1/ai/select ({text, fragment_ids, bbox}). Код — database/network_select.py, routers/network_select.py, разбор вопроса — ai/tools.py (select_by_phrase), промпт ai/prompts/select.md.
  • Веб: components/NetworkSelectDialog.vue (ключ networkSelect), конструктор ↔ запрос, CSV и окружность «рядом с» — utils/networkSelect.ts, оверлей — components/MapViewer.vue.
  • Тесты: tests/utils/networkSelect.spec.ts, e2e — e2e/functions.spec.ts («выборка по условиям»); API — tests/test_network_select.py, tests/test_mcp.py.
Хотите увидеть эту функцию на своих данных?Покажем ТГИД на демонстрации и ответим на вопросы инженеров.
Запросить демо