QGISに垂直ラベルを配置しますか?


8

QGISのArcGISから、垂直配置方向と同じラベルスタイルを取得しようとしています。QGISはこの機能をデフォルトとして備えていないため、このオプションにはカスタム配置を使用することになります。

ArcGISの例:

ここに画像の説明を入力してください

QGISの回避策

設定:

データ定義の座標X(行の中央にあるラベル):

$x_at( num_points( $geometry)/2)

データ定義座標Y(Xの位置と同じ):

$y_at( num_points( $geometry)/2)

データ定義の回転:

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

ここに画像の説明を入力してください

2/3ラベルの場合のみ、配置は許容されます。角度の異なる切れ目が多い線の場合、適切なラベルを取得するのはさらに困難です。

ArcGISは、より少ないブレークまたは直線セグメントでラインセグメントを検索するようです。より良いラベル配置のために式ビルダーを使用して最も直線のセグメントの座標またはジオメトリを取得する方法はありますか?


いくつかの頂点での角度の平均を取るのはどう
ですか

@csk私はline_interpolate_angle($geometry, some lenght)いくつか試してみましたangle_at_vertex( $geometry , num_points( $geometry))。この関数のループは問題になる可能性がありますが、Expresion Builderで直接実行することはできません
aldo_tapia

各頂点の角度がline_interpolate_angleにほぼ等しいラインのセクションを見つけたいようです
csk

@cskはい、そのようなもの。ラベルを配置するための直線セグメント
aldo_tapia 2018年

回答:


1

実際の回避策

この種のジオメトリを想定します。

ここに画像の説明を入力してください

私は良い配置を見つけようとしました。私はアトラスも使用しているので、フィーチャの頂点ごとに補間線の中間部分から3%の距離のアトラスフィーチャを使用して、ラベルを配置しました。

このようなもの:

ここに画像の説明を入力してください

そして、フィーチャーの中央の頂点からラベルへの矢印を作成します。

ここに画像の説明を入力してください


設定:

矢印:

ジオメトリジェネレータ

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))

ラベル

データ定義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))

データ定義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))

多分これは誰かのために役立つかもしれません。

より良いアプローチがある場合は、それを受け取ってうれしいです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.