Выборка по условиям
Выборка участков и узлов по условиям: паспорт, режим, износ, расстояние «в N м от узла». Вопрос словами разбирает помощник ИИ.
Возможности
- Выборка участков или узлов по условиям на поля паспорта, расчёта и износа: до 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) — право «Выгрузки и отчёты»; без него кнопки нет.
- «Спросите словами» — помощник ИИ включён на сервере и право «Запуск расчётов»; без них строки вопроса нет.
Шаги
Откройте «Инструменты» и наберите в поиске «Выборка по условиям» — пункт выделен рамкой.

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

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

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

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

Примеры
Все примеры — копия базы Алматы, фрагмент 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.
