5.3. Lesson: フォーム

デジタイズで新しいデータを追加する場合、その地物の属性を入力するダイアログが表示されます。ただし、このダイアログボックスは既定ではあまり見た目がよくありません。これは特に大規模なデータセットを作成する場合や他の人にデジタイズを手伝って貰うときに既定のフォームではわかりにくい場合に、有用性の問題を引き起こす可能性があります。

幸いにも、QGISではレイヤに独自のカスタムダイアログを作成できます。このレッスンではその方法について説明します。

このレッスンの目標: レイヤのフォームを作成します。

5.3.1. basic Follow Along: QGISのフォームデザイン機能の使用

  1. レイヤ パネルで roads レイヤを選びます

  2. 前にやったように 編集モード に入ります

  3. roads レイヤの属性テーブルを開きます

  4. テーブルのどこかのセルで右クリックします。 フォームを開く を含んだ短いメニューが現れます。

  5. それをクリックして、QGISがこのレイヤのために生成するフォームを見てみましょう

明らかに、毎回 属性テーブル で特定の街路を検索するのではなく、地図を見ながらこれを行うことができるといいですね。

  1. レイヤ パネルで roads レイヤを選びます

  2. identify 地物情報表示 ツールを使って、地図上の任意の街路をクリックします。

  3. 地物情報 パネルが開き、フィールドの値やクリックした地物に関する一般的な情報をツリー表示で確認することができます。

  4. パネル上部の options 地物情報表示の設定 メニューから 単一地物の場合、自動でフォームを開く チェックボックスをオンにします。

  5. さて、地図内のどれかの街路をもう一度クリックします。前の 地物情報 ダイアログに沿って今やおなじみのフォームが表示されます:

    ../../../_images/roads_form.png
  6. 単一地物の場合、自動でフォームを開く がチェックされている限り、 識別 ツールで1つの地物をクリックするたびに、 そのフォームがポップアップ表示されます。

5.3.2. basic Try Yourself フォームを使用して値を編集する

編集モードの場合は、このフォームを使用して地物の属性を編集できます。

  1. 編集モードをアクティブにします (まだアクティブになっていない場合)。

  2. identify地物情報表示 ツールを使って Swellendam を通る大通りをクリックします:

    ../../../_images/main_street_selected.png
  3. その highway の値を secondary に編集します

  4. 編集モードを終了し、編集内容を保存します

  5. 属性テーブル を開くと、属性テーブルの値が更新されたことがわかります。つまり、ソースデータも更新されています。

5.3.3. moderate Follow Along: フォームのフィールドタイプを設定する

フォームを使用して編集するのはよいのですが、まだ何もかも手で入力しなければいけません。幸いにも、フォームには様々な方法でデータの編集ができる様々な種類の、いわゆる ウィジェット を持ちます。

  1. roads レイヤの プロパティ... を開きます

  2. 属性 タブに切り替えます。次が表示されます:

    ../../../_images/fields_panel.png
  3. 属性フォーム タブに切り替えます。このように表示されます:

    ../../../_images/attributes_form.png
  4. oneway の行をクリックし、オプションのリストから ウィジェットタイプ として チェックボックス を選択します:

    ../../../_images/checkbox_selected.png
  5. OK をクリックします

  6. (もし roads レイヤが編集モードになっていなければ)編集モードに入ります

  7. identify 地物情報表示 ツールをクリックします

  8. 前に選んだのと同じ大通りをクリックします

これで oneway 属性の隣に True (チェック済み) または False (チェックなし) を示すチェックボックスが表示されることがわかるでしょう。

5.3.4. hard Try Yourself

highway フィールドに、より適切なフォームウィジェットを設定します。

5.3.5. hard Try Yourself テストデータの作成

まったくのゼロから独自のカスタム フォームを設計することもできます。

  1. 次の2つの属性を持つ test-data という名前の簡単なポイントレイヤを作成します:

    • name (text)

    • age (integer)

    ../../../_images/new_point_layer.png
  2. デジタイズツールを使用して新しいレイヤ上にいくつかのポイントを追加してテスト用データを作成します。新しいポイントをキャプチャするたびにQGISの既定の属性フォームが表示されます。

    注釈

    以前の作業の時からスナップを有効にしたままの場合、スナップを無効にする必要があります。

    ../../../_images/new_point_entry.png

5.3.6. hard Follow Along: 新しいフォームの作成

さて、属性データを取得するときに使う、独自のカスタムフォームを作成したいと思います。これを行うには、 QT Designer をインストールする必要があります(フォームを作成する人だけが必要です)。

  1. QT Designer を起動します。

  2. 表示されるダイアログで新しいダイアログボックスを作成します:

    ../../../_images/qt_new_dialog.png
  3. 画面の左側(デフォルト)にある ウィジェットボックスLine Edit アイテムを探します。

  4. このアイテムをクリックしてフォームにドラッグします。フォーム上に新しい Line Edit が作成されます。

  5. Line Edit要素を選択すると、その プロパティ が画面の片側に沿って表示されます(デフォルトで右側):

    ../../../_images/qt_line_edit.png
  6. その名前を name にします。

  7. 同じ方法で、新しい Spin Box を作成し、その名前を age に設定します。

  8. 新しい人を追加する というテキストを太いフォントで書いた ラベル を追加します(設定方法は、オブジェクトの プロパティ を見てください)。また、(ラベルを追加するのではなく)ダイアログ自体のタイトルを設定することもできます。

  9. Line EditSpin Box に、 ラベル を追加します。

  10. 自分の好きなように要素をアレンジしてください。

  11. ダイアログの任意の場所をクリックします。

  12. フォームレイアウト ボタンを探します(デフォルトでは画面の上端に沿ったツールバーにあります)。これで、ダイアログが自動的にレイアウトされます。

  13. ダイアログの最大サイズ(プロパティ)を 200 (幅) × 150 (高さ) に設定します。

  14. このようなフォームになるはずです:

    ../../../_images/qt_example_form.png
  15. 新しいフォームを exercise_data/forms/add_people.ui という名前で保存します

  16. 保存が完了したら、 Qt Designer を終了します。

5.3.7. hard Follow Along: レイヤをフォームに関連付ける

  1. QGISに戻ります

  2. 凡例で test-data レイヤをダブルクリックしてプロパティにアクセスします。

  3. レイヤプロパティ ダイアログの Attributes Form タブをクリックします

  4. 属性エディタレイアウト ドロップダウンボックスで ui-ファイルを提供する を選択します。

  5. 楕円形ボタンをクリックし、先ほど作成した add_people.ui ファイルを選択します:

    ../../../_images/provide_ui_file.png
  6. レイヤプロパティ ダイアログで、 OK をクリックします

  7. 編集モードに入り、新しいポイントを取り込みます

  8. そうするとカスタムダイアログが表示されます(QGISが通常作成するものの代わりに)。

  9. identify 地物情報表示 ツールを使ってポイントの一つをクリックした場合、識別結果ウィンドウで右クリックして、コンテキストメニューから View Feature Form を選択すると、フォームを表示することができるようになりました。

  10. このレイヤの編集モードになっている場合、コンテキストメニューには Edit Feature Form が表示され、最初のキャプチャ後でも新しいフォームで属性を調整することができるようになります。

5.3.8. In Conclusion

フォームを使用すればデータの編集や作成がもっと楽になります。ウィジェットの種類を編集するか全くのゼロから新しいフォームを作成することで、新しいデータをデジタイズをする人のエクスペリエンスをコントロールできます。それによって誤解や不必要なエラーを最小限に押さえることができます。

5.3.9. Further Reading

もし上記の上級編を完了し、Pythonの知識があれば、データ検証、オートコンプリートなどを含む高度な機能を可能にするPythonロジックによるカスタム機能フォームの作成についての このブログエントリー をチェックするとよいでしょう。

5.3.10. What's Next?

地物フォームを開くことはQGISができる標準的な操作の1つです。一方で、自ら定義したカスタムアクションを実行させることもできます。これは次のレッスンのテーマです。