Поиск узлов

Поиск узлов по названию или коду, а также фразой; переход к найденному узлу на карте.

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

Возможности

  • Поиск узла по коду района сети и наименованию: наберите часть, например «тк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 для базы города.
  • «Поиск фразой» — включённый на сервере помощник ИИ и право «Запуск расчётов». Без них переключателя в окне нет.

Шаги

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

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

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

    Окно «Поиск узлов»

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

    Поиск узлов: шаг 3

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

    Поиск узлов: шаг 4

Примеры

Копия Алматы (стенд 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 (text 2–500 символов, fragment_ids до 50) — routers/ai.py, ai/tools.py (search, execute_search, MAX_RESULTS = 50). Тот же execute_search — инструмент MCP search_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.
Хотите увидеть эту функцию на своих данных?Покажем ТГИД на демонстрации и ответим на вопросы инженеров.
Запросить демо