feat(map): add universal subject and station search
This commit is contained in:
@@ -104,6 +104,17 @@ slot `reference-points`. Их три presentation profiles (`Метро`, `Во
|
||||
`Станции РЖД`) являются живыми каноническими Inspector sections: приложение
|
||||
может менять высоту, размер, label и LOD, не создавая provider-specific UI.
|
||||
|
||||
Центральный Map Toolbar содержит template-owned универсальный поиск. В
|
||||
закрытом состоянии это три круглых действия; при открытии общий pill
|
||||
симметрично расширяется, действия остаются слева, а справа появляется
|
||||
search-field и список результатов. Индекс строится по domain subjects,
|
||||
presentation label fields и разрешённым Data Product projections. Компонент не
|
||||
принимает provider payload и использует renderer entity id только как
|
||||
внутренний адрес camera adapter. Локальные совпадения появляются сразу; явный
|
||||
Enter при отсутствии совпадения разрешает один точный reference-name lookup
|
||||
через Map Gateway, после которого камера сохраняет композицию и переносится к
|
||||
контрактным координатам результата.
|
||||
|
||||
Приложение контролирует `rect`, `maximized`, видимость, active-state и `zIndex`. Компонент владеет pointer/keyboard-механикой перемещения и изменения размера, кнопками maximize/restore и close, а также повторно ограничивает геометрию при изменении размеров workspace через `ResizeObserver`. Опциональный `autoHeight` подгоняет высоту под живое содержимое и сжимает её обратно, не выходя за нижнюю границу workspace. Родительский bounds-контейнер должен быть позиционированным и обрезать содержимое (`position: relative; overflow: hidden`).
|
||||
|
||||
Окно предназначено для вспомогательных камер, инструментов и сопоставляемых представлений внутри сцены. Modal workflow, подтверждение и viewport-level Inspector по-прежнему используют `Window`.
|
||||
|
||||
+34
-4
@@ -72,7 +72,30 @@ subjects. Выбор subject в списке открывает его карт
|
||||
композицию камеры к точке. Адаптер повторяет проверенную механику legacy
|
||||
MMAP/AIS: сохраняет `heading`, `pitch`, `roll` и смещение камеры относительно
|
||||
центра viewport; длительность перелёта для текущего канонического workflow —
|
||||
`2.1 s`.
|
||||
`0.45 s`.
|
||||
|
||||
Кнопка поиска разворачивает центральный Toolbar симметрично, оставляя три
|
||||
системных действия слева и открывая единое поле справа. Поиск не знает Gelios,
|
||||
OSM или Cesium: он строит локальный индекс по всем подключённым map subjects.
|
||||
Для primary binding индексируются стабильный `sourceId`, label fields
|
||||
presentation profile и только scalar-значения из явного `fieldProjection`.
|
||||
Joined aspect может добавить aliases к существующему primary subject только
|
||||
из своей собственной разрешённой projection; отдельной map entity он не
|
||||
создаёт. Поэтому IMEI или другой hardware identifier начинает находить объект
|
||||
только после появления в авторизованной restricted projection и никогда не
|
||||
показывается отдельным значением в строке результата. Raw payload,
|
||||
непроецированные поля, credentials и provider endpoint индексироваться не
|
||||
могут. Выбор результата переводит `map.selection` к стабильному domain subject,
|
||||
а transient renderer entity id используется только внутри adapter для
|
||||
анимации камеры.
|
||||
|
||||
Индекс текущих Application bindings и уже материализованных reference facts
|
||||
обновляется интерактивно. Если локального совпадения нет, Enter выполняет через
|
||||
Map Gateway точный поиск названия станции в OSM. Это не provider-specific ветка
|
||||
Foundry и не autocomplete: Gateway возвращает тот же нормализованный
|
||||
`map.station|map.terminal` contract. Для удалённого результата adapter делает
|
||||
перелёт по контрактным координатам; новый viewport затем штатно материализует
|
||||
spatial cell. Частичные строки не создают сетевых запросов на каждый символ.
|
||||
|
||||
Facet-фильтры поддерживают мультивыбор: OR внутри одного facet и AND между facets. Missing facet означает отсутствие ограничения, а явно пустой список — ноль совпадений. Отжатие последнего chip не включает `Все`; `Все` включается и выключается только явным кликом. Переключение фильтра не двигает камеру, обзор выполняется отдельным действием.
|
||||
|
||||
@@ -93,9 +116,16 @@ OSM/approved seed → Map Gateway spatial cache → map.station | map.terminal
|
||||
payload, upstream endpoint, credentials и произвольные tags в Foundry не
|
||||
попадают. Начальный snapshot Москвы получен из legacy L1 MMAP как donor и
|
||||
разделён на три категории: `metro`, `railway_station`,
|
||||
`railway_terminal`. За пределами snapshot Map Gateway может последовательно
|
||||
загрузить spatial cells из OSM и сохраняет нормализованный результат в
|
||||
persistent cache; повторный viewport читается локально.
|
||||
`railway_terminal`. За пределами snapshot Map Gateway загружает spatial cells
|
||||
из OSM через bounded queue: одновременно исполняются не более двух upstream
|
||||
запросов, их старты сглаживаются, одинаковые inflight cells дедуплицируются, а
|
||||
нормализованный результат атомарно сохраняется в persistent cache. Частичный
|
||||
viewport автоматически повторяет только отсутствующие cells с backoff;
|
||||
повторный готовый viewport читается локально.
|
||||
Русское имя `name:ru` имеет приоритет перед общим `name`. Временная
|
||||
недоступность Gateway не стирает последний уже проверенный browser snapshot;
|
||||
server status показывает только безопасный код ошибки, состояние очереди и
|
||||
время, не раскрывая upstream endpoint.
|
||||
|
||||
Page Layout хранит три независимых reference bindings:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user