Wie kann ich mit QGIS 2.12.2 die Ebenenbeschriftung einrichten, um zu vermeiden, dass Beschriftungen dort platziert werden, wo bereits Features einer anderen Ebene vorhanden sind?
Wenn ich zum Beispiel eine Strom- / Fluss- Polylinienebene habe , die See- "Mittellinien" enthält, und ich eine "See" -Polygonebene in der Zeichenreihenfolge darüber platziere, soll die Flussebene keine Beschriftung innerhalb des Sees platzieren . Stattdessen würde ich den Fluss lieber außerhalb des Sees beschriften lassen (je nach Bedarf). Auf diese Weise kann ich Etiketten aus der Seenebene platzieren und stoße nicht auf Kollisionen mit Etiketten.
Hier ist ein Beispiel, in dem (ich habe die Linien absichtlich zu visuellen Zwecken oben platziert) keine Flussmittellinienbeschriftungen innerhalb des See-Polygons angezeigt werden sollen:
Antworten:
Das automatisierte Beschriften ist ein wirklich schweres Problem, aber die Feature-Geometrie ist nicht so schlecht.
Auch wenn das Praktikum die meiste Zeit angemessen funktioniert, kann es Ausnahmen geben. Einige von diesen werden Sie bemerken und möglicherweise ansprechen können. Andere werden Sie beim Erstellen einer großen Karte oder eines Kachelsatzes nicht bemerken, da Sie nicht jeden Zentimeter Ihrer Karte in verschiedenen Maßstäben übergießen können. Fast immer müssen Sie einige automatisch platzierte Etiketten aus kartografischer Sicht manuell verschieben.
Wie ich in meinem Kommentar vorgeschlagen habe, würde ich das Problem für das Etikettierungsmodul erleichtern. In diesem Fall definiere ich meine Flüsse als Tabellenansicht *, wobei die Flussgeometrien abgeschnitten werden, um die Seegrenzen zu berücksichtigen. Auf diese Weise gibt es keine Flussmerkmale in Seen, die gekennzeichnet werden müssen, und keine Kollisionen.
* Ich gehe davon aus, dass Sie hier ein RDBMS wie PostgreSQL / PostGIS verwenden, um die Aktualisierung Ihrer maßgeblichen Datenquelle zu vereinfachen und die Ansicht ohne Ihr Zutun selbst ausführen zu können. Sie können jedoch auch statische Dateien im Voraus bearbeiten, um Features zu schneiden und zu löschen. Ich empfehle dies jedoch nicht, wenn Sie jemals vorhaben, eine Karte erneut aufzurufen.
Beispiel:
Beginnend mit zwei Shapefiles (möglicherweise Datenbanktabellen) von Flüssen und Seen, wobei Flüsse Seen kreuzen und Beschriftungsprobleme verursachen, die sich nur schwer vollständig und sicher lösen lassen:
Bringen Sie diese mit shp2pgsql in Postgres :
shp2pgsql -s 4326 /data/lake public.lakes | psql -d mydb
shp2pgsql -s 4326 /data/river public.rivers | psql -d mydb
Definieren Sie dann eine Sicht mit ST_Difference :
Fügen Sie die Ansicht Ihrem Layout hinzu:
Obwohl das Problem in meinem Beispiel bewusst hergestellt wurde, sind die Stile in den beiden Flussebenen (Original und Ansicht) identisch und werden in der Zeichenreihenfolge oben auf dem See platziert. Wenn Sie die Geometrien der Seen oder Flüsse aktualisieren, müssen Sie nur das Rendering aktualisieren.
quelle
In QGIS> = 2.12 können Sie die Polygonebene "See" als Beschriftungshindernis festlegen. Dies erfolgt über die Layereigenschaften des Layers "See" im Abschnitt "Beschriftungen". Ändern Sie das Kombinationsfeld oben von " Keine Beschriftungen " in " Andere Beschriftungen davon abhalten, Features in dieser Ebene abzudecken ".
quelle
Ich finde es im Allgemeinen ziemlich schwierig, Etiketten zu erstellen, die die Sinne meines Kartographen befriedigen. Während die automatische Beschriftungsfunktion in 80% der Fälle einwandfrei funktioniert, gibt es Fälle wie das Problem mit der Fluss- / See-Beschriftung, bei denen keine gute Beschriftung generiert wird. Die automatische Beschriftung ist häufig an die Geometrie des Features gebunden, z. B. wie viele Teile sich in einer Linie befinden, sodass zunächst alle Teile beschriftet werden. Natürlich hat QGIS Mittel, um wiederholte Beschriftungen zu verhindern, was auch vom Maßstab der aktuellen Kartenansicht abhängt.
Na ja, mein Tipp ist keine schnelle Lösung. Ich erstelle oft eine spezielle Ebene nur zum Beschriften, damit meine Beschriftungen leichter kontrolliert werden können. Und häufig kann die Geometrie der Features für die kartografische Darstellung mit einer guten Geometrie für die Beschriftung kollidieren. Daher würde ich vorschlagen, eine neue Schicht zu erstellen, in der die Bäche die Seen nicht überqueren, damit Sie das Problem insgesamt umgehen können. Das Vorhandensein einer zusätzlichen Beschriftungsebene kann auch dazu beitragen, Probleme zu vermeiden, bei denen die Beschriftungsrichtung nicht der beabsichtigten entspricht, da sie mit der Erstellung der Geometrie zusammenhängt.
Nun, ich befürchte, dass mein Tipp nicht Ihren Erwartungen entspricht, aber ich hoffe, dass mein alternativer Ansatz Ihnen irgendwie hilft.
quelle
Es gibt ein Plugin namens " Mask ", mit dem Labels basierend auf Polygonen gefiltert werden können.
Wie in meinem vorherigen Kommentar erwähnt, wäre es jedoch viel einfacher, wenn Sie Ihre Linien an der Kreuzung mit den Seen teilen könnten (siehe verschiedene Methoden hier ). Anschließend können Sie für Segmente, die sich innerhalb der Seen befinden, eine Bezeichnung mit der Größe Null definieren ("Ebene"> "Beschriftung"> "Definierte Dateneinstellungen"> "Größe" und dann die Spalte auswählen, in der Sie die Beschriftungsgröße speichern). Durch das Aufteilen bleiben die meisten Eigenschaften Ihres Flussnetzes erhalten und können durch Auflösen rückgängig gemacht werden, sodass Sie weiterhin mit einem einzelnen Layer arbeiten können (speichern Sie die Gesamtlänge in einer bestimmten Attributtabelle, falls erforderlich).
quelle