ラベルクラスと定義クエリの使用-どれが最も効果的ですか?


11

ArcSDEジオデータベースに格納された非常に大きなデータセットを使用して、ArcMap内で作業する場合に最高のパフォーマンスを提供するのはどれですか?特定のフィーチャにラベルを付けるために複雑なSQLクエリを使用する複数のラベルクラス、または各レイヤーの定義クエリとして設定される同じ複雑なSQLクエリを使用する同じレイヤーの複数のコピー?


2
「それぞれ独自の定義クエリと単純なフィールドベースのラベリングを使用した同じレイヤーの複数のコピー」がお気に入りになると思いますが、その直感をバックアップするメトリックがないため、これは素晴らしい質問だと思います。100万個のポリゴンを持つファイルジオデータベースフィーチャクラスは、あなたの用語では非常に大きなデータセットと見なされますか?
PolyGeo

回答:


5

ラベルクラスのSQLクエリが分割されたレイヤーのSQLクエリと同じであると仮定すると、複数のラベルクラスを使用したシングルレイヤーアプローチの方が高速になります。なぜ?:

ArcMapのラベリングは、レイヤー描画に対して1つのクエリを実行し、次に各ラベルクラスに対して1つのクエリを実行します。したがって、4つのラベルクラスを持つレイヤーは、描画されたすべてのフィーチャに対して1回(1クエリ)クエリし、合計4回(ラベルクラスごとに1つまたはさらに4つのクエリ)=合計5つのクエリ

レイヤーを分割すると、各レイヤーにフィルターされたクエリ(定義クエリ)が1つ(4つのクエリ)プラス各ラベルクラスに同じクエリ(4つ以上のクエリ)=合計8つのクエリがあります

ほとんどすべての場合、データソースに依存しますが、単純なクエリオーバーヘッドのため、5つのクエリは8つのクエリよりも高速です。

ArcGIS Serverでは、フィーチャラベリングにキャッシュが使用され、ラベルクラスがベンダー固有の機能を持たないかなり標準的なSQLを使用する場合、1つのクエリで4つのラベルクラスを持つ1つのレイヤーが処理される可能性があります。


2
しかし、定義クエリのシナリオでは、ラベルクラスを作成しません。単一のフィールド値に基づいてラベルが付けられます。または、3番目の段落を間違って読んでいますか?
ianbroad 14

ラベルクラスは、SQL where句(定義クエリとまったく同じ)で定義された機能のサブセットにラベルを付けるために使用され、独自のテキストシンボル、ラベル式、および配置ルールを持ちます。あなたの説明から、クラスから定義クエリに移動すると、単一のフィールドにラベルを付けることができるかどうかはわかりません。複雑なSQLクエリではなく、複雑なラベル式を参照していますか?
クレイグウィリアムズ14

1
いいえ、両方のシナリオで、どちらもラベル式を使用しないことを意味します。両方とも単一のフィールドを使用してラベル付けされます。
ianbroad 14

4
Esriのラベリングチームで働いています。私はこれがどのように機能するかをよく知っています。クエリの場所を呼び出してもパフォーマンスには影響しませんが、クエリ全体の数を減らしたいと思うでしょう。
クレイグウィリアムズ14年

1
私はあなたの答えを今クレイグを理解していると思いますが、理解しやすくするためにそれを言い換える何らかの方法があるのだろうかと思います。私や他の人が最初に考えたように、あなたの数学がおそらく間違いではないことを理解するために、私はそれを数回読まなければなりませんでした。
jmpreiks 14年

2

SDE接続からのNHDデータを使用していくつかの非常に簡単なテストを実行しましたが、どちらの方法にもほとんど違いはありませんでした。

  1. 単一レイヤーの7つのラベルクラス、7つの個別のシンボル:36秒
  2. 7定義クエリを使用したレイヤーの分離、クエリなしの各ラベルの単一ラベルクラス:37秒

いくつかの注意事項:

  1. 私のテストは単純なラベルと単純なクエリで非常に簡単でした。それは質問の一部であったため、複雑なクエリをテストする必要があります。
  2. 合計時間の約3分の1がシンボルの描画に費やされました。
  3. 私のタイミングはストップウォッチでしたので、エラーのマージンはかなり大きいです。

テストのために+1。ラベルの競合が発生するかどうかに違いがあるのだろうか?おそらく、多くのラベルが重なるようにフォントサイズを拡大できます。次に、重複ラベルの配置オプションを無効にします。今違いはありますか?
イェンス14年

1
実際には、簡単に測定できる非常に長い処理時間を得るためにかなりの範囲を表示する必要があるため、テストでラベルの競合が多く発生しました。
jmpreiks 14年

1
常に存在するため、「ラベルクラスなし」というものはありません。
クレイグウィリアムズ14年

True Craig、答えを編集して明確にしました。
jmpreiks 14年

1

定義クエリは、属性データレベルではなくオブジェクトレベルであるため、より高速になると思います。

それでもテストする必要があります。ただし、ラベルクラスではなく定義クエリを使用します。


1
はい、テストしてください(可能な場合は報告してください)。定義クエリにも頼りますが、使いやすさのパフォーマンス上の理由からです。ラベル式ダイアログは痛ましいほど遅く、いくつかのクリックレイヤはdefクエリのものよりも深くなっています。また、Pythonで簡単に取得できます。
マットウィルキー14年

何らかの技術的基礎や定量的なテストがなければ、これが答えと見なされるとは思いません。一部の人々を誤解させる可能性があります。元の質問へのコメントとして良かったでしょう。
jmpreiks

私がコメントする能力があれば、私はそれをしたでしょう。反対票をいただきありがとうございます。手伝おうとしています。
geogeek 14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.