回答:
通常、地面の場所に関するデータがあるため、それを使用する必要があります。地面が3Dの立体図形を決定します。この図を、ビューアーを中心とした単位球体に放射状に投影します。これにより、球体の領域に地面がマッピングされます。残りの領域の面積を計算します:それは空(ステラジアン単位)によって範囲を定められた立体角です。球の総面積(4 piに等しい)で割り、100を掛けて空の割合を求めます。
より鮮明な説明が必要な場合は、視聴者を小さな球状の泡の中心に置き、空の上にペイントするように依頼します。彼女が使用するペイントの量を、バブル全体をペイントするのに必要な量で割り、100を掛けます。
実際には、それほど単純ではない技術的な詳細がいくつかあります。
地面が三角形ネットワーク(TIN)として与えられている場合、球体への投影はかなり簡単です。なぜなら、球体に三角形を投影するコードを書くだけでよいからです。地面がグリッド付き標高モデル(DEM)として指定されている場合、各グリッドセルを3D四辺形と考えることができます。これを対角線に沿って2つの三角形に分割し、各三角形を球体にマッピングします。どちらの場合でも、球体に投影された三角形のコレクションが残っています。球体をマップに投影することにより(たとえば、ステレオ投影)、これらの三角形の多角形領域への集約は、(たとえば、平面スイープ法を使用した)平面計算ジオメトリの標準問題に減らすことができます。残りは簡単です(GISの場合)。
この画像は、ダウンタウンを見下ろしているビューアーを中心にしたノモニック投影でシミュレートされた高層ビルの小さな都市を示しています。GISは、これらの建物の側面と屋根を表すポリゴンを「結合」(結合)し、残っている(白い)スペースの面積を計算できます。直線的な建築線が曲線ではなく線分としてレンダリングされるため、ノモニック投影法が選択されました。
地上と建物だけがある場合、GISを使用してこの計算を行うことができます。ほとんどの場合、建物は長方形のコレクションとして利用できます。長方形の頂点には、ビューアーに対するユークリッド座標(x、y、z)があります。それらを球座標、つまり緯度と経度に変換します。変換された長方形のポリゴンを作成します。これをすべての建物のすべての部分のすべての長方形に対して実行し、「ポリゴンフィーチャレイヤー」を作成します。次に、GISで、(1)フィーチャの集合論的結合を計算し、(2)結果の面積を計算し、(3)これを地球の表面積の半分から減算します(残りの半分は地面用です)。 (4)地球の全面積で割る(100倍してパーセンテージを得る)。計算の労力はN * log(N)に比例します。Nは頂点の数です。精度は、GISが長方形をどれだけうまく表現しているかに依存します(長方形の側面をより間隔の狭い頂点のシーケンスに分割する必要がある場合があります)。精度の要件に応じて、モンテカルロベースのアプローチ(たとえば、別の応答で提唱されたレイトレーシング)数十万以上の頂点がある場合、つまり視聴者が数万の建物に完全に囲まれている(そしてその一部を見ることができる)場合:-)
これは、GISではなくコンピュータグラフィックスの世界からの回答です。したがって、使用するツールの指示ではなく、アルゴリズムの説明です。
定義:光線は原点+方向です。原点から始まり、その方向に沿って無限に続く線です。
次の基本的な材料が必要です。
特定の光線が地面に当たるかどうかをテストする機能。
特定の光線が建物に当たるかどうかをテストする機能。
3Dデカルト座標空間内のすべてのデータ(建物、地面を表す情報)。
レイテスト用に実装する正確な公式は、「地面」(完全な球体?地形?)と "建物"(押し出された長方形?完全な3Dモデル?)の表現方法によって異なります。単純なジオメトリの場合、それらは見つけやすく、実装も簡単です。(たとえば、「レイキューブの交差点」を検索します)。
いずれにせよ、そこからのポイントからの空の可視性の割合に関する答えは簡単です。クエリポイントからのランダムな方向で多くの光線を発射します。テストポイントから見える空の割合は、建物や地面に当たらない光線の数に等しくなります。
答えは正確ではありませんが、光線を追加するだけで任意のレベルの精度で計算できます。
上記のように、必ずしも非常に高速ではありません。しかし、適用できる十分に文書化された最適化の大部分があります。
(複数のポイントと同じ建物のデータセット全体の空の可視性を計算するために、このアプローチは、単純な空間インデックスの追加後に再投影ベースのアプローチを水面から吹き飛ばすことを期待します。)
スカイビューファクター(SVF)は、2次元表示から見た特定の観測ポイント上の可視空(Ω)の部分によって定義されます(図aを参照)。このアルゴリズムは、指定された半径R(b)へのn(ここでは8つが示されている)方向の地平線γiの垂直仰角を計算します。
スカイビューファクターは、既存の視覚化手法の欠点、たとえば、分析的な陰影シェーディングでの指向性照明の問題を克服するために提案されています。
見える空の部分を表現するための最も便利な尺度は立体角Ωです。これは、オブザーバーから見たオブジェクトの大きさの尺度です。オブジェクトの立体角は、観測点を中心とした単一球へのオブジェクトの投影の面積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よりも使いやすいかもしれません。(私はこれを実行して日射量を計算できるGISプラグインを聞いたことがありますが、それを見つけることができませんでした)。
GRASS GISバージョン7(実際には安定していない)では、コマンドがありr.skyview(コマンドに基づいてr.horizon安定GRASSのV.6でもご覧になれますが、)。
テレインフィーチャの高さ(建物の高さなど)に対応するピクセル値で、テレインモデルを表すラスターイメージを読み取り、ピクセルごとに「スカイビューファクター」を計算します。
まず、データ(不明な形式)をラスターデータセットに変換する必要があります。
見る:
http://grass.osgeo.org/grass70/manuals/addons/r.skyview.html