建物のフットプリントから建物の影をどのように生成しますか?
建物の高さの属性値があります。
そのため、影のサイズをそれに基づいて変えることが望ましいでしょう。
ArcGISを使用して見つけた最良の提案は、ドロップシャドウです:http : //blogs.esri.com/Support/blogs/mappingcenter/archive/2008/10/21/3d-effect-for-a-building-footprints.aspx
建物のフットプリントから建物の影をどのように生成しますか?
建物の高さの属性値があります。
そのため、影のサイズをそれに基づいて変えることが望ましいでしょう。
ArcGISを使用して見つけた最良の提案は、ドロップシャドウです:http : //blogs.esri.com/Support/blogs/mappingcenter/archive/2008/10/21/3d-effect-for-a-building-footprints.aspx
回答:
すばやく汚い方法は、建物の屋根の影のみを描画し、それらを暗い灰色(下にある地面レイヤーがある場合は半透明が望ましい)でレンダリングし、その上に建物のポリゴンを描画することです。屋根の影は、光源の方位角と高度によって確立された方向の建物の高さによって決定される距離によって建物のポリゴンを変換することによって取得されます(無限に遠いと見なされます)。(翻訳量の式は以下に表示されます。)
これは、低高度や高層ビル(高層ビルなど)を除き、問題なく動作する傾向があります。右側の高層ビルの影が建物自体からどのように分離されているかを確認してください。
建物に影を適切に接続するには、建物の壁の影を含める必要があります。 これは難しくありません。PにあるポイントとQにある別のポイントとの間に伸びる壁の影は、{P、Q、Q '、P'}で囲まれた四辺形になります。ここで、Q 'はQの影、P'はP.多角形の建物は、閉じた一連のポイント(P(1)、P(2)、...、P(n))で表される接続された多角形のコレクションです。そのようなポリゴンごとに、エッジ(P(1)、P(2))、(P(2)、P(3))、...、(P(n)、P( 1))。これは、エッジをループすることで簡単に行えます。
方位角の光に対して度(北東の)との高度のS(水平から)度、投影座標(x、y)と高さと点Pの影H(全て同じ単位で表現(メートルなど)はP '=(x-h sin(a)/ tan(s)、y-h cos(a)/ tan(s))にあります。レイヤー全体に対して一度だけsin(a)/ tan(s)とcos(a)/ tan(s)を計算する必要があり、各ポリゴンに対して高さを1回掛けるだけでオフセットを取得できますポリゴン内の各ポイントシャドウ。(実際の計算ワークロードは、これらのすべての四辺形の結合を形成するため、コードではなくGISによって実行されます。)
効果の例を次に示します。 (方位角と高度は最初の図と比べてわずかに変化しましたが、建物のポリゴンと高さ(変化します)は以前と同じです。)
リクエストへの応答として、2番目の例を作成するために使用するコードを次に示します。ほとんど誰もこの言語(Avenue)を使用していませんが、お気に入りのGISでソリューションを作成するための擬似コードとして役立つ可能性があります。(ただし、ほとんどの擬似コードとは異なり、実際に実行してテストされています。:-)非常に単純なので、説明は不要です。インデックスは1ではなく0から始まり、ポリゴンリングは明示的に閉じられていることに注意してください(リストの最後のポイントは最初のポイントと一致します)。
' S
' Return the shadow of a shape.
' Field calculator example:
' av.run("S", {[shape], [height], 200, 35})
'======================================================================'
theShape = SELF.Get(0) ' A projected polygon
xHeight = SELF.Get(1) ' Expressed in the projected units
xAzimuth = SELF.Get(2).AsRadians ' Any angle (in degrees) east of north
xAltitude = SELF.Get(3).AsRadians ' Angle between 0 and 90 (vertical)
'
' Compute the shadow offsets.
'
xSpread = 1/xAltitude.Tan
x = -xHeight * xSpread * xAzimuth.Sin
y = -xHeight * xSpread * xAzimuth.Cos
xy = x@y
'
' Begin with the original shape.
'
p = theShape.Clone
'
' Adjoin the wall shadows.
'
for each lPts in theShape.AsList ' Loop over the rings
for each i in 1..(lPts.Count-1) ' Loop over edges in this ring
l = {lPts.Get(i-1), lPts.Get(i), lPts.Get(i)+xy, lPts.Get(i-1)+xy}
p = p.ReturnUnion(Polygon.Make({l}))
end
end
return p
' end of script
あなたが話している(探している)ことは、アークマップ(バージョン?)の可能性になるとは思いません。おそらくあなたが望まない制限については、
この質問を参照してください。
利用3D AnalystエクステンションとArcSceneのを、あなたは光を追加することができますが、いくつかの制限が残っています。
問題に関するいくつかのESRI動きがありcityengineが。
影の精度セクションまでスクロールします。
私は以前lightscapeに関連付けられていました(これは廃止され、3dsmaxの内部に住んでいると確信しています)。
これで、おそらくパスはエンジニアリングビジュアライゼーション製品ラインを経由することになります...
3ds Max
3D Analystエクステンションには、シルエットとシャドウボリュームを作成するためのいくつかのツール(SkylineおよびSkyline Barrier)がありますが、スカイラインのように垂直面に投影されるコンテキストにあるため、どのようにまたは簡単に適応できるかわかりませんこの場合(水平面、地面に対して投影)。