Daten definierte Etikettenposition für mehr als eine Skala in einer Schicht

9

Ich suche eine bessere Etikettierungslösung für meine Projekte. Es scheint schwierig zu sein - aber vielleicht bin ich nur blind?

Meine Projekte: Ich baue gedruckte Fahrradwanderbücher. Der Hauptskala ist 1: 75k und es gibt eine Stadtskala von 10k und eine Übersichtsskala von 200k. Da ich eine "kartografische" Qualität von Etikettenplatzierungen haben möchte, berühre ich jedes einzelne Etikett und verschiebe es an die beste Position. Ich muss dies für jede einzelne Skala tun, damit meine Beschriftungsspalten für 3 Skalen so aussehen ('Skala 1' steht für 10k 'Skala 2' für 75k und 'Skala 3' für 200k):

Geben Sie hier die Bildbeschreibung ein

Bevor ich jedoch versuche, dies im Detail zu erklären, erstelle ich dieses einfache Beispielprojekt, in dem Sie meine (alte) Beschriftungslösung für drei Skalen sehen und testen können: http://www.map-site.de/tmp/LabelingExample.zip

Nun, es funktioniert aber:

  • Sie benötigen Beschriftungsspalten für jede Skala
  • Sie benötigen für jede Skala eine Ebene

Ich suche nach einer viel besseren Lösung ohne doppelte Ebenen und Tonnen von Spalten. Ich zähle auf deine kreativen Köpfe!

EDIT: Ich habe diese zwei sehr dichten Karten als Beispiele hinzugefügt:

Geben Sie hier die Bildbeschreibung ein

Es gibt nur eine einzige mögliche Position für "St. Paulus Dom" und es ist kein Quadrant: Geben Sie hier die Bildbeschreibung ein

Jedes Etikett muss manuell verschoben werden. Einige der Beschriftungen befinden sich nicht in einem Quadranten.

KARTE
quelle
Müssen die Etiketten bestimmte Kriterien erfüllen? Ich verstehe nicht, was du mit "bester Position" meinst.
Mgri
1
Mit "bester Position" meine ich eine Position nach kartografischen Angaben. Es ist subjektiver.
MAP
2
Ich habe festgestellt, dass in Ihrem Beispiel die Schriftart "Noto Sans" verwendet wird, die ich nicht habe, und ich vermute, dass dies auch für andere der Fall sein wird. Sie können die Schriftart hier herunterladen. Google.com/get/noto Nach der Installation der Schriftarten müssen Sie QGIS neu starten.
TJ Rockefeller
Vielen Dank, dass Sie diesen Link hinzugefügt haben - es ist die Standardschriftart meiner Mint-Installation.
MAP

Antworten:

6

Ich muss sagen, dass das, was Sie anfordern, etwas kompliziert ist, weil Sie möchten, dass die Beschriftung sowohl im kleinen als auch im großen Maßstab (beste Passform) deutlich sichtbar ist. Die Idee hier ist also, wie man den Punkt platziert, der in verschiedenen Maßstäben sichtbar sein kann.

Nach mehreren Tests stellte ich fest, dass Sie, anstatt mehrere Spalten für jeden Skalierungsbereich zu erstellen und Koordinaten für x und y an festen Punkten zu setzen, nur eine Spalte für Prioritätspositionen für jeden Punkt für die beste Position erstellen können, wie Sie unten sehen können (I. folgte den Speicherorten in Ihrer Datei):

Geben Sie hier die Bildbeschreibung ein

Dann gehst du zu Layer propoerties -> Labels -> Placement -> Offset from pointoder Around point, beide sind in Ordnung, aber ich habe gewählt Offset from point.

  1. Geben Sie unter QuadrantAuswählen Data defined override -> Editdie folgende Formel ein:

    Geben Sie hier die Bildbeschreibung ein

    CASE 
    WHEN  $scale >= 200000 THEN  "priority"  
    WHEN  $scale < 200000 and $scale >= 75000 THEN  "priority"   
    WHEN  $scale < 75000 and $scale >=10000 THEN  5
    WHEN  $scale < 10000 THEN 2 
    END
    

    Hier "Priority"ist die Position der im Feldnamen definierten PunktePriority

  2. Sie müssen den Versatz verwenden, um die Punkte für eine bessere Sichtbarkeit zu verschieben, und ich habe die folgende Formel verwendet:

    CASE
    WHEN  $scale >= 200000 THEN '0.001,0'
    WHEN  $scale < 200000 and $scale >= 75000 THEN '0.001,0'
    WHEN  $scale < 75000 and $scale >=10000 THEN '0.0005,0'
    WHEN  $scale < 10000 THEN '0.0001,0'
    END
    

Hier ist die Ausgabe in verschiedenen Maßstäben:

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Um zu sehen, was jede Zahl [0-8] an welchem ​​Ort darstellt, sehen Sie sich bitte das folgende Bild an:

Geben Sie hier die Bildbeschreibung ein

Sie können die Position der Beschriftungen steuern, indem Sie den Wert hinzufügen, der jeder Position entspricht. Leider können Sie dies nicht durch Klicken und Bewegen tun. Sie müssen dies in der Attributtabelle tun.

Aktualisieren:

Basierend auf Ihrer Anforderung, dass 9 Quadrantenpositionen nicht ausreichen, habe ich festgestellt, dass Sie, wenn Sie Cartographyanstelle von Offset from pointund Priorität auswählen, wie in der Abbildung unten, 12 Prioritätspositionen anstelle von 9 haben. Sie müssen dann ein Feld vom TextTyp erstellen Geben Sie nur die gewünschte Abkürzung für die beste Position 'TL', 'TSL', 'T' ... usw. ein. Sie können auch einen Abstand eingeben, um zu verhindern, dass das Etikett den Punkt abdeckt.

Geben Sie hier die Bildbeschreibung ein

ahmadhanb
quelle
Das ist ein Ansatz, den ich bis jetzt nicht ausprobiert habe. Sehen Sie eine Möglichkeit, die Beschriftung durch Klicken und Verschieben im Quadranten zu platzieren?
MAP
Leider können Sie dies nicht durch Klicken und Verschieben tun. Sie müssen dies in der Attributtabelle tun. Das Hinzufügen von 1 Spalte ist jedoch besser als 6 Spalten für jede x-, y-Skalierungsstufe. Ich habe meine Antwort aktualisiert.
Ahmadhanb
1
In den letzten Tagen habe ich auch versucht, eine Lösung zu finden, aber ich habe aufgegeben, weil ich dachte, das Problem sei zu subjektiv, um eine allgemeinere Lösung anzubieten. Stattdessen scheint die Lösung von @ahmadhanb kreativ genug dafür zu sein (ich habe sie jedoch nicht getestet). +1 für mich.
Mgri
Ich stimme mit Ihnen ein. Die Subjektivität ist hier hoch. Es ist hauptsächlich eine persönliche Meinung darüber, wie Sie die Positionen von Etiketten beurteilen können, ob sie geeignet sind oder nicht.
Ahmedadhan
1
Verwenden Sie kein Identifizierungswerkzeug, um die Prioritätspositionen zu bearbeiten. Verwenden Sie besser das Auswahlwerkzeug. Öffnen Sie die Attributtabelle und wählen Sie nur ausgewählte Punkte aus. Starten Sie die Bearbeitungssitzung, aktualisieren Sie den Speicherort und speichern Sie die Änderungen. Der Prioritätsspeicherort wird direkt aktualisiert, wenn Sie den Ausdruck bereits in der Überschreibung für definierte Daten hinzugefügt haben.
Ahmadadhan
2

Sie können die mehreren Ebenen mithilfe von Ausdrücken entfernen.

Nach dem, was ich in Ihrem Beispiel sehen konnte, besteht der Hauptunterschied zwischen den Ebenen in den Data defined Coordinate X YDefinitionen, die auf die verschiedenen x- und y-Skalenwerte verweisen.

Sie können dies in einer einzelnen Ebene erreichen, indem Sie die Dropdown-Listen neben X und Y auswählen und Bearbeiten ... auswählen, um einen Builder für Ausdruckszeichenfolgen aufzurufen.

Für X können Sie so etwas wie verwenden

if(@map_scale <=10000, "scale1-x", if(@map_scale <=75000, "scale2-x", "scale3-x"))

Und für Y können Sie so etwas verwenden

if(@map_scale <=10000,  "scale1-y" , if(@map_scale <=75000, "scale2-y", "scale3-y"))

Dies sollte Werte im Maßstab 1 x, y verwenden, wenn der Kartenmaßstab kleiner oder gleich 1: 10.000 ist, und Maßstab 2 x, y, wenn der Kartenmaßstab kleiner oder gleich 1: 75.000 ist, und Maßstab 3 x, y für alles darüber hinaus .

Wenn Sie für jede Skala manuell positionieren müssen, sehe ich nicht, wie Sie von den Spalten Skala # -x und Skala # -y für jede von Ihnen definierte Ebene wegkommen können.

TJ Rockefeller
quelle
Ich habe ein hohes Schicksal von Etiketten mit unterschiedlichem Gewicht. Ich muss sie manuell platzieren, da kein Automatismus dies auf "echte" kartografische Weise tun kann. Und die Karten werden jedes Jahr gedruckt und aktualisiert, sodass die Beschriftung etwas statisch sein muss. en.wikipedia.org/wiki/Cartographic_labeling#Placement
MAP
@MAP OK, damit Sie wissen, dass Sie Elemente manuell positionieren müssen, möchten Sie nur weniger Ebenen und Spalten.
TJ Rockefeller
Dies hilft bei der Anzeige der Beschriftungen von 3 Skalen mit nur einer Ebene. QGIS ist jedoch nicht in der Lage, Koordinaten über den Ausdruck "zurückzuschreiben". Wenn ich also den von Ihnen erwähnten Skalierungsausdruck verwende, kann ich die Beschriftungen nicht mehr verschieben.
MAP