3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

FOSS4GAdvent Calendar 2021

Day 4

CityGMLをQGISで読み込むグラフィカルモデラー

Last updated at Posted at 2021-08-20

※投稿したのは少し前のことですが、FOSS4Gのアドベントカレンダー枠が空いていたので1枠として参加します。

最新LTRの3.22.xでは,CityGML読み込み時のXY座標が反転する現象は解消しています。
3.22以上のバージョンを使っている場合はご注意ください。

はじめに

以下の記事で,PLATEAUのCityGMLを読み込めることがわかったのですが,X/Y座標が逆だったり,逆じゃなかったり,2021年8月時点では,CityGMLをQGISで読み込むときにひと手間がかかりそうなのでなので,グラフィカルモデラーでなんちゃってCityGMLローダーを作りました。

動作確認環境

  • QGIS 3.20.0
  • Windows

Conditional branch(条件分け)

今回なぜわざわざグラフィカルモデラーを使ったかというと,グラフィカルモデラーの中に
Conditional branch(条件分け)というアルゴリズムがあることに気づいたからです。これを使いこなすことができれば,様々な場面で活躍してくれることは容易に想像できます。

幸いなことに,条件分けの使い方を解説してくれている記事に出会えました。今回はこの記事に従ってCityGMLを読み込むときに,X/Y座標を入れ替えるのか否かを切り分けることにしています。

具体的な動作は,ここのmodelファイルを,開いて確認してもらうこととして,以下からはざっくりと全体像と,条件分けを設定している絵を紹介します。

グラフィカルモデラーの全体像

image.png

※ Conditional branchは一番上に書いてある「条件分け」の部分です
※ CityGMLを読み込むときに,X/Y座標を入れ替えるか・否かの2択なので,bool値の入力(図では,Flip X/Y Coordinates)を用意して,Conditional branchの中に条件を追加します。

Conditional branchの条件設定

image.png

条件分けの中に,条件を追加します。上図の通り,bool値がTrueの場合の条件と,Falseの場合の条件を追加します。「@ XY」というのが,グラフィカルモデラーに登録されている,bool値の入力名です。

Conditional branchの条件と各処理を紐づける

image.png

各アルゴリズムの設定フォームを開くと,一番下に「Dependencies」というのがあります。右側の「・・・」を選択すると,以下の画面が表示されて,先ほど作成した条件分けの条件が表示されているので,何もせずに読み込む場合は「NOT @XY」を条件とした方,XY座標を入れ替えてから読み込む場合は「@XY」を条件とした方の条件にチェックを付けます。

image.png

※ 上図は,何もせずに読む込む場合

いざ!!

image.png

作成したモデルを立ち上げると,上図のように入力レイヤを指定するフォームと,チェックボックスが1つ現れます。あとは見た目通りです。

Flip X/Y Coordinateにチェックをつけるとこうなる

image.png

Flip X/Y Coordinateにチェックをつけないとこうなる

image.png

なお,作成したグラフィカルモデラーのmodelファイルは,以下の場所で公開しています。
(利用は自己責任で)

3
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?