Skip to content

nailsafin/rnd_viewshed

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

31 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Алгоритм анализа видимости площадных объектов городской среды

Тема ВКР: Разработка алгоритма пространственно-адаптивного анализа видимости площадных объектов городской среды для поддержки принятия градостроительных решений

Автор: Сафин Наиль Рамилевич
Университет: ИТМО, Цифровая урбанистика
Направление: 27.04.07 Наукоёмкие технологии и экономика инноваций
Контакт: 312683@niuitmo.ru


О работе

Алгоритм решает задачу оценки визуальной доступности объекта капитального строительства с пешеходных маршрутов в исторически сложившейся городской застройке. Такая постановка типична для согласования архитектурных проектов — оценки воздействия нового объекта на сложившийся силуэт города.

В отличие от классических растровых подходов (viewshed на DSM), алгоритм работает в непрерывном трёхмерном полигональном пространстве: здания экструдируются из контуров OSM, рельеф строится как разреженная TIN-поверхность, а видимость рассчитывается методом трассировки лучей. Целевой объект рассматривается как площадной, а не точечный, что позволяет получать не бинарную, а частичную оценку видимости с разбивкой по типам перекрывающих объектов (рельеф, рядовая застройка, объекты культурного наследия).

Результат работы алгоритма — карта видимости вдоль пешеходных маршрутов в заданном радиусе вокруг целевого объекта.


Исходные данные

Источник Что даёт Где используется
OpenStreetMap Контуры зданий, этажность, пешеходные пути Экструзия зданий, выборка точек обзора
ArcticDEM (2 м) Цифровая модель поверхности Восполнение высотных атрибутов зданий
SRTM / Google Elevation API Цифровая модель рельефа Моделирование поверхности земли
ЕГРОКН Реестр объектов культурного наследия Разметка зданий по категориям

Метод

Шаги алгоритма Шаги алгоритма: моделирование рельефа (а), экструзия строений (б), сэмплирование точек наблюдения (в), трассировка лучей (г), расчёт видимости (д)

Алгоритм выполняется в пять последовательных шагов:

  1. Моделирование рельефа — растровая DTM-модель конвертируется в разреженную полигональную поверхность (TIN) в одном из трёх режимов: планарном, морфометрическом (по DTM) или по данным Elevation API
  2. Экструзия зданий — полигоны OSM вытягиваются в 3D-призмы на основе восполненных высотных атрибутов; здания размечаются по категориям (рядовое / ОКН)
  3. Выборка точек обзора — точки наблюдения генерируются вдоль пешеходных путей с заданным шагом (по умолчанию 5 м)
  4. Трассировка лучей — из каждой точки обзора посылаются лучи в направлении равномерно распределённых точек на поверхности целевого объекта; для каждого луча фиксируется первое пересечение с поверхностью сцены и класс этой поверхности
  5. Интерпретация результатов — для каждой точки обзора вычисляются доли видимости целевого объекта и перекрытий по каждой категории объектов

Настраиваемые параметры

compute_visibility(
    target,                  # целевой объект (GeoDataFrame)
    radius=1000,             # радиус области анализа, м
    terrain_mode="flat",     # flat | dtm | elevation_api
    terrain_resolution=32,   # разрешение модели рельефа, м
    observer_height=1.7,     # рост наблюдателя, м
    point_spacing=5.0,       # шаг выборки точек обзора, м
    ray_count=128,           # количество лучей на точку обзора
    dsm_stat="max",          # статистика для восполнения высот
)

Структура репозитория

.
├── v1/                        # Первоначальная реализация на растровых DSM
│   └── ...                    # Подход на основе 2.5D viewshed (GDAL Viewshed)
│
├── v2/
│   ├── src/                   # Основной код алгоритма
│   │   ├── VectorDataProcessor.py   # Загрузка и трансформация векторных данных (OSM, ЕГРОКН)
│   │   ├── TerrainGenerator.py      # Построение полигональной модели рельефа
│   │   ├── MeshProcessor.py         # Экструзия зданий, сборка сцены
│   │   └── VisibilityAnalyzer.py    # Трассировка лучей, расчёт видимости
│   │
│   ├── compare_experiments.py       # Вспомогательные модули для иллюстраций в тексте ВКР
│   └── run_viewsheds_cli.py         # Синтетические валидационные прогоны (sDSM-pipeline)
│
└── environment.yml            # Conda-окружение

v1/ — растровый подход

Первоначальная реализация, основанная на 2.5D-представлении городского пространства. Использует GDAL Viewshed в качестве ядра. Оставлена в репозитории для сравнения подходов.

v2/src/ — основной алгоритм

Реализация пространственно-адаптивного анализа видимости в трёхмерном полигональном пространстве. Четыре модуля соответствуют четырём зонам ответственности согласно принципу SRP.


Установка

conda env create -f environment.yml
conda activate visibility

Быстрый старт

from v2.src.VectorDataProcessor import VectorDataProcessor
from v2.src.TerrainGenerator import TerrainGenerator
from v2.src.MeshProcessor import MeshProcessor
from v2.src.VisibilityAnalyzer import VisibilityAnalyzer

# Задать целевой объект и область анализа
target = ...  # GeoDataFrame с полигоном целевого объекта
area   = target.buffer(1000)

# Собрать сцену
vdp          = VectorDataProcessor()
buildings    = vdp.get_buildings(area)
heritage     = vdp.get_heritage_objects(area)
obs_points   = vdp.generate_observation_points(area, spacing=5.0)

terrain_mesh = TerrainGenerator().generate_terrain(area, mode="flat")
scene_mesh   = MeshProcessor().extrude_buildings(buildings, heritage)
combined     = MeshProcessor().create_mesh_with_terrain(scene_mesh, terrain_mesh)

# Рассчитать видимость
analyzer = VisibilityAnalyzer()
results  = analyzer.compute_visibility(obs_points, target, combined)
gdf      = analyzer.create_visibility_map(obs_points, results)

Валидация

Схема валидации основана на сравнении с эталонным алгоритмом GDAL Viewshed (Wang, 2000). Из полигональной модели синтезируется растровая sDSM, на которой запускается эталон. Сходство бассейнов видимости оценивается коэффициентом Жаккара (IoU), пространственная структура расхождений — индексом Морана.

Медианный IoU на синтетической модели при разрешении 2 м: ≈ 0.87–0.95 в зависимости от локации.

Скрипты валидационных прогонов: v2/validation/


Публикации и материалы

  • Текст ВКР — по запросу
  • Исходный код алгоритма — в этом репозитории (v2/src/)

About

3D ray-tracing viewshed analysis for urban objects along pedestrian routes. Integrates OSM building footprints, terrain models and cultural heritage registry to support architectural approval workflows.

Topics

Resources

Stars

Watchers

Forks

Contributors

Languages