アイテムの任意の選択のラベルのみを表示するにはどうすればよいですか?


10

他の人がこの問題をどのように解決しようとしているのか興味があります。ラベル付けされた多数のフィーチャを持つ何かのマップを作成しました。顧客/クライアントから、X、Y、Zのラベルは、見たところ恣意的な決定(例:重要な機能と見なされるもの)に基づいてのみ表示するように求められます。これをどうやってやりますか?

いくつかのアイデア:

  • この特別なラベルの新しい文字列列を作成し、見たい機能の値のみを入力します(情報が重複する可能性があります)
  • 新しいブール列を作成し、表示したいフィーチャにtrueのフラグを付け、QGIS 1.8で条件付きラベルを使用して、ブール値がtrueの場合にのみラベルを表示します

6
2番目のアイデアには多くの利点があります:(i)ラベル付けする必要があるものを明確に文書化する、(ii)基礎となるデータセットと同じように永続的で移植性がある、(iii)表示するラベルを決定するシンプルで直接的なメカニズムを提供する( (iv)これらのラベルの選択と他の変数との関係について疑問がある場合に備えて、(v)クライアントの選択を簡潔にエンコードすることにより、分析を受け入れることもできます。 、重複する情報は作成されません。
whuber

2
@whuberはあなたがその答えを出すことができます。そうすれば私は賛成票を投じることができます。
Nathan W

回答:


11

2番目のアイデア(選択用のブール属性を作成する)には多くの利点があります。

(i)ラベル付けが必要なものを明確に文書化し、

(ii)基盤となるデータセットと同じように永続的で移植性があり、

(iii)どのラベルが表示されるかを決定するシンプルで直接的なメカニズムを提供します(別のGISまたはプロットパッケージに移植可能です)。

(iv)これらのラベルの選択と他の変数との間の関係について疑問がある場合に備えて、分析を受け入れることさえできます。

(v)クライアントの選択を簡潔にエンコードすることにより、重複する情報を作成しません。

質問で賢明に示唆されているように、ここはいくつかの一般的なデータベースの構築と管理の原則が機能しています。それらの1つは、一貫性のある情報は、可能であればデータベース内一意に表す必要があることです。(結合およびリレートを実装するためのキーとして使用される情報は、さまざまなテーブルの対応するレコードを識別する機能によって、複数の場所に表示される必要があります。)この原則には、非正規化を維持しようとした人がいるため、優れた理由があります。リレーショナルデータベースは、証明することができます:あなたは一貫してこの情報を更新したり削除したり追加すること覚えていない場合は、すべての それが表示されているテーブルでは、データベースはすぐに内部的に不整合になります。データベースは破損していて、多くの場合回復不能です。

もう1つの原則は、優れたリレーショナルデータベース設計では、各テーブルが単一の概念的な「エンティティ」、つまりデータがモデル化しているもの、またはそれらの間の関係を表す必要があるということです。クライアントが任意に見える機能の選択を指定すると、それらはテーブル内の行のサブセットを効率的に指定します。数学的には、分離公理により、これはブールフィールドでフラグを立てることと同じです。したがって、任意のデータベース内のものの意味の「任意」のサブセットは逆に、そのようなフィールドは、任意のサブセット(又は選択)を格納するための良い方法で、ブールフィールドで表されることができます。

さらにもう1つの原則は、GISの基礎となるデータ管理機能を使用して情報を格納することを好むということです。代替案は、その場限りのものですGISの「プロジェクトファイル」内またはその他の独立した方法で情報を格納する機能に基づく方法。この典型的な例は、必要なラベルを手動で選択して配置する方法です。多くの場合、これはすばやく簡単に行えます。問題は、変更が必要な場合、または作業を再現する必要がある場合に必ず発生します。これらの状況のどちらか一方は、実際には避けられません。ラベルを手動で配置することは、RDBMSの外部に非常に楕円形で情報(つまり、機能のどのサブセットにラベルを付ける必要があるか)を保存することと同じです。つまり、どのラベルが表示され、どのラベルが表示されないかによってのみ指定される選択です。次に、これらの後続の問題をどのように解決するかを考えます。

  • クライアントは、同じラベルを関連するが異なるプロジェクトの一部である異なるマップに表示したいと考えています。

  • ラベルが他の属性に関連付けられているかどうかという疑問が生じます。

  • 時間の経過とともにラベルにいくつかの変更を加えた後、元のバージョンに戻すように求められます。

このような場合、問題を解決するために必要な作業は膨大なものになる可能性があります。ラベル付けをもう一度やり直すか、データベーステーブルに対して手動でクロスチェックを実行するか、古いアーカイブプロジェクトファイルを見つけて復元する必要があります。代わりに、ラベルがデータベースのブールフィールドで表されている場合、作業はほとんど簡単です。


1
私はGISを使い始めたばかりですが、ソフトウェア開発からデータベースに関する知識を持っています。元のデータセットと1対1で結合され、おそらく透明性のためにPostgreSQLビューとして提供される個別のクライアント固有のテーブルを作成することによって、元のデータセットを保持することについてフォローアップ質問があると思います。
ブライアンケリー

はい、それも良い解決策です。データベースの知識があれば、完璧な答えが1つになることはめったにありません。常にトレードオフがあります。ルックアップテーブルはエレガントで、状況によっては最適です。実際、ラベル付けされるフィーチャのIDをリストする新しいテーブルが必要な場合がよくあります。レイヤー属性テーブルへの結合により、ラベル付けされないフィーチャに対してnullである新しい(外部)フィールドが作成されます。行ってもいい。しかし、これでデータベースで管理する新しいテーブルができました。トレードオフがあります。
whuber

8

おそらく、新しい式ベースのラベル付けでルールを設定するだけです。ルールは、結果のラベルを取得するために行っていることのドキュメントとして機能します。

「ブールフラグ」アプローチよりも優れている点は、正しいルールで作業している間、これがより柔軟になることです。基になるデータセットを変更せずに、ルールを変更して改善するのは簡単です。一方、他のGISパッケージには移植できません。

これは、6文字を超える名前と特定のクラスのフィーチャのみにラベルを付ける例です。

ここに画像の説明を入力してください


1
しかし、この場合のルールは「これらの機能は重要であり、他の機能は重要ではないと考える」です。そのための機能はないと思います:-)
ブライアンケリー

1
また、この質問は、「いつデータセットを変更する必要があり、いつコピーする必要があるか」に関係しています。でもそれはもっと大きな会話だと思う。
ブライアンケリー

これらの重要な機能には、少なくともclazz属性を使用したときと同じように使用できるIDがあると思いました。両方のソリューションには長所があります。
アンダーダーク
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.