Verwenden von Label-Klassen im Vergleich zu Definitionsabfragen - welche Leistung ist am besten?

11

Welches bietet die beste Leistung für die Arbeit in ArcMap mit sehr großen Datenmengen, die in einer ArcSDE-Geodatabase gespeichert sind? Mehrere Beschriftungsklassen, die komplexe SQL-Abfragen verwenden, um bestimmte Features zu kennzeichnen, oder mehrere Kopien derselben Ebene, die dieselben komplexen SQL-Abfragen verwenden, die als Definitionsabfrage für jede Ebene festgelegt wurden?

ianbroad
quelle
2
Ich denke, dass "mehrere Kopien derselben Ebene mit jeweils einer eigenen Definitionsabfrage und einer einfachen feldbasierten Beschriftung" als Favorit gelten werden, aber ich habe keine Metriken, um dieses Bauchgefühl zu untermauern, daher denke ich, dass dies eine großartige Frage ist. Würde eine Feature-Class für Datei-Geodatabase mit einer Million Polygonen in Ihrer Sprache als sehr großer Datensatz gelten?
PolyGeo

Antworten:

5

Angenommen, die SQL-Abfragen für die Beschriftungsklassen sind dieselben wie für die aufgeteilten Ebenen, ist der Einzelschichtansatz mit mehreren Beschriftungsklassen schneller. Warum?:

Beim Beschriften in ArcMap wird eine Abfrage für die Ebenenzeichnung und anschließend eine Abfrage für jede Beschriftungsklasse ausgeführt. Ein Layer mit 4 Beschriftungsklassen fragt also einmal (1 Abfrage) nach allen gezeichneten Features und dann 4 weitere Male insgesamt (eine für jede Beschriftungsklasse oder 4 weitere Abfragen) = 5 Gesamtabfragen

Wenn Sie die Ebenen aufteilen, haben Sie 1 gefilterte Abfrage (Definitionsabfrage) für jede Ebene (4 Abfragen) plus dieselbe Abfrage für jede Etikettenklasse (4 weitere Abfragen) = 8 Gesamtabfragen

In fast allen Fällen sind 5 Abfragen aufgrund des einfachen Abfrageaufwands schneller als 8 Abfragen, obwohl dies von der Datenquelle abhängt.

Beachten Sie, dass in ArcGIS Server ein Cache für die Feature-Beschriftung verwendet wird und 1 Layer mit 4 Beschriftungsklassen höchstwahrscheinlich über eine Abfrage verarbeitet wird, wenn die Beschriftungsklassen Standard-SQL ohne herstellerspezifische Funktionen verwenden.

Craig Williams
quelle
2
Mit dem Definitionsabfrageszenario würde ich jedoch keine Beschriftungsklassen erstellen. Sie würden nur anhand eines einzelnen Feldwerts gekennzeichnet. Oder lese ich den dritten Absatz falsch?
Ianbroad
Beschriftungsklassen werden verwendet, um eine Teilmenge von Features zu beschriften, die durch eine SQL where-Klausel definiert sind (genau wie eine Definitionsabfrage) und über ein eigenes Textsymbol, einen eigenen Beschriftungsausdruck und eigene Platzierungsregeln verfügen. Aus Ihrer Beschreibung geht mir nicht hervor, wie Sie beim Übergang von Klassen zu einer Definitionsabfrage nur ein einzelnes Feld beschriften können. Beziehen Sie sich auf komplexe Beschriftungsausdrücke, nicht auf komplexe SQL-Abfragen?
Craig Williams
1
Nein, ich meine nur, dass für beide Szenarien keiner einen Beschriftungsausdruck verwendet. Beide sind mit einem einzigen Feld gekennzeichnet.
Ianbroad
4
Ich arbeite im Etikettierteam von Esri. Ich bin sehr vertraut damit, wie das funktioniert. Das Aufrufen des Speicherorts der Abfrage wirkt sich nicht auf die Leistung aus, Sie sollten jedoch die Gesamtzahl der Abfragen reduzieren.
Craig Williams
1
Ich glaube, ich verstehe Ihre Antwort jetzt, Craig, aber ich frage mich, ob es eine Möglichkeit gibt, sie neu zu formulieren, um das Verständnis zu erleichtern. Ich musste es ein paar Mal lesen, um zu erkennen, dass deine Mathematik wahrscheinlich nicht falsch ist, wie ich und andere zuerst dachten.
jmpreiks
2

Ich habe einige sehr einfache Tests mit einigen NHD-Daten durchgeführt, die von einer SDE-Verbindung stammen, und dabei nur einen geringen Unterschied zwischen beiden Methoden festgestellt.

  1. 7 Beschriftungsklassen in einer Ebene, auch 7 separate Symbologien: 36 Sekunden
  2. 7 Separate Ebenen mit Definitionsabfragen, jeweils eine Beschriftungsklasse ohne Abfrage: 37 Sekunden

Ein paar Einschränkungen:

  1. Mein Test war sehr einfach mit einfachen Beschriftungen und einfachen Abfragen. Komplexe Abfragen sollten getestet werden, da dies Teil der Frage war.
  2. Etwa ein Drittel der Gesamtzeit entfiel auf das Zeichnen der Symbologie.
  3. Mein Timing war mit einer Stoppuhr, daher ist die Fehlerquote ziemlich groß.
jmpreiks
quelle
+1 für deine Tests. Ich frage mich, ob es einen Unterschied macht, ob Etikettenkonflikte auftreten oder nicht. Vielleicht können Sie die Schriftgröße vergrößern, damit sich viele Etiketten überlappen. Deaktivieren Sie dann die Option Platzüberlappende Beschriftungen. Gibt es jetzt einen Unterschied?
Jens
1
Tatsächlich gab es in meinen Tests viele Etikettenkonflikte, da ich viel zeigen musste, um eine wirklich lange Verarbeitungszeit zu erhalten, die ich leicht messen konnte.
jmpreiks
1
Es gibt keine "No-Label-Klassen", wie es immer eine gibt.
Craig Williams
True Craig, ich habe meine Antwort bearbeitet, um sie zu klären.
jmpreiks
1

Ich denke, die Definitionsabfrage wäre schneller, da sie auf Objektebene und nicht auf Attributdatenebene erfolgt.

Sie müssten noch testen. Ich würde jedoch Definitionsabfragen und keine Beschriftungsklassen verwenden.

Geogeek
quelle
1
Ja, bitte testen (und melden Sie sich zurück, wenn Sie können). Ich lehne mich auch an Definitionsabfragen, aber aus Gründen der Usability-Leistung. Die Dialogfelder für Beschriftungsausdrücke sind schmerzhaft träge und mehrere Klick-Ebenen tiefer als die Def-Abfrage-Ebenen. Sie sind auch in Python leichter zu erreichen.
Matt Wilkie
Ich denke nicht, dass dies eine Antwort ohne irgendeine technische Grundlage oder quantitative Prüfung ist. Es könnte einige Leute irreführen. Wäre besser als Kommentar zur ursprünglichen Frage gewesen.
jmpreiks
Ich hätte das getan, wenn ich die Möglichkeit gehabt hätte, Kommentare abzugeben. Danke für die Abstimmung. Ich versuche nur zu helfen.
Geogeek