Поиск узлов
Поиск узлов по названию или коду, а также фразой; переход к найденному узлу на карте.
Возможности
- Поиск узла по коду района сети и наименованию: наберите часть, например «тк6-5-24» или «6-8 тк6-5-24». Список обновляется по ходу набора.
- Результаты сгруппированы: вид узла · РС · фрагмент. В строке — наименование, id узла, код и описание (название потребителя), признак трубопровода.
- Нажатие на узел — карта перелетает к нему и ставит мигающую синюю метку; «Очистить маркер» её снимает.
- «Поиск фразой» — помощник ИИ ищет узлы, участки, потребителей, источники и инструменты по обычной фразе; запуск — клавишей Enter.
- Тот же поиск по узлам — в палитре команд (Ctrl+K).
Как это работает
Откуда данные. Окно обращается не к API, а прямо к GeoServer города: SQL-представление find_node рабочей области (WFS, ответ JSON). Узел находится, если строка «код РС + пробел + наименование узла» содержит набранный текст, без учёта регистра. По id узла, адресу и названию потребителя поиск не идёт.
Какие узлы попадают. Только неудалённые узлы основной схемы: узлы внутренних схем не ищутся. Выдаётся не больше 100 узлов; если пришло 100, под списком — «Показаны первые 100 узлов — уточните запрос».
Вид узла берётся из таблицы расширения, в которой есть узел (как в десктопе ТГИД: тип узла — это таблица его карточки), в таком порядке:
| Таблица | Вид в списке |
|---|---|
pumpstations |
«Насосная станция» |
heatsources |
«Источник» |
realconsumers |
«Реальный потребитель» |
generalizedconsumers |
«Обобщенный потребитель» |
| нет ни в одной | «Узел» (камеры, павильоны и т. п.) |
«Описание» — название реального или обобщённого потребителя, иначе служебное имя узла. «Признак» — П (подающий), О (обратный) или пусто (обе трубы).
Персональные данные. Без права «Персональные данные» окно маскирует в «Описании» имена людей по тем же правилам, что и API: «Иванов И.И.» — «И*** И.И.», полное имя — «И*** И. П.». Названия организаций не меняются. То же — в палитре команд.
Переход к узлу. Координаты берутся вторым запросом к представлению id_nodes по id. Точка — метка с пульсирующим кругом, линия — подсветка линии. Карта приближается не меньше чем до масштаба 18 за 1 секунду. Одно и то же наименование часто встречается в нескольких фрагментах — это копии сети (расчётные схемы, сценарии); смотрите фрагмент в заголовке группы.
Поиск фразой. Фраза уходит на сервер; модель ИИ разбирает её в запрос (узел, участок, потребители, источник или инструмент), а выборку выполняет сервер своими запросами — SQL модель не пишет. Узлы здесь ищутся по наименованию среди узлов с координатами, до 50 объектов. Если на карте виден один фрагмент, поиск идёт в нём. Если фраза называет инструмент, он открывается. Выбор объекта — перелёт к нему (масштаб не меньше 17) без метки.
Что нужно для работы
- Вход в систему; отдельного права на поиск нет. Имена людей в «Описании» без маски — с правом «Персональные данные».
- Опубликованные в GeoServer представления
find_nodeиid_nodesдля базы города. - «Поиск фразой» — включённый на сервере помощник ИИ и право «Запуск расчётов». Без них переключателя в окне нет.
Шаги
Откройте «Инструменты» и наберите в поиске «Поиск узлов» — пункт выделен рамкой.

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

Начните набирать название узла (например, «тк6-5-24») — список найденных узлов появляется по ходу набора: название, вид узла, район сети и фрагмент.

Нажмите нужный узел — окно закроется, карта перейдёт к узлу и отметит его синей меткой.

Примеры
Копия Алматы (стенд AlmatyGIS_test), запрос «тк6-5-24». Найдено 11 узлов, у всех код РС «6-8»: 5 с видом «Узел» и 6 — «Обобщенный потребитель». Это один и тот же колодец в разных фрагментах: «CЗЭР», «Маг. сети для расчета НС», «Магистральные сети АлЭС (ЦЭР-ВЭР-ЗЭР-СЭР)», «Перспектива 2035 (+34.58 Гкал/ч)» и других; у 5 записей фрагмент пустой — это узлы удалённых фрагментов. Запрос «6-8 тк6-5-24» даёт те же 11 узлов.
Там же: ограничения. Запрос «тк» возвращает 100 узлов — сработал предел, окно пишет «Показаны первые 100 узлов — уточните запрос». Запрос «533278» (id одного из найденных узлов) не находит ничего: id в поиске не участвует.
Если не получается
- «Ничего не найдено» по номеру — поиск идёт по названию и коду узла, наберите часть названия.
- Метка осталась после поиска — откройте окно и нажмите «Очистить маркер».
- «Показаны первые 100 узлов — уточните запрос» — найдено больше, чем показывает окно; наберите больше символов.
- «Узлы не найдены» и «Ничего не найдено — Попробуйте изменить запрос» — в коде РС и наименовании нет такого текста. Проверьте написание: «тк6-5-24» и «ТК 6-5-24» — разные строки.
- «Поиск узлов не настроен на сервере карт: обратитесь к администратору» — сервер карт ответил не JSON: в рабочей области нет представления или вместо ответа пришла страница ошибки.
- «Показаны первые 100 узлов — уточните запрос» — нашлось больше, чем показывает окно; допишите наименование.
- «Ошибка сервера: 500» (код может быть другим) — GeoServer вернул ошибку.
- «GeoServer URL не настроен» — в настройках веба не задан адрес GeoServer.
- «Ошибка загрузки данных» — нет связи с GeoServer.
- «Не удалось получить координаты узла» — у узла нет геометрии в
id_nodes. - «Поиск фразой не выполнен — …» — помощник ИИ недоступен или фраза не разобрана; после текста — причина от сервера. «У объекта нет координат» — найденный фразой объект нельзя показать на карте.
Для администратора
find_nodeиid_nodes— SQL-представления GeoServer в рабочей области города (featuretype.xml); уfind_nodeпараметрыtextиfragments, веб передаёт толькоtext. В рабочей области прода Алматы представление ещё скрывает узлы удалённых фрагментов, в AlmatyGIS_test — нет.- Адрес GeoServer —
NUXT_PUBLIC_GEOSERVER_URLили адрес рабочей области изGEOSERVER_LAYER_CATALOG; рабочая область — из настроек города. - Запросы идут из браузера в GeoServer мимо API. Окно маскирует «Описание» в браузере (право
pii_view), но сам WFS GeoServer отдаёт названия потребителей без маски: GeoServer не закрыт маскированием API. Прямой доступ к нему ограничивайте на стороне сервера карт. - Помощник ИИ:
AI_ENABLED,ANTHROPIC_API_KEY,AI_MODEL.
Для разработчика
- Веб:
components/NodeSearch.vue(ключnodeSearch),utils/nodeSearch.ts—findNodesUrl,nodeGeometryUrl, экранированиеviewParamValue(,,;,\), подписиgetNodeTitle/getNodeSubtitle(маска «Описания» —utils/pii.ts, как в API); тот же модуль используетcomponents/CommandPalette.vue. - Поиск фразой:
POST /api/v1/ai/search(text2–500 символов,fragment_idsдо 50) —routers/ai.py,ai/tools.py(search,execute_search,MAX_RESULTS = 50). Тот жеexecute_search— инструмент MCPsearch_network. - Тесты: веб —
tests/utils/commandPalette.spec.ts,tests/components/CommandPalette.spec.ts; e2e —e2e/functions/equipment-registries.spec.ts(«поиск узла: выбор переводит карту к узлу»); API —tests/test_ai_tools_stage6.py.
