自動ラベリングは本当に難しい問題ですが、フィーチャジオメトリはそれほど悪くありません。
ほとんどの場合、プレースメントを適切に機能させることができたとしても、例外が発生する可能性があります。これらのいくつかに気づき、対処できる場合があります。大きなマップまたはタイルセットを作成するときに気付かないその他の機能は、さまざまな縮尺でマップのあらゆるインチを注ぐことができないためです。ほとんどの場合、地図作成の観点から、自動的に配置されたラベルを手動で移動する必要があります。
コメントで提案したように、ラベリングエンジンの問題を簡単にします。この場合、河川をテーブルビューとして定義し、湖の境界を尊重するように河川のジオメトリをクリップすることでこれを行います。この方法では、ラベルを付ける湖の中に河川の特徴はなく、ラベルの衝突もありません。
*ここでは、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つの川の層(オリジナルとビュー)のスタイルは同じであり、描画順序で湖の上に配置されます。湖または川のジオメトリを更新する場合、レンダリングを更新するだけで済みます。