Outdated documentation
The latest documentation was moved to docs.qfield.org
QFieldはQGISと似たようなフォームを作成できますが、完全に同じではありません。
「属性フォームの抑制」設定は、QFieldフォームに直接適用されます。
QGISでのフィールドウィジェットはできる限りサポートできるように努めています。
ウィジェットタイプ | サポートの可否 | 備考 |
---|---|---|
テキスト編集 | ✔ |
|
チェックボックス | ✔ | |
バリューマップ | ✔ | |
非表示 | ✔ | |
アタッチメント | ✔ | このフィールドはカメラ機能と統合されています。pdfやdocなどの他のファイルを開くこともできます(利用者が適切なビューアを持っている場合) アタッチメント (写真の設定) |
日付/時刻 | ✔ | |
リレーションの参照 | ✔ | |
リレーションウィジェット | ✔ | |
値のリレーション | ✔ | |
その他 | ✘ | 支援 |
詳細については、オフィシャルサイト QGIS Documentation の該当ページを参照してください。
リレーションウィジェットは全ての参照する子地物をリスト形式で表示します。それらを追加、削除したり、開いたりすることが可能です。
リストエントリの視覚的な識別は、子レイヤーの「表示式」を介して行われます。
キーの処理
親の主キーは、参照する子地物の外部キーとして使用されるため、これらの主キーは、オリジナルのデータに同期した後でも使用するために保持されなければいけません。 したがって、主キーにはUUIDなどの安定した値を使用することをお勧めします。
追加しようとしている親地物から既に存在している子地物を追加することは可能です。 親に有効な主キーがないか、制約に違反している場合、これはブロックされる可能性があります。 いくつかの子フィーチャがすでに追加された後で親地物の追加がキャンセルされた場合、子地物も削除されます。
多対多のリレーション
多対多の関係では、QGISのベクターレイヤープロパティでのカーディナリティーカラムに格納されているデータの種類がどのくらいあるかの設定に従って、追加、削除、もしくはリストのエントリを開いたりする際に子レイヤー(直接的なカーディナリティ)またはリンクされたテーブル(多対1のカーディナリティ)に直接的に影響します。
通常、2番目のケースは、リンクしているテーブルに追加の関係情報(パーセンテージなど)がある場合に使用されます。
多対多のリレーションにおける多対1のカーディナリティのケースの場合、表示名の式をリンクしているテーブルに設定する必要があります。
ウィジェットタイプの「アタッチメント」はファイルパスを保存するフィールドとして使用されます。
次のようなことに利用できます:
ファイルパスは相対パスにする必要があります。写真、PDFやドキュメントはテキストフィールド内に保存されているリンクが示すプロジェクトのサブフォルダに保存されていなければなりません。
QFieldで写真が表示されます。カメラのアイコンをクリックするとカメラが起動し新しく写真を撮影し更新できます。
写真の入ったサブディレクトリの同期をする際には、pdfとdocsもコピーする必要があります。
アタッチメントウィジェットの「ハイパーリンク」オプションは、カメラ機能を無効にし、ハイパーリンクを有効にしてドキュメント(pdf、docなど)を開きます。
ウィジェットの「値のリレーション」はコンボボックスで関連づけられたテーブルからの値を参照することを可能にします。レイヤ、キーカラム、値カラムを選択できます。標準の動作を変えるいくつかのオプション(NULL値を許容する、値で並べ替える、複数選択を許容する)があります。このウィジェットは参照する地物のドロップダウンリストか複数選択リストで表示されます。
ドラッグアンドドロップデザイナーフォームでのグループとタブの設定はサポートされます。
グループは式に基づいて非表示にすることができます。 これは、ある属性が特定の条件下でのみ必要な場合に役立ちます。 例として、木のマッピングを挙げてみましょう。いくつかの木は病気にかかっている可能性があり、あなたは想定される病気のリストを持っています。 入力フォームを多数のフィールドで分かりづらくさせないために、グループを作成し、グループ「病気」の表示設定をします。 チェックボックス付きのフィールド「病気」を追加します。 チェックボックスがチェックされている場合にのみ、病気のリストがユーザーに利用可能になります。
現場の様子を見てみましょう
属性フィールドには制約を追加できます。制約はフォームを保存することができるように True
(or 1
) に評価する必要がある式です。制約はフィールドごとに構成され、制約が満たされない場合にユーザーに表示される説明を追加できます。
この国で最も標高が高い山よりも大きな標高値を入力することはできません。
"elevation" < 5000
identifier は入力必須の項目です。
"identifier" IS NOT NULL
フィールドには初期値を設定できます。 新しい地物をデジタイズするときに、初期値が属性フォームに入力されます。 これらはユーザーに表示され、フィールドが編集可能な限り変更できます。 それらは、ジオメトリ変数または式変数に基づくことができます。
位置情報を変数として挿入します。
@position_horizontal_accuracy
現在の日付と時間を挿入します。
now()
デジタイズした線分の長さを挿入します。
length($geometry)
デバイス上のグローバル変数を構成し挿入します。
@operator_name
新しい地物が挿入される場所に基づいて地域コードを割り当てる場合は、集計式を使用して割り当てることができます。
aggregate( layer:='regions', aggregate:='max', expression:="code", filter:=intersects( $geometry, geometry( @parent ) ) )
@position_coordinate から受け取った座標をプロジェクトの座標系に変換します。
x(transform(@position_coordinate, 'EPSG:4326', @project_crs ))
y(transform(@position_coordinate, 'EPSG:4326', @project_crs ))
ラインを引いた後のスナッピングした結果を使いたい場合は、@snapping_results 変数を使います。次のコードでは、ラインの最初の点にスナッピングした属性 id の値を抽出しています。
with_variable(
'first_snapped_point',
array_first( @snapping_results ),
attribute(
get_feature_by_id(
@first_snapped_point['layer'],
@first_snapped_point['feature_id']
),
'id'
)
)
フィールドの編集可能フラグが優先されます。
QFieldは、最後に使用した値をよりきめ細かく制御することでQGIS設定を無視します。