Відповіді:
У нас зазвичай є дані про те, де знаходиться земля , тому ми повинні використовувати це. Земля визначає суцільну фігуру в 3D. Вимальовуєте цю фігуру радіально на одиничну сферу, зосереджену на глядачі: це відображає землю на область у сфері. Обчисліть площу області, що залишилася : це суцільний кут, підкріплений небом (у стерадіанах ). Розділіть його на загальну площу сфери (рівну 4 пі) і помножте на 100, щоб отримати відсоток неба.
Якщо ви віддаєте перевагу більш яскраве пояснення, поставте глядача в центр маленького кулястого міхура і попросіть її намалювати небо. Розділіть кількість фарби, яку вона використовує, на кількість, необхідну для фарбування всього бульбашки, і помножте на 100.
Насправді є деякі не дуже прості технічні деталі.
Проекція на сферу є досить простою, коли земля задається у вигляді трикутної мережі (TIN), оскільки вам потрібно лише написати код, щоб спроектувати трикутник на сферу. Коли земля задана як сітчаста модель висоти (DEM), ви можете уявити кожну комірку сітки як 3D чотирикутник. Ви можете розбити його на два трикутники вздовж діагоналі та зіставити кожен трикутник на сферу. В будь-якому випадку вам залишається колекція проектованих трикутників на кулі. Проектуючи сферу на карту (наприклад, за допомогою стереографічної проекції), агрегація цих трикутників у полігональну область може бути зведена до стандартної задачі обчислювальної геометрії площини (наприклад, використовуючи метод зчитування площин). Решта легко (для ГІС).
На цьому зображенні зображено невелике місто з імітованих хмарочосів у гномонічній проекції, зосередженій у глядачі в центрі міста, дивлячись прямо вгору. ГІС може "об'єднати" (утворювати об'єднання) полігонів, що представляють сторони та дахи цих будівель, а потім обчислити площу (білого) простору, що залишилася. Гномонічна проекція була обрана тому, що прямі архітектурні лінії відображаються як сегменти лінії, а не криві.
ГІС може бути введений в експлуатацію для здійснення цього розрахунку, коли у вас просто земля та будівлі. Будинки, швидше за все, доступні у вигляді колекцій прямокутників. Вершина прямокутника має евклідові координати (x, y, z) щодо глядача. Перетворіть їх у сферичні координати: тобто широту та довготу. Створіть багатокутник для перетвореного прямокутника. Зробіть це для всіх прямокутників для всіх частин усіх будівель, в результаті чого вийде "шар багатокутника". Потім у ГІС (1) обчислюють множинно-теоретичний об'єднання ознак, (2) обчислюють отриману площу, (3) віднімають це від половини поверхні землі (інша половина - для землі), і (4) розділити на всю площу землі (помноживши на 100, щоб отримати відсоток). Обчислювальні зусилля пропорційні N * log (N), де N - кількість вершин. Точність залежить від того, наскільки GIS представляє прямокутники (можливо, вам знадобиться розбити сторони прямокутника на послідовності більш розташованих вершин). Залежно від ваших вимог до точності, ви можете розглянути підходи, засновані на Монте-Карло (наприклад, трасування променів, що пропагується в іншій відповіді), як тільки у вас є більше декількох сотень тисяч вершин - тобто, коли глядач повністю оточений (і може побачити частини) десятків тисяч будівель :-).
Ось відповідь, що надходить із світу комп'ютерної графіки, а не ГІС - отже, це опис алгоритму, а не інструкції, якими інструментами (ими) користуватися.
Визначення: промінь - це походження + напрямок; це лінія, яка починається від початку і продовжує нескінченність уздовж цього напрямку.
Вам потрібні такі основні інгредієнти:
Можливість тестування, щоб побачити, чи заданий промінь потрапляє на землю.
Здатність перевірити, чи потрапив даний промінь на будівлю.
Усі ваші дані (будівлі, інформація, яка представляє землю) у 3D-декартовому координатному просторі.
Точні формули, які потрібно застосувати для променевих випробувань, залежать від того, як ви представляєте "грунт" (ідеальна сфера? Місцевість?) Та "будівлю" (екструдований прямокутник - повна 3D-модель?). Для простої геометрії їх легко знайти і легко здійснити. (наприклад, пошук "перетину куба променя").
У будь-якому випадку, звідти відповідь щодо% видимості неба з точки є тривіальною: Вистріліть багато променів із випадковими напрямками від точки запиту. Частка неба, яка видно з вашої тестової точки, дорівнює кількості променів, які не потрапили на будівлю чи землю.
Відповідь не точна, але ви можете обчислити її до будь-якого бажаного рівня точності, просто додавши більше променів.
Як описано вище, це не обов'язково дуже швидко; але існує величезна кількість добре задокументованих оптимізацій, які ви можете застосувати.
(Я б очікував, що для обчислення видимості неба через декілька точок та одного і того ж набору даних будівель цей підхід вибухне з води на основі перепроектування після додавання простого просторового індексу.)
Коефіцієнт зору неба (SVF) визначається частиною видимого неба (Ω) над певною точкою спостереження, що видно з двовимірного зображення (див. Рисунок а). Алгоритм обчислює кут вертикального підйому горизонту γi в n (тут представлено вісім) напрямків до заданого радіуса R (b).
Для подолання недоліків існуючих методів візуалізації запропоновано фактор зору неба, наприклад, проблеми спрямованого освітлення в аналітичному затіненні пагорба.
Найбільш зручним заходом для вираження частини видимого неба є суцільний кут Ω. Це міра того, наскільки великий об’єкт видається спостерігачеві. Суцільний кут об'єкта пропорційний площі A проекції об'єкта на сферу єдності, зосереджену в точці спостереження.
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 ) дозволяє вам це зробити. Загалом, це часто досліджується в області денного освітлення, і інструмент з цього поля може бути простішим у використанні, ніж ГІС. (Хоча я чув про плагін GIS, який може це зробити і обчислити сонячне опромінення, але мені його так і не вдалося знайти).
У GRASS GIS версії 7 (фактично не стабільна) є команда r.skyview (заснована на команді r.horizon , доступна також у стабільній GRASS v.6).
Він зчитує растрові зображення, що представляють модель місцевості, зі значенням пікселя, що відповідає висоті місцевості (наприклад, висоти будівлі) та обчислює для кожного пікселя "коефіцієнт виду неба".
Спочатку потрібно перетворити свої дані (невідомий формат) у растровий набір даних.
Побачити:
http://grass.osgeo.org/grass70/manuals/addons/r.skyview.html