# Публичное демо Settlements UI

Исходная версия: `cbc16e864a9c6021196eaa0d42865e10324a1ce8`. Подготовка демо: 07.09.2026. Репозиторий остаётся приватным.

Сохранены React/MobX application store, модели поселений, MapLibre, Mapbox Draw, WKB-конвертация, проверки геометрии, выбор/редактирование/сохранение полигонов и исходный модуль массового импорта. Публичный транспорт OData заменён `src_front/src/demo/api.ts`: данные находятся только в памяти вкладки и исчезают при перезагрузке. Корпоративный API, UI Kit и OTLP не подключаются. Подложка использует публичные тайлы OpenStreetMap. GeoJSON разбирается локально, на сервер файлы не отправляются.

## Географический набор

54 территории России: 19 городов, 27 районов и муниципальных округов, 8 областей. Вместо четырёх прямоугольников используются реальные контуры OpenStreetMap с упрощением для интерактивного редактора. Сохранены Polygon/MultiPolygon и внутренние кольца. Коды ОКТМО синтетические. Набор не является кадастровыми или официальными административными данными; городские контуры взяты из OSM place=city/town, а районы и области — из boundary=administrative.

Источник: © OpenStreetMap contributors, [ODbL](https://www.openstreetmap.org/copyright). Срез данных: 07.09.2026, 11:09:36 UTC. У каждого объекта есть ссылка на исходное relation, дата и величина упрощения. Производный набор можно скачать кнопкой «Скачать набор: 54 территории»; сведения о лицензии сохраняются при экспорте.

`src_front/src/demo/russia-boundaries.json` — отдельный статический набор, чтобы геометрия и происхождение данных не смешивались с логикой транспорта. Всего 21 421 вершина; 76–926 вершин на объект, максимум 480 на кольцо, 7 MultiPolygon. Внешние/внутренние OSM ways объединены в замкнутые кольца, затем упрощены с сохранением топологии и округлены до 6 знаков. Незамкнутые линии и невалидные результаты отвергаются. Соседние территории упрощены отдельно, поэтому не предназначены для измерения общей границы.

Цвета исходного интерфейса сохранены. Области имеют слабую заливку и фиолетовую границу, районы — промежуточную прозрачность, города — более плотную заливку. Кнопка «Показать все объекты» охватывает весь набор; карточка приближает выбранную территорию, включая удалённые части MultiPolygon.

## Сборка

Из `src_front`: `docker build -f Dockerfile.portfolio --output type=local,dest=dist-demo .`. Закреплённый Node используется только для локальной сборки; Nginx на VPS отдаёт готовые файлы. `npm run build:demo` выполняет Vite production build. Это не утверждение о прохождении полного legacy TypeScript/lint набора.

## Что проверить

1. 54 территории, поиск города/района и пустой результат.
2. Карточки Владимира, Суздаля, Нижнего Новгорода, Суздальского района и Владимирской области → приближение → редактор геометрии.
3. Скачать набор → массовый импорт 54 объектов → проверка → сохранить составной полигон → пропустить один → применить 53 → экспорт 107 объектов с учётом исходных 54.
4. Повторное применение того же файла не добавляет дубликаты. Новая загрузка файла считается отдельной операцией. Сброс возвращает 54 исходные территории.
5. Отдельная вкладка получает независимый набор данных.
6. Переключение слоёв, масштабирование, мобильный вид.
7. Самопересечение блокирует применение; ошибочную геометрию можно исправить или явно пропустить.

Лимиты: 5 MB на файл, 500 объектов на файл, 20 файлов / 1000 импортируемых объектов на вкладку, 1000 вершин на кольцо и 5000 на объект. Поддерживаются Polygon/MultiPolygon, EPSG:4326 и преобразование EPSG:3857. Пример из 54 территорий укладывается в эти ограничения.

## Code-map

| Сценарий | Экран | Модуль | Данные |
|---|---|---|---|
| Поиск и карточка | Sidebar / Settlement | application.store, settlements-code.repository | municipals |
| Редактирование | MapEditor / SettlementPolygon | PageController, MapEditorController, Mapbox Draw | settlements_geometry |
| Валидация | Сохранение / кнопка проверки | validation.util, wkb.util | GeoJSON / EWKB |
| Начальные границы и источник | Карта / список / скачивание | demo/russia-boundaries.json, demo/data | 54 OSM relation, учебные ОКТМО, ODbL |
| Импорт и экспорт | DemoControls / FilesScreen / PolygonsScreen / PolygonEditScreen | modules/import, demo/import-api, demo/data | GeoJSON → валидация → WKB → применение; память вкладки |
| Приближение сложной территории | Карточка / карта импорта | application.store.getUnitedPolygons, demo/data.geometryBbox | bbox всех колец и частей, а не первых вершин |
| Слои | MapEditorLayersSwitcher | LayerManager, demo/config | GeoJSON sources |

Перед изменением проследить строку карты от экрана до модели и транспорта. После изменения обновить карту и проверить выбор, сохранение, отмену и экспорт. Демонстрационный адаптер заменяет серверный транспорт; исходные экраны массового импорта и проверки геометрии выполняются реально.
