Platzieren von senkrechten Beschriftungen in QGIS?

8

Ich versuche, den gleichen Beschriftungsstil wie die Ausrichtung der senkrechten Platzierung von ArcGIS in QGIS zu erhalten. Da QGIS diese Funktion nicht standardmäßig hat, wird für diese Option eine benutzerdefinierte Platzierung verwendet.

Ein ArcGIS-Beispiel:

Geben Sie hier die Bildbeschreibung ein

Eine Problemumgehung in QGIS

Die Einstellungen:

Datendefinierte Koordinate X (Beschriftung in der Mitte der Linie):

$x_at( num_points( $geometry)/2)

Datendefinierte Koordinate Y (entspricht der Position von X):

$y_at( num_points( $geometry)/2)

Daten definiert Rotation:

angle_at_vertex( $geometry , num_points( $geometry)/2)

Geben Sie hier die Bildbeschreibung ein

Nur für 2/3 Etiketten ist die Platzierung akzeptabel. Für Linien mit vielen Unterbrechungen mit unterschiedlichen Winkeln ist es schwieriger, eine schöne Beschriftung zu erhalten.

ArcGIS scheint das Liniensegment mit weniger Unterbrechungen oder einem geraden Segment zu durchsuchen. Gibt es eine Möglichkeit, Koordinaten oder Geometrien des geradesten Liniensegments mit dem Ausdrucksgenerator für eine bessere Beschriftungsplatzierung zu erhalten?

aldo_tapia
quelle
Wie wäre es mit einem Durchschnitt der Winkel an mehreren Eckpunkten
csk
@csk Ich habe es mit versucht line_interpolate_angle($geometry, some lenght)und mehrere genommen angle_at_vertex( $geometry , num_points( $geometry)). Eine Schleife über diese Funktion könnte ein Ansatz sein, aber ich kann es nicht direkt in Expresion Builder tun
aldo_tapia
es scheint, dass Sie einen Abschnitt der Linie finden möchten, in dem der Winkel an jedem Scheitelpunkt ungefähr gleich dem line_interpolate_angle ist
csk
@csk ja so etwas. Ein gerades Liniensegment zum Platzieren von Etiketten
aldo_tapia

Antworten:

1

Tatsächliche Problemumgehung

Angenommen, diese Art von Geometrien:

Geben Sie hier die Bildbeschreibung ein

Ich habe versucht, eine gute Stelle zu finden. Ich arbeite auch mit Atlas, daher habe ich einen Abstand von 3% des Atlas-Features vom mittleren Teil der Interpolationslinie pro Scheitelpunkt des Features verwendet, um Beschriftungen zu platzieren:

Etwas wie das:

Geben Sie hier die Bildbeschreibung ein

Und ich erstelle einen Pfeil vom mittleren Scheitelpunkt des Features zum Etikett:

Geben Sie hier die Bildbeschreibung ein


Die Einstellungen:

Pfeil:

Geometriegenerator

make_line(make_point($x_at( num_points( $geometry)/2) , $y_at( num_points( $geometry)/2)),
  project( line_interpolate_point(make_line(make_point($x_at(1),$y_at(1)),make_point($x_at(-1),$y_at(-1))),
  length(make_line(make_point($x_at(1),$y_at(1)),make_point($x_at(-1),$y_at(-1))))/2),length(@atlas_geometry)*0.03,
   (radians(line_interpolate_angle(make_line(make_point($x_at(1),$y_at(1)),make_point($x_at(-1),$y_at(-1))),
  0.0001)))+ pi() *0.5))

Etikette

Daten definieren X.

x(project( line_interpolate_point(make_line(make_point($x_at(1),
  $y_at(1)),make_point($x_at(-1),$y_at(-1))),
  length(make_line(make_point($x_at(1),$y_at(1)),
  make_point($x_at(-1),$y_at(-1))))/2),length(@atlas_geometry)*0.03,
   (radians(line_interpolate_angle(make_line(make_point($x_at(1),
  $y_at(1)),make_point($x_at(-1),$y_at(-1))),0.0001)))+ pi() *0.5))

Daten definieren Y.

y(project( line_interpolate_point(make_line(make_point($x_at(1),
  $y_at(1)),make_point($x_at(-1),$y_at(-1))),
  length(make_line(make_point($x_at(1),$y_at(1)),
  make_point($x_at(-1),$y_at(-1))))/2),length(@atlas_geometry)*0.03,
   (radians(line_interpolate_angle(make_line(make_point($x_at(1),
  $y_at(1)),make_point($x_at(-1),$y_at(-1))),0.0001)))+ pi() *0.5))

Vielleicht könnte dies für jemanden hilfreich sein.

Wenn es einen besseren Ansatz gibt, freuen wir uns über ihn.

aldo_tapia
quelle