Wie werden nur Beschriftungen für eine beliebige Auswahl von Elementen angezeigt?


10

Ich bin gespannt, wie andere dieses Problem lösen: Sie haben eine Karte für etwas mit einer großen Anzahl von Funktionen erstellt, die beschriftet sind. Der Kunde / Kunde bittet Sie, nur Beschriftungen für X, Y und Z anzuzeigen, basierend auf einer scheinbar willkürlichen Entscheidung (z. B. was sie für wichtige Merkmale halten). Wie würden Sie das machen?

Einige Ideen:

  • Erstellen Sie eine neue Zeichenfolgenspalte für diese spezielle Bezeichnung und geben Sie nur einen Wert für die Features ein, die angezeigt werden sollen (dies kann zu doppelten Informationen führen).
  • Erstellen Sie eine neue boolesche Spalte und kennzeichnen Sie die Features, die angezeigt werden sollen, mit true. Verwenden Sie dann die bedingte Beschriftung in QGIS 1.8, um die Beschriftung nur anzuzeigen, wenn der boolesche Wert true ist

6
Die zweite Idee hat viele Vorteile: (i) Sie dokumentiert klar, was gekennzeichnet werden muss, (ii) sie ist so dauerhaft und portabel wie der zugrunde liegende Datensatz, (iii) sie bietet einen einfachen und direkten Mechanismus, um zu bestimmen, welche Beschriftungen angezeigt werden ( (iv) es ist sogar für ein anderes GIS- oder Plot-Paket portierbar), (iv) es kann sogar analysiert werden, falls jemals Fragen zu den Beziehungen zwischen diesen Auswahlmöglichkeiten von Etiketten und anderen Variablen auftreten, und (v) indem die Auswahl des Kunden sparsam codiert wird Es werden keine doppelten Informationen erstellt.
whuber

2
@whuber kannst du das zu einer Antwort machen, damit ich darüber abstimmen kann, denn genau so würde ich es machen.
Nathan W

Antworten:


11

Die zweite Idee (ein boolesches Attribut zur Auswahl zu erstellen) hat viele Vorteile :

(i) es dokumentiert klar, was gekennzeichnet werden muss,

(ii) es ist so dauerhaft und portabel wie der zugrunde liegende Datensatz,

(iii) es bietet einen einfachen und direkten Mechanismus, um zu bestimmen, welche Etiketten angezeigt werden (der sogar auf ein anderes GIS oder Plotpaket portierbar ist),

(iv) es ist sogar für eine Analyse zugänglich, falls es jemals Fragen zu den Beziehungen zwischen diesen Auswahlmöglichkeiten von Bezeichnungen und anderen Variablen gibt, und

(v) durch sparsame Kodierung der Wahl des Kunden werden keine doppelten Informationen erstellt.

Hier gelten einige allgemeine Prinzipien für die Erstellung und Verwaltung von Datenbanken , wie in der Frage mit Bedacht vorgeschlagen. Eine davon ist, dass kohärente Informationen nach Möglichkeit in der Datenbank eindeutig dargestellt werden sollten. (Informationen, die als Schlüssel zum Implementieren von Verknüpfungen und Bezügen verwendet werden, müssen natürlich an mehreren Stellen erscheinen, da sie dazu dienen, entsprechende Datensätze in verschiedenen Tabellen zu identifizieren.) Es gibt ausgezeichnete Gründe für dieses Prinzip, wie jeder, der versucht hat, einen nicht normalisierten Wert beizubehalten Eine relationale Datenbank kann bestätigen: Wenn Sie nicht konsequent daran denken, diese Informationen zu aktualisieren, zu entfernen oder zu allen hinzuzufügen In der Tabelle, in der es angezeigt wird, wird Ihre Datenbank bald intern inkonsistent: Sie ist beschädigt, oft unwiederbringlich.

Ein weiteres Prinzip ist, dass in einem guten relationalen Datenbankdesign jede Tabelle eine einzelne konzeptionelle "Entität" darstellen sollte : etwas, das die Daten modellieren, oder eine Beziehung zwischen diesen Dingen. Wenn ein Client eine scheinbar willkürliche Auswahl von Features angibt, gibt er effektiv eine Teilmenge von Zeilen in einer Tabelle an. Mathematisch gesehen ist dies nach dem Axiom der Trennung dasselbe wie das Markieren mit einem Booleschen Feld. Somit kann jede sinnvolle "beliebige" Teilmenge von Dingen in einer Datenbank durch ein boolesches Feld dargestellt werden, und umgekehrt ist ein solches Feld eine gute Möglichkeit, beliebige Teilmengen (oder Auswahlen) zu speichern.

Ein weiteres Prinzip ist, dass Sie es vorziehen sollten , die zugrunde liegenden Datenverwaltungsfunktionen des GIS zum Speichern von Informationen zu verwenden . Die Alternative ist eine Ad-hoc- AlternativeMethode, die auf der Fähigkeit des GIS basiert, Informationen in seinen "Projektdateien" oder auf andere unabhängige Weise zu speichern. Ein typisches Beispiel hierfür ist die manuelle Auswahl und Platzierung der gewünschten Etiketten. Oft ist dies schnell und einfach möglich. Die Probleme treten immer dann auf, wenn entweder eine Änderung erforderlich ist oder die Arbeit reproduziert werden muss. Die eine oder andere dieser Situationen ist praktisch unvermeidlich. Die manuelle Platzierung der Beschriftungen ist gleichbedeutend mit der extrem elliptischen Speicherung von Informationen (dh welche Teilmenge von Merkmalen beschriftet werden soll) außerhalb des RDBMS. Die Auswahl gibt nämlich nur an, welche Beschriftungen erscheinen und welche nicht. Überlegen Sie, wie Sie diese Folgeprobleme lösen könnten:

  • Der Kunde möchte, dass dieselben Beschriftungen in einer verwandten, aber unterschiedlichen Karte angezeigt werden, die Teil eines anderen Projekts ist.

  • Es stellt sich die Frage, ob die Beschriftungen einem anderen Attribut zugeordnet sind.

  • Nachdem Sie im Laufe der Zeit mehrere Änderungen an den Beschriftungen vorgenommen haben, werden Sie aufgefordert, zur Originalversion zurückzukehren.

In diesen Fällen kann der Aufwand zur Lösung des Problems enorm sein: Sie müssen die Beschriftung erneut wiederholen oder manuelle Gegenprüfungen für Datenbanktabellen durchführen oder eine alte archivierte Projektdatei suchen und wiederherstellen. Wenn die Beschriftungen stattdessen durch ein boolesches Feld in der Datenbank dargestellt würden, wäre die Arbeit fast trivial.


1
Ich fange gerade erst mit GIS an, habe aber einige Datenbankkenntnisse aus der Softwareentwicklung. Ich vermute, dass ich bald eine weitere Frage zum Erhalt des Originaldatensatzes haben werde, indem ich eine separate, kundenspezifische Tabelle erstelle, die 1: 1 mit dem Originaldatensatz verknüpft und möglicherweise als PostgreSQL-Ansicht für Transparenz bereitgestellt wird.
Brian Kelly

Ja, das ist auch eine gute Lösung. Mit Ihrem Datenbankwissen wissen Sie, dass es selten eine perfekte Antwort gibt. Es gibt immer Kompromisse. Eine Nachschlagetabelle ist elegant und für einige Situationen perfekt. Tatsächlich benötigen Sie häufig nur eine neue Tabelle, in der die IDs der zu beschriftenden Features aufgelistet sind: Durch die Verknüpfung mit der Layer-Attributtabelle wird ein neues (fremdes) Feld erstellt, das für die nicht zu beschriftenden Features null ist, und Sie sind es gut zu gehen. Aber jetzt müssen Sie eine neue Tabelle in der Datenbank verwalten: Es gibt einen Kompromiss.
whuber

8

Sie können die Regel wahrscheinlich einfach in der neuen ausdrucksbasierten Beschriftung festlegen. Die Regel dient als Dokumentation dessen, was Sie getan haben, um die resultierenden Beschriftungen zu erhalten.

Der Vorteil gegenüber dem "Booleschen Flag" -Ansatz besteht darin, dass dies flexibler ist, wenn an der richtigen Regel gearbeitet wird. Es ist einfach, die Regel zu ändern und zu verbessern, ohne den zugrunde liegenden Datensatz zu ändern. Andererseits ist es nicht auf andere GIS-Pakete portierbar.

Dies ist ein Beispiel, in dem ich Features nur mit Namen beschrifte, die länger als sechs Zeichen sind, und mit einer bestimmten Klasse:

Geben Sie hier die Bildbeschreibung ein


1
In diesem Fall lautet die Regel jedoch "Ich halte diese Funktionen für wichtig und die anderen für nicht wichtig". Ich glaube nicht, dass es dafür eine Funktion gibt :-)
Brian Kelly

1
Diese Frage hängt auch mit "Wann sollte ich einen Datensatz ändern und wann soll ich ihn kopieren?" Ich vermute, dass dies ein viel größeres Gespräch ist.
Brian Kelly

Ich habe nur angenommen, dass diese wichtigen Funktionen zumindest eine ID haben, die Sie so verwenden können, wie ich das clazz-Attribut verwendet habe. Beide Lösungen haben Vorteile.
Underdark
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.