Статьи

Анализ видимости в QGIS

2025-06-24 10:03 ГИС Туториалы
Время прочтения: 5 минут
Версия QGIS: 3.40.1
Уровень владения QGIS: вы знаете, как создавать слои и подгружать их в программу, а также как устанавливать плагины
Анализ видимости нужен, чтобы определить, какие территории мы можем увидеть из определенной точки или наоборот, откуда могут видеть нас или определенный объект.

Практическое применение этого анализа разнообразно: например, он используется в строительстве, когда нам нужно не портить существующую композиционно-видовую панораму, либо же наоборот обеспечить лучший вид на объект. Такой анализ используют и при проектировании объектов телекоммуникации, вроде вышек связи, при проведении ландшафтных работ, в археологии и в других сферах. Автор инструмента для этого анализа в QGIS Зоран Чучкович (Zoran Čučković), создавал его как раз для использования в археологии, так как он сам археолог.
В этой статье мы проведем анализ видимости в QGIS.

Исходные данные для анализа

Чтобы провести анализ, нам нужна цифровая модель рельефа. В анализе видимости важно понимать, какая именно цифровая модель рельефа используется: DTM (digital terrain model) или DSM (digital surface model). DTM — это цифровая модель рельефа без надземных объектов, таких как деревья или здания, а в DSM эти объекты учитываются. Если мы сравним одно и то же место двух моделей рельефа, например, в городе, то пиксель со значением высоты в DTM будет меньше, чем в DSM, так как в DSM еще учтены высоты зданий, и разница как раз и будет примерно равна высоте зданий относительно земной поверхности. Это важно учитывать, если требуется определить видимость объектов в городе, где здания существенно ограничивают зону видимости.
Нам также потребуется точечный слой с одним или несколькими объектами, для которых мы будем делать анализ видимости в QGIS.

Для работы установим модуль Visibility Analysis. После установки он появится в инструментах анализа:
Важно знать, что в этой задаче есть две похожие операции, и в статье мы рассмотрим обе. Анализ видимости (viewshed analysis) — анализ того, что можно увидеть из определенной точки. Обратный анализ видимости (reverse viewshed, иногда называется ZTV viewshed analysis) — определение областей, из которых виден интересующий нас объект.

Анализ видимости

Анализ видимости, как и его обратный собрат, происходит в два этапа:
  1. Создание точки (точек) наблюдения.
  2. Определение зон видимости.
Для примера я взял реальную задачу с которой может столкнуться каждый: определить, какие территории видит Око Саурона, чтобы использовать это впоследствии для прокладывания пути хоббитам.
Для этого у меня есть цифровая модель рельефа Средиземья и точечный слой с одним объектом — темной башней, на которой как раз и расположено Око Саурона. Скачать ГИС-слои Средиземья можно по ссылке.
Первым делом создаем точки наблюдения с помощью инструмента «Create viewpoints», в котором нас интересуют следующие поля:
  • «Observer location(s)» — слой с точками, в которых стоит наблюдатель
  • «Digital elevation model» — слой с цифровой моделью рельефа
  • «Radius of analysis, meters» — радиус анализа, или насколько далеко способен видеть наблюдатель. Для человека на земле он составляет в среднем около 5000 м, но чем выше поднимается, тем выше значения, а с помощью оптических приборов этот радиус может увеличиваться еще больше. В моем случае нужно предположить, насколько далеко способно глядеть Око Саурона, которое могло видеть примерно что угодно в Средиземье, поэтому у меня это огромное число в 2 000 000 метров
  • «Observer height, meters» — высота наблюдателя. Для человека это значение обычно принимается равным 1,6 м. В моем случае это высокая башня с гигантским глазом в вымышленной вселенной и большой фанбазой с разными теориями, поэтому я беру 1500 м
  • «Target height, meters» — высота наблюдаемого объекта. Ее можно оставить 0 метров, если вас интересует поверхность. Если вас интересует что-то на поверхности, то это уже будет другое число. В моем случае это как минимум хоббиты, которые, по мнению гугла, ростом порядка 90 см или 0,9 м
Все настройки из списка представлены на скрине ниже. В итоге работы алгоритма мы получим слой с наблюдателями, где все колонки заполнены и названы так, как нужно для следующего алгоритма.
Теперь приступим к следующему этапу — определению зон видимости с помощью инструмента «Viewshed», в котором для нас важны следующие поля:
  • «Analysis type» — тип анализа, в котором нам нужен «Binary viewshed», суть которого проста: пиксель получает значение 1, если он виден и 0 — если нет
  • «Observer location(s)» — слой, который мы создали в предыдущем шаге, те самые viewpoints
  • «Digital Elevation model» — слой с цифровой моделью рельефа
  • «Take in account Earth curvature» — ставим галочку, чтобы учитывать кривизну земли. На больших расстояниях это особенно важно, а на маленьких можно не учитывать
  • «Atmospheric refraction» — параметр отражательной способности света, который влияет на видимость объектов. Стандартные 0,13 отлично подходят для нашей задачи
  • «Combining multiple outputs» — оставляем «Addition»; это поле рассмоотрим чуть дальше в статье, оно важно, когда у нас несколько наблюдателей
В итоге анализа получаем слой, где белым отмечены пиксели со значением 1, то есть видимые Оком Саурона, а черным — со значением 0, то есть там, где Хоббиты могут спокойно идти в полный рост, не опасаясь быть замеченными

Обратный анализ видимости

Обратный анализ видимости состоит из тех же шагов, но чтобы определить, откуда виден интересующий нас объект, нам нужно иначе заполнить значения полей «Observer height, meters» и «Target height, meters». Чтобы было понятнее, проиллюстрирую примером, для которого как раз буду использовать несколько наблюдателей и для которого воспользуюсь все тем же слоем рельефа Средиземья.
Допустим, у нас есть слой с сигнальными башнями, и нужно проверить, на каких территориях виден сигнальный дым от них, а на каких нет. Если сигнальный дым от башни не виден другим, и она не видит другие сигналы — это плохо: такая башня либо не получит сигнал, либо не сможет его передать. Это и есть цель анализа.
Таким образом, имеем: башни, передающие сигнал, используя дым, который, допустим, поднимается на высоту 100 м, и этот дым должны увидеть люди высотой 1,6 м (допускаем, что если человек такого роста видит дым, то и стражник на башне, подающий сигналы, тоже его увидит). Также предположим, что увидеть дым такой высоты возможно на расстоянии 15 км.
В случае обратного анализа видимости мы хотим узнать, откуда виден дым, поэтому у нас получается, что наблюдатель — не дым, а как раз люди, так что значение 1,6 м мы запишем не в «Target height, meters», а в «Observer height, meters», а 100 м — высоту дыма — укажем для «Target height, meters». В этом и есть разница между анализом видимости и обратным анализом видимости для данного алгоритма.
В итоге мы получим слой, где значения варьируются не до 1, а до больших цифр. Все благодаря настройке «Addition». Для каждого пикселя вычисляется, сколько наблюдателей его видят.
В моем случае при 13 башнях максимальное значение у пикселя получилось 8. Это значит, что если все башни дадут сигнал, то большинство из них увидят его сразу с 8 вышек: свой и 7 от других башен, что может дать нам следующий вывод: у нас слишком много вышек и их количество можно сократить, что позволит сэкономить ресурсы и потратить их на что-то другое.

Другие материалы, где используются ГИС-данные по Средиземью:

Материал подготовил Александр Зуев