Ответы:
У нас обычно есть данные о том, где находится земля , поэтому мы должны это использовать. Земля определяет твердую фигуру в 3D. Вы проецируете эту фигуру радиально на единичную сферу с центром в зрителе: это отображает землю на область в сфере. Вычислите площадь оставшейся области: это телесный угол, образованный небом (в стерадианах ). Разделите его на общую площадь сферы (равную 4 пи) и умножьте на 100, чтобы получить процент неба.
Если вы предпочитаете более яркое объяснение, поместите зрителя в центр небольшого сферического пузыря и попросите его нарисовать небо. Разделите количество краски, которое она использует, на количество, необходимое, чтобы нарисовать весь пузырь, и умножьте на 100.
На самом деле есть некоторые не очень простые технические детали.
Проекция на сферу довольно проста, когда земля задана как триангулированная сеть (TIN), потому что вам нужно только написать код для проецирования треугольника на сферу. Когда земля задана как сеточная модель рельефа (DEM), вы можете представить каждую ячейку сетки как трехмерный четырехугольник. Вы можете разбить это на два треугольника вдоль диагонали и отобразить каждый треугольник на сферу. В любом случае у вас останется коллекция спроецированных треугольников на сфере. Путем проецирования сферы на карту (например, с помощью стереографической проекции) объединение этих треугольников в многоугольную область может быть сведено к стандартной задаче вычислительной геометрии плоскости (например, с использованием метода развертки плоскости). В остальном все просто (для ГИС).
На этом изображении изображен небольшой город имитируемых небоскребов в гномической проекции с центром в центре города, смотрящий прямо вверх. ГИС может «объединить» (образовать объединение) полигоны, представляющие стороны и крыши этих зданий, а затем вычислить площадь оставшегося (белого) пространства. Гномоническая проекция была выбрана потому, что прямые архитектурные линии отображаются в виде отрезков, а не кривых.
ГИС может быть введена в эксплуатацию для выполнения этого расчета, когда у вас есть только земля и здания. Здания, скорее всего, доступны в виде наборов прямоугольников. Вершина прямоугольника имеет евклидовы координаты (x, y, z) относительно зрителя. Преобразуйте их в сферические координаты: широту и долготу. Создайте многоугольник для преобразованного прямоугольника. Сделайте это для всех прямоугольников для всех частей всех зданий, в результате чего получится «слой многоугольников». Затем в ГИС, (1) вычисляем теоретико-множественное объединение элементов, (2) вычисляем полученную площадь, (3) вычитаем это из половины площади поверхности земли (другая половина - для земли), и (4) разделить на всю площадь земли (умножить на 100, чтобы получить процент). Вычислительное усилие пропорционально N * log (N), где N - количество вершин. Точность зависит от того, насколько хорошо ГИС представляет прямоугольники (вам может потребоваться разбить стороны прямоугольника на последовательности из более близко расположенных вершин). В зависимости от ваших требований к точности, вы можете рассмотреть подходы на основе Монте-Карло (например, трассировка лучей рекомендуется в другом ответе), когда у вас есть более нескольких сотен тысяч вершин, то есть, когда зритель полностью окружен (и может видеть части) десятками тысяч зданий :-).
Вот ответ, который приходит из мира компьютерной графики, а не из ГИС - следовательно, это описание алгоритма, а не инструкции для какого инструмента (ов) использовать.
Определение: луч - это начало + направление; это линия, которая начинается в начале координат и продолжается до бесконечности вдоль этого направления.
Вам нужны следующие основные ингредиенты:
Возможность проверить, не падает ли данный луч на землю.
Возможность проверить, попадает ли данный луч в здание.
Все ваши данные (здания, информация, которая представляет землю) в трехмерном декартовом координатном пространстве.
Точные формулы, которые нужно реализовать для лучевых испытаний, зависят от того, как вы представляете «землю» (идеальная сфера? Рельеф?) И «здание» (вытянутый прямоугольник? Полная трехмерная модель?). Для простой геометрии их легко найти и легко реализовать. (например, поиск «пересечение куба луча»).
В любом случае, оттуда ответ относительно% видимости неба из точки тривиален: запустите множество лучей со случайными направлениями от точки запроса. Доля неба, которая видна из вашей контрольной точки, равна количеству лучей, которые не попали в здание или на землю.
Ответ не точный, но вы можете вычислить его с любым желаемым уровнем точности, просто добавив больше лучей.
Как описано выше, это не обязательно очень быстро; но есть множество хорошо документированных оптимизаций, которые вы можете применить.
(Я ожидаю, что для расчета видимости неба по нескольким точкам и одному и тому же набору данных о зданиях этот подход выдувает подходы, основанные на перепроектировании, из воды после добавления простого пространственного индекса.)
Коэффициент обзора неба (SVF) определяется частью видимого неба (Ω) над определенной точкой наблюдения, как видно из двумерного представления (см. Рисунок а). Алгоритм вычисляет вертикальный угол места горизонта γi в n (восемь представлены здесь) направлениях до заданного радиуса R (b).
Был предложен фактор обзора неба, чтобы преодолеть недостатки существующих методов визуализации, например, проблемы направленного освещения при аналитическом затенении холмов.
Наиболее удобной мерой для выражения части видимого неба является телесный угол Ω. Это мера того, насколько большой объект кажется наблюдателю. Телесный угол объекта пропорционален площади А проекции объекта на единую сферу с центром в точке наблюдения.
SVF находится в диапазоне от 0 до 1. Значения, близкие к 1, означают, что почти все полушарие является видимым, что имеет место в открытых объектах (плоскостях и пиках), в то время как значения, близкие к 0, присутствуют в глубоких раковинах и нижних частях глубоких долин от где почти нет неба видно. SVF - это физическая величина (если мы не манипулируем данными высот вертикальным преувеличением).
Как указал @mic_cord, в Remote Sens. 2011, 3 (2), 398-415 опубликована статья о визуализации данных с использованием SVF. DOI: 10,3390 / rs3020398.
Бесплатный инструмент для вычисления SVF (и не только) доступен по адресу http://iaps.zrc-sazu.si/en/rvt#v.
Ecotect (теперь инструмент AutoDesk ) позволяет вам сделать это. В целом, это часто рассматривается в области дневного освещения, и инструмент из этой области может быть проще в использовании, чем ГИС. (Хотя я слышал о плагине ГИС, который может сделать это и рассчитать солнечную экспозицию, но мне так и не удалось его найти).
В GRASS GIS версии 7 (фактически не стабильной) есть команда r.skyview (основанная на команде r.horizon , доступная также в стабильной GRASS v.6).
Он считывает растровое изображение, представляющее модель местности, со значением пикселя, соответствующим высоте элемента местности (например, высотам здания), и рассчитывает для каждого пикселя «коэффициент обзора неба».
Сначала вам нужно преобразовать ваши данные (неизвестный формат) в набор растровых данных.
Видеть:
http://grass.osgeo.org/grass70/manuals/addons/r.skyview.html