コンテンツへスキップ
AI Segmentation
QGIS
チュートリアル

QGISで太陽光パネルを検出する5つの方法

公開日 更新日

郊外の同じ屋根を並べた3枚:通常の空中写真、OpenStreetMapの太陽光発電所を疎い輪郭で重ねたもの、すべてのアレイを個別ポリゴンで検出したもの。

屋根上の太陽光パネルをQGISで地図にするなら、まず他の人がすでに描いたデータを使います。「ベクタ」→「QuickOSM」→「QuickOSM…」を開き、keyにgenerator:source、valueにsolarを入れて、対象範囲で実行します。OpenStreetMapにはこのタグを持つ6,143,024個のオブジェクトがあり(2026年9月3日時点)、調査が進んだ町なら2分で終わります。カバレッジが薄い地域では自分でアレイを検出することになり、手法はバンド数とピクセルサイズで決まります。

入力手法コスト
OpenStreetMapが整備済みの地域方法1:QuickOSM無料
マップキャンバスに表示できるラスタならどれでも、どのコンピュータでも方法2:クラウドのセグメンテーションモデル月1.5km²まで無料、その後€39
近赤外バンド付きのマルチスペクトル画像方法3:「ラスタ」→「ラスタ計算機」無料、QGISコア
4バンド以上、かつ学習用の範囲を描く時間がある方法4:Semi-Automatic Classification Plugin無料のプラグイン
20cm前後のRGBオルソ画像、GPUか辛抱強さ方法5:Deepness+Solar PVモデル無料

価格、プラグインのバージョン、タグの件数は、すべて2026年9月3日時点です。

方法1:すでにある地図データを使う

QGISは3.0で独自のOSMダウンローダを廃止し、QuickOSMを案内しています。まずこれをインストールします。

発電設備を検索する

「ベクタ」→「QuickOSM」→「QuickOSM…」でkeyにgenerator:source、valueにsolarを入れ、範囲か地名を指定して実行します。屋根上のアレイはpower=generatorを持ち、多くはgenerator:method=photovoltaicも持っています。

発電所は別に検索する

野立てのメガソーラーはpower=plant+plant:source=solarでタグ付けされており、別のクエリになります。これを忘れると、野立てがすべてレイヤから漏れます。

kWはレジストリで確認する

ドイツのMarktstammdatenregisterは日次のXMLで提供されますが、30kW以下の設備は座標が伏せられ、屋根上のものは郵便番号の単位までしかわかりません。フランスのレジストリはIRIS区止まりで、36kW未満は集計行にまとめられています。

QGISのQuickOSMダイアログ。keyにgenerator:source、valueにsolarを入力し、小さな町の航空写真の上に、検索で得られた太陽光発電のポリゴンが描かれている。
QuickOSMのクエリ1回、keyはgenerator:source、valueはsolar。地元のマッパーが調べ済みの地域なら、作業はこれだけで終わります。

学習用や検証用に使える公開データは3つあります。Bradbury et al.はカリフォルニアの4都市で、注釈付きの19,863個のPVポリゴンを30cmで公開しており、ライセンスはCC0です。BDAPPVはフランスの28,807件の設備とマスクを含み、CC BY 4.0です。DeepSolarは米国本土で147万件のシステムを数えましたが、公開されたのは国勢調査区ごとの件数で、ポリゴンではありません。

使う場合: 対象地域が調査済みの場合、または形状より容量が必要な場合。

見送る場合: カバレッジにムラがある場合。ムラは見て初めてわかります。

方法2:クラウドのセグメンテーションモデル

セグメンテーションモデルはアレイの見た目を学習済みのため、方法3や方法4では難しい、暗い屋根との分離ができます。その1つを私たちが開発しています。AI Segmentationです。この節では当社のツールを扱います。

マップキャンバスに表示されているラスタの上に範囲を描き、solar panelと入力すると、アレイごとにプロジェクトのCRSのポリゴンが返り、面積と信頼度スコアが付きます。モデルは欧州にある当社のサーバーで動くため、カードもPython環境も必要ありません。

QGISの航空写真上にある農場の建物の屋根。5つの太陽光パネルのグループが、それぞれ別の色のポリゴンで縁取られ、その間の何もない屋根はそのまま残っている。
農場の屋根での1回の実行結果。5つのアレイのグループがそれぞれ別のポリゴンになり、間の何もない屋根は対象外のままです。

2026年7月5日から9月1日の間に、社外の47人がsolar panelを104回実行し、15.6%のタイルは空で返りました。エクスポートされた96回の実行では、モデルが40,088個の候補を見つけ、そのうち14,245個(35.5%)が残って、パネルの面積は合計496,931m²になりました。

solar panelと入力し、solar farmとは入力しないでください。後者は設備全体を尋ねる指示になるため、モデルは一様な1つの面を返すか、何も返しません。実行例は少ないものの、24タイル中21タイルが空でした。

最適: 地区規模の屋根上アレイを、どのコンピュータでも。

不向き: モジュール数。密なアレイは1つの面として返るため、QGISで分割するか、既知のモジュール寸法で割ります。住宅用モジュールは約1.7m×1.1mです。

価格: 月1.5km²まで無料、カード不要。Proは月€39(税抜)。Proを7日間無料でお試しいただけます。カードを登録し、期間が終わる前に解約すれば、料金は請求されません。

実行環境: 欧州にある当社のサーバー。

インストール: プラグインマネージャからインストールします(QGIS 3.22以降)。その後はパネルからログインします。

方法3:ラスタ計算機でしきい値処理

投影座標系のCRSで作業してください。以下の2つの手順は、レイヤの単位で面積を取るためです。

航空写真の切り抜き4枚を横に並べたもの。屋根上の太陽光パネル、方形の天窓が格子状に並ぶ倉庫の屋根、温室の屋根、野外に並ぶ太陽熱集熱器。
4枚の切り抜きで、幅はいずれも90m。発電しているのは最初の1枚だけ。最初の3枚はFreiburg、最後の1枚はデンマークのBraedstrupにある地域熱供給プラント。

「ラスタ」→「ラスタ計算機」を開きます。アルゴリズムIDはnative:rastercalcです。パネルは暗く、近赤外では暗い屋根よりさらに暗くなるため、赤とNIRの正規化指標で多くのシーンを分離できます。その後、gdal:sieveで斑点を除き、gdal:polygonizeでポリゴン化します。

RGBの3バンドでは、暗い屋根とパネルが同じ値になるため、この方法は失敗します。たいていはテクスチャが救いになります。grass:r.textureは13種のGLCM指標を計算し、アレイはコントラストが高く、逆差分モーメントが低くなります。GRASSはWindowsのインストーラには同梱されますが、macOSのバンドルには入っていません。

使う場合: 近赤外バンド付きの、きれいな1シーンがある場合。

見送る場合: 画像がRGBの場合、または別の日に撮影したモザイクで、しきい値を全体に通す必要がある場合。

方法4:SCPで教師付き分類

Semi-Automatic Classification Pluginは、SCPメニューとSCP Dockを追加します。Band setを作り、パネルと、紛らわしい各対象にROIを描き、Maximum Likelihood、Minimum Distance、Spectral Angle Mapping、Random Forest、Support Vector Machine、Multi-layer Perceptronのいずれかで分類します。QGIS 3.xでインストールされるのはバージョン8.5.0で、GPL v3、ダウンロード数は2,644,482回です。

そのFAQは、多くの人が使う入力をはっきり除外しています。「You cannot use orthophotos with less than 4 bands」。4バンド未満では、アルゴリズムがクラスを分けられないためです。

使う場合: 4バンド以上があり、再現できる形で文書化された分類が必要な場合。

見送る場合: 入力がRGBオルソ画像やベースマップの場合。

方法5:Deepnessでローカルモデルを使う

地上解像度がすべてを決めます。Bradbury et al.は、「solar panels are typically between 1 and 2 meters in length」であるため、基準となるPVデータセットを30cmで作成しました。これで各パネルに数ピクセルが載ります。解像できるのはアレイであり、その中のモジュールではありません。Clark and Pacificiは、個々のパネルは「difficult to distinguish even at 15.5 cm resolution」としています。公開されている屋根上PVの研究は、10cm〜31cmの範囲にあります。10mのSentinel-2は野立て向けで、屋根には使いません。

DeepnessはQGIS内でONNXモデルを実行するプラグインで、無料、Apache 2.0です。モデルZOOには、Kleebauer et al.が学習しFraunhoferがホストするSolar PV Segmentationモデルが20cm/pxで入っています。オルソ画像を指定するとパネルのマスクが得られます。アカウントは不要で、画像がお使いのコンピュータの外に出ることもありません。

課題は速度です。あるユーザーは同じモデルをCPUで計測し、「80+ minutes for a digital Orthophoto tile (20 cm resultion, 5000 points in each direction)」と報告しました。そのissueは今も未解決です。このモデルのほかに、保守の行き届いた屋根上PVの公開モデルはありません。

使う場合: 画像をコンピュータの外に出せず、オルソ画像が20cm前後の場合。

見送る場合: NVIDIAカードがなく、広い地区を対象にする場合。

5手法の比較表

QuickOSMAI Segmentationラスタ計算機SCPDeepness
必要なバンド数なし3NIRが有効4以上3
画像は手元に残るはいいいえはいはいはい
GPUいいえいいえいいえいいえ推奨
出力OSMのポリゴンアレイごとのポリゴンラスタマスククラスのラスタパネルのマスク
コスト無料月1.5km²まで無料、その後€39無料無料無料

覚えておくこと

まずOpenStreetMapを引きます。調査済みの町は2分で終わり、現地を歩いたマッパーに検出は勝てません。

画像をコンピュータから出せない場合は、DeepnessとそのローカルのSolar PVモデルなら、すべてお使いのコンピュータ上で処理できます。

RGBのベースマップでは、ラスタ計算機もSCPも使えません。どちらも値だけではパネルと暗い屋根を分けられないからです。

30cm前後ならアレイは解像できますが、その中のモジュールはどの解像度でも解像できません。面積を描き、画像からパネル数は数えないでください。

kWは電力のレジストリから取り、写真からは取りません。フランスとドイツのどちらのレジストリも、小規模な屋根上設備の位置をぼかしています。

QGISで無料で試す。カード不要

よくある質問

QGIS単体で太陽光パネルを検出できますか?

いいえ。QGISコアにあるのはしきい値処理とポリゴン化で、どちらも分光的な差が必要なため、RGBのベースマップでは何も得られません。検出はプラグインで行い、ローカルならDeepness、クラウドなら当社のものを使います。

必要な画像解像度はどれくらいですか?

目安は30cm前後で、アレイが見えます。Bradbury et al.に倣った基準です。個々のモジュールは15.5cmでも見分けにくいため、パネルの数を数えるのではなく、アレイと面積を描く前提で組んでください。

パネルと暗い屋根を見分けるにはどうすればよいですか?

3バンドでは、値だけでは見分けられません。近赤外バンド、grass:r.textureのようなテクスチャ指標、またはアレイの見た目を学習したモデルを使います。

野立ての太陽光発電所も見つかりますか?

はい。OpenStreetMapでは別のクエリになり、power=plant+plant:source=solarを使います。モデルでは、野立てにもsolar panelと入力します。モデルは各パネルを検出するのであり、敷地全体を検出するのではないからです。

設置されているパネルの数を数えられますか?

画像からは数えられません。検出で得られるのは外形と面積です。モジュール数とkWはレジストリから取り、フランスではIRIS区止まりです。

建物フットプリントのガイドでは絞り込みの手順を詳しく解説し、QGISでのSAMの記事では、これらのモデルが得意な対象を扱っています。検出と面積の集計を、プラグインを手で操作する代わりに1つの指示でまとめて実行したい場合は、AI Agentが同じQGISプロジェクトの中で行います。QGIS AIハブではプラグインを比較しており、製品ページはAI Segmentationです。