1つのレイヤーの複数の縮尺のデータ定義ラベル位置


9

私は自分のプロジェクトのためのより良いラベル付けソリューションを探しています。難しいようですが、たぶん私は盲目ですか?

私のプロジェクト:印刷されたバイクハイキングブックを作成しています。メインスケールは1:75kで、都市スケールは10k、概要スケールは200kです。私は「カートグラフィック」品質のラベル配置が好きなので、すべてのラベルをタッチして、最適な位置に移動します。私はすべてのスケールに対してこれを行う必要があるため、3つのスケールのラベル列は次のようになります( 'scale 1'は10kを表し、 'scale 2'は75kを表し、 'scale 3'は200kを表します):

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

しかし、詳細に説明する前に、この簡単なサンプルプロジェクトを作成します。ここでは、3つのスケールの(古い)ラベリングソリューションを確認およびテストできます。http//www.map-site.de/tmp/LabelingExample.zip

まあ、それは働いていますが:

  • スケールごとに列にラベルを付ける必要があります
  • すべてのスケールにレイヤーが必要です

重複するレイヤーや大量の列がない、はるかに優れたソリューションを探しています。あなたの創造的な心を頼りにしています!

編集:私は例としてこの2つの非常に密な地図を追加しました:

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

「St. Paulus Dom」の可能な位置は1つだけで、象限ではありません。 ここに画像の説明を入力してください

すべてのラベルを手動で移動する必要があります。一部のラベルは象限にありません。


ラベルはいくつかの特定の基準を達成する必要がありますか?「ベストポジション」の意味がわかりません。
mgri

1
「最高のポジション」とは、地図製作の主張によるポジションを意味します。より主観的です。
MAP

2
あなたの例は私が持っていない「Noto Sans」というフォントを使用していることがわかりました。それは他の人にも当てはまると思います。フォントはこちらgoogle.com/get/notoからダウンロードできます。フォントをインストールしたら、QGISを再起動する必要があります。
TJロックフェラー

そのリンクを追加してくれてありがとう-これは私のMintインストールの標準フォントです。
MAP

回答:


6

あなたが要求していることは少し複雑であると言わなければなりません。なぜなら、あなたはラベル付けを小さなスケールではっきりと見えるようにしたいだけでなく、大きなスケール(最もよくフィットする)でも見えるようにしたいからです。したがって、ここでの考え方は、さまざまな縮尺で表示できる点を配置する方法です。

いくつかのテストの結果、スケール範囲ごとに複数の列を作成し、xとyの座標を固定点に配置する代わりに、以下に示すように、最適な位置の各ポイントの優先位置に1つの列しか作成できないことがわかりました(Iファイル内の場所に従ってください):

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

その後、Layer propoerties -> Labels -> Placement -> Offset from pointまたはAround pointに移動しますが、どちらも問題ありませんが、私はを選択しましたOffset from point

  1. Quadrant選択しData defined override -> Editて、次の式を入力します。

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

    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
    

    これ"Priority"は、フィールド名で定義されたポイントの場所ですPriority

  2. 見やすくするためにオフセットを使用してポイントをシフトする必要があります。次の式を使用しました。

    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
    

以下は、異なるスケールでの出力です。

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

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

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

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

各番号[0-8]がどの場所を表しているかを確認するには、次の画像をご覧ください。

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

各位置に対応する値を追加することにより、ラベルの位置を制御できます。しかし、残念ながら、「クリックして移動」する方法ではできません。属性テーブルで行う必要があります。

更新:

9つの象限の位置では不十分であるという要件に基づいて、のCartography代わりにOffset from pointを選択し、優先順位を選択すると、下の画像のように、9ではなく12の優先順位になります。Textタイプのフィールドを作成する必要があります。「TL」、「TSL」、「T」などの最適な位置に必要な略語のみを入力してください。また、ラベルがポイントをカバーしないように距離を入力することもできます。

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


それは私が今まで試みなかったアプローチです。クリックアンドムーブで象限にラベルを配置する方法はありますか?
MAP

残念ながら、「クリックして移動」する方法ではできません。属性テーブルで行う必要があります。ただし、1つの列を追加することは、各x、yスケールレベルで6列よりも優れています。回答を更新しました。
ahmadhanb 2017

1
最後の数日間、私は解決策を与えることも試みましたが、問題がより一般的な解決策を提供するにはあまりにも主観的であると考えたため、あきらめました。代わりに、@ ahmadhanbによる解決策は、それを実行するのに十分創造的であるように見えます(ただし、テストしませんでした)。+1。
mgri

仰るとおりです。ここの主観は高いです。これは主に、ラベルの位置が適切かどうかを判断する方法についての個人的な意見です。
ahmadhanb 2017

1
識別ツールを使用して優先位置を編集しないでください。選択ツールを使用することをお勧めします。属性テーブルを開き、選択したポイントのみを表示するように選択します。編集セッションを開始し、場所を更新して編集内容を保存します。データ定義オーバーライドに式をすでに追加している場合、優先ロケーションは直接更新されます。
ahmadhanb 2017年

2

式を使用して、複数のレイヤーを取り除くことができます。

あなたの例で私が見ることができるものから、レイヤー間の主な違いはData defined Coordinate X Y、異なるスケールのx、y値を指す定義です。

XとYの横にあるドロップダウンを選択し、[編集]を選択すると、単一のレイヤーでこれを実行できます。これにより、式文字列ビルダーが表示されます。

Xの場合、次のようなものを使用できます

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

Yの場合、次のようなものを使用できます

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

これは、マップの縮尺が1:10,000以下の場合はscale1 x、y値を使用し、マップの縮尺が1:75,000以下の場合はscale 2 x、yを使用し、それ以上の場合は3 x、yを使用します。 。

各スケールを手動で配置する必要がある場合、定義した各レベルのscale#-x列とscale#-y列からどのようにして離れることができるかわかりません。


異なる重量のラベルの高い運命を持っています。自動化では「実際の」地図作成方法でそれを行うことができないため、手動で配置する必要があります。また、地図は毎年印刷および更新されるため、ラベル付けはある程度静的にする必要があります。en.wikipedia.org/wiki/Cartographic_labeling#Placement
MAP

@MAP OK、アイテムを手動で配置する必要があることを知っているので、レイヤーと列を少なくしたいだけです。
TJロックフェラー

これは、1つのレイヤーだけで3つのスケールのラベルを表示するのに役立ちます。しかし、QGISは式を使用して座標を「書き戻す」ことができません。だから、あなたが言ったようにスケール式を使うと、もうラベルを動かすことができません。
MAP
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.