私は実際にそれに取り組み、QGIS、GRASS、geotools + opencarto javaライブラリを使用して目標を達成しました。私はあなたに主なステップを与えることができます:
- 学術文献から、最小のMBRは建物の主な向きを見つけるための最良の方法のようです(ソーラーパネルの歩留まりを計算するために知っておくことが重要です)。まず、各建物の主な向きを計算する必要があります。opencartoのライブラリーは、(私はそれを行うには、Javaとgeotoolsに来た理由だと)そのための方法を持っています
- データをラスタライズして勾配とアスペクトを計算します(日射量の計算に必要)。シャドウを正確に取得するには、MNTを建物のラスターレイヤーとマージする必要があります。作業するバッファ半径を選択します。この手順は、たとえば山岳地帯で作業する場合に役立ちます。たとえば、山岳地帯は日射の障害になるためです。
- 年間の日射量を得る方法は2つありました。最初の1つはr.sun GRASSモジュールを使用し、日当たりの良い季節の日射量を計算する必要があるため、プロセスは非常に長くなります(以下のコードを参照-GRASS wikiから取得したと思います)この最初の方法は、年間の日射量を取得します。もう1つは、分点と至点でgdaldem hillshadeを適切なタイミングで使用して、より短く、精度が低くなります。この原則は、暗すぎる建物の一部を除外し、すべての建物に固有の放射線値を適用することです(この情報を入手するための科学的なWebサイトがあります)。
もちろん、太陽電位値を取得するためのいくつかのステップがありますが、これはより複雑な空間部分です。別のアドバイスができる場合は、プロジェクトを開始する前に、ソーラーパネルテクノロジーについて少し読んでください。多くの仮説が変更される可能性があることがわかります。
私はすでに方法にいくつかの制限があると言うことができます:
- 植生の影を考慮しない
- 屋根の傾斜を考慮しない
- 主な方向性の構築は完璧ではありません
しかし、私は、領域/地域規模で、特に農村地域にとって、方法は悪くないと思います。
この方法はおそらく完璧です(たとえば、太陽電池パネルの歩留まりの精度を上げるために、屋根の傾斜が欲しいのですが、空間データにはそれがありません)。そのため、何かアイデアがあれば、それについて読んでうれしいです。
それが役に立てば幸い!
r.sunモジュールを使用した草の太陽スクリプト:
#!/bin/sh
echo "Enter elevation map :"
read elev
g.copy rast=$elev,SOLelev
echo "Enter slope map:"
read sl
g.copy rast=$sl,SOLslope
echo "Enter aspect map :"
read asp
g.copy rast=$asp,SOLaspect
i=75
lastday=288
# we fit to the raster input region
g.region rast=SOLelev
#generate an empty map for global radiation:
r.mapcalc "global.rad=0"
while [ $i -le $lastday ]
do
# generate map names convenient for xganim and r.out.mpeg:
DAY=`echo $i | awk '{printf "%03i", $1}'`
echo "Computing radiation for day $DAY..."
r.sun -s elevin=SOLelev aspin=SOLaspect slopein=SOLslope\
day="$i"\
beam_rad=b_rad.$DAY diff_rad=d_rad.$DAY\
refl_rad=r_rad.$DAY
#add to (cell-wise) global energy:
r.mapcalc "global.rad=global.rad + b_rad.$DAY +\
d_rad.$DAY + r_rad.$DAY"
r.timestamp b_rad.$DAY date="$i days"
r.colors b_rad.$DAY col=gyr
r.timestamp d_rad.$DAY date="$i days"
r.colors d_rad.$DAY col=gyr
r.timestamp r_rad.$DAY date="$i days"
r.colors r_rad.$DAY col=gyr
i=`expr $i + 1`
done
#cleanup:
g.remove rast=SOLelev,SOLaspect,SOLslope
g.mremove -f rast="b_rad*"
g.mremove -f rast="d_rad*"
g.mremove -f rast="r_rad*"
echo "Finished."