QGISの別のレイヤーと重なっている場合、ラベル機能を回避しますか?


16

QGIS 2.12.2では、別のレイヤーのフィーチャが既に存在する場所にラベルを配置しないように、レイヤーラベルを設定するにはどうすればよいですか?

たとえば、湖の「中心線」を含むストリーム/川のポリラインレイヤーがあり、描画順序でその上に「湖」のポリゴンレイヤーを配置する場合、川のレイヤーに湖の内側にラベルを配置させたくない。代わりに、私はむしろ(必要に応じて)湖ので川にラベルを付けたいと思います。そうすれば、lakesレイヤーからラベルを配置でき、ラベルの衝突に遭遇することはありません。

ここに例があります(視覚的な目的のために意図的に線を上に置いています)達成したいのは、湖のポリゴン内に川の中心線のラベルが表示されないことです: 線はポリゴン内でラベル付けされています


4
データはどのように保存および提供されますか?PostGISを使用して、湖と交差する川の部分が完全に切り取られるビューで川を定義したいと思います。適切な自動ラベル付けは難しい問題ですが、ジオメトリはそれほど問題ではありません。
alphabetasoup

これらはシェープファイルでしたが、PostGISに移行し、その場でデータの問題を管理するというアイデアは本当に良いものです。コメントをAnswerに移動することをお勧めします。これは、適切な解決策であるというかなり妥当な議論をすることができるからです。
RyanKDalton-OffTheGridMaps

回答:


9

自動ラベリングは本当に難しい問題ですが、フィーチャジオメトリはそれほど悪くありません。

ほとんどの場合、プレースメントを適切に機能させることができたとしても、例外が発生する可能性があります。これらのいくつかに気づき、対処できる場合があります。大きなマップまたはタイルセットを作成するときに気付かないその他の機能は、さまざまな縮尺でマップのあらゆるインチを注ぐことができないためです。ほとんどの場合、地図作成の観点から、自動的に配置されたラベルを手動で移動する必要があります。

コメントで提案したように、ラベリングエンジンの問題を簡単にします。この場合、河川をテーブルビューとして定義し、湖の境界を尊重するように河川のジオメトリをクリップすることでこれを行います。この方法では、ラベルを付ける湖の中に河川の特徴はなく、ラベルの衝突もありません。

*ここでは、PostgreSQL / PostGISなどのRDBMSを使用することを想定しています。これは、データの信頼できるソースのみを更新し、ユーザーの介入なしにビュー自体を機能させるためです。ただし、フィーチャをクリップして削除するために静的ファイルを使用して事前に作業を行うこともできますが、マップを再検討する予定がある場合はこれをお勧めしません。

例:

河川と湖の交差する2つのシェープファイル(データベーステーブルである可能性があります)から始まり、河川が湖と交差し、完全に自信を持って解決するのが難しいラベル付けの問題を引き起こします。

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

shp2pgsqlを使用する必要がある場合は、これらをPostgresに取り込みます。

shp2pgsql -s 4326 /data/lake public.lakes | psql -d mydb

shp2pgsql -s 4326 /data/river public.rivers | psql -d mydb

次に、ST_Differenceを使用してビューを定義します。

CREATE OR REPLACE VIEW rivers_clipped AS
SELECT r.id, ST_Difference(r.geom, l.geom) AS geom, r.name
FROM public.rivers AS r, public.lakes AS l;

ビューをレイアウトに追加します。

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

この例の問題は意図的に作成されていますが、2つの川の層(オリジナルとビュー)のスタイルは同じであり、描画順序で湖の上に配置されます。湖または川のジオメトリを更新する場合、レンダリングを更新するだけで済みます。

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


2
私はDBレイヤーを直接操作していませんでしたが、このソリューションは最初のデータソースのジオメトリを編集する必要がないため(DBへの読み込み以外)、最も意味がありました。これは、シェープファイルとアプリケーションの制限の枠を超えて考え、アプリケーションとDBロジックの両方を組み合わせて問題の創造的な解決策を見つける素晴らしい例です。
RyanKDalton-OffTheGridMaps

13

QGIS 2.12以降では、「湖」ポリゴンレイヤーをラベルの障害物として設定できます。これは、「ラベル」セクションの下の「レイク」レイヤーのレイヤープロパティを介して行われます。上部のコンボボックスを「ラベルなし」から「他のラベルがこのレイヤーのフィーチャをカバーしないようにする」に変更します。


1
ありがとう。私はそのようなものを探していましたが、以前はそのドロップダウンオプションに気づいていませんでした。ただし、これは中程度の成功に過ぎなかったと思います。1)川の層からの「一種の」落胆ラベル(それらはまだ湖の中に表示されますが、それほどではありません)、および2)私は私の湖の名前ラベルを持っていません:(私はまた、川のラベル>障害物「の機能をカバーするから落胆ラベル」(なし成功)を設定し、重みにロー&ハイ(なし成功)を設定し、配置>優先=ロー&ハイ(なし成功)を設定しようとしている。
RyanKDalton-OffTheGridMaps

ああ、多分私は誤解した。湖のレイヤーにラベルがある場合は、[レンダリング]タブの下にある[カバーフィーチャからラベルを非表示にする]チェックボックスがオンになっていることを確認してください。必要な結果を得るには、このグループの「重量」スライダーと他のオプションを使用する必要があります。
ndawson

1
いいえ、あなたは間違いなく正しい軌道に乗っていました。ウェイト(湖のポリゴンに高いウェイト+「フィーチャの内部にラベルを配置するのを最小限に抑え、川に低いウェイトを付ける」)をいじってみましたが、実際には川のラベルが湖にないポイントには到達しませんでした。ポリゴンの内側と外側の両方の線に関連付けられているようです
RyanKDalton-OffTheGridMaps

4
ラベル付けに関しては、これらの行を削除(または分割)しませんか?とにかく、それらはあなたのマップにとって有用ではありません。
-radouxju

4

少なくとも私の地図製作者の感覚を満足させるラベルを生成するために、ラベル付けは一般的に非常に難しいと感じています。自動ラベル付け機能は80%の時間で正常に機能しますが、川/湖のラベル付けの問題のように、適切なラベル付けが生成されない場合があります。自動ラベリングは、多くの場合、フィーチャのジオメトリに関連付けられます。たとえば、最初にすべてのパーツにラベリングされるように、ラインにいくつのパーツがあるかなどです。もちろん、QGISには、現在のマップビューの縮尺にも依存するラベルの繰り返しを防ぐ手段があります。

とにかく、私のヒントは簡単な解決策ではありません。ラベル付けをより簡単に制御できるように、ラベル付け専用のレイヤーを作成することがよくあります。また、多くの場合、カートグラフィック表現のフィーチャジオメトリは、ラベリングの適切なジオメトリと衝突する可能性があります。したがって、問題が完全に回避できるように、ストリームが湖を渡らない新しいレイヤーを作成することを提案します。ラベリングレイヤーを追加すると、ラベリングの方向が意図した方向にならないという問題を防ぐことができます。これは、ジオメトリの作成方法に関係しているためです。

まあ、私のヒントはあなたが期待したものではないのではないかと心配していますが、私の代替アプローチが何らかの形であなたを助けることを願っています。


新しいデータセットを作成することができる有効なポイントを作成します(この場合は簡単です...ポリゴンの下のラインフィーチャを消去するだけです)。 @Richard Lawのようなデータベース駆動型メソッドが言及されました。
RyanKDalton-OffTheGridMaps

あなたの意見を見て、同様のデータセットを2回作成することをためらうことを理解しています。私の経験では、ラベルレイヤーは元のデータレイヤーよりも頻繁に異なります。たとえば、河川の例に合わせて、河川のジオメトリをさらに変更してフィーチャパーツを結合または分割し、より頻繁に繰り返されるより良いラベルを作成することができます。少なくとも非常にroad意的に編成されているOSM道路などを扱う場合、少なくともこれは私にとってはよくあることです。
フランク

3

ポリゴンに基づいてラベルをフィルタリングするために使用できる「マスク」と呼ばれるプラグインがあります。

ただし、以前のコメントで述べたように、湖との交差点で線を分割できると、はるかに簡単になります(ここで別の方法を参照してください)。次に、湖内のセグメントにゼロサイズのラベルを定義できます(「レイヤー」>「ラベル付け」>「データ定義設定」>「サイズ」、ラベルサイズを保存する列を選択)。分割は川のネットワークのほとんどのプロパティを保持し、ディゾルブで元に戻すことができるため、単一のレイヤーで作業を続けることができます(必要に応じて特定の属性テーブルに全長を保存します)。


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