Отображение сотен многоэтажных зданий с детализацией каждого жилого этажа на частоте 60 кадров в секунду в браузере — без дублирования полигональных сеток под каждый этаж — потребовало создания специализированных GPU-шейдеров и детерминированного геопространственного пайплайна.
1. Кастомный GLSL FloorSliceExtension
Вместо генерации отдельных 3D-мешей для каждого этажа 16-этажного дома, мы экструдируем контур здания ровно один раз и подключаем расширение LayerExtension для Deck.gl в вершинный и фрагментный шейдеры:
- Процедурная разметка этажей: Через формулу
mod(vPosition.z, 3.2)фрагментный шейдер затемняет горизонтальные полосы через каждые3.2метра, визуально разделяя этажи. - Срез без повторного выделения памяти: При перемещении ползунка Поэтажный срез параметр
uSliceElevationобновляется на графическом процессоре и исполняетif (vPosition.z > uSliceElevation) discard;. Это позволяет рассекать весь город по высоте в реальном времени с нулевыми повторными загрузками геометрии в видеопамять. - Интерактивная подсветка этажа: При наведении курсора или клике на конкретный этаж соответствующая плита высотой 3.2м (
uSelectedFloor) подсвечивается неоновым бирюзовым цветом.
2. Многоуровневое сопоставление адресов (Entity Resolution)
В объявлениях на региональных порталах недвижимости точные GPS-координаты указываются крайне редко. Риелторы используют произвольные текстовые описания, например: «мкр Асанбай 28, ориентир Томми Молл». Наш микросервис связывает текстовые описания с внешними ключами building_id в PostGIS по следующему алгоритму:
- Нормализация и сопоставление по словарю улиц и микрорайонов Бишкека.
- Триграммное сходство (
pg_trgm) и валидация строительной серии дома (104,105,106,монолит). - Геодезическая верификация близости к известным городским ориентирам и POI.
