L'etichettatura automatizzata è un problema davvero difficile, ma la geometria delle caratteristiche non è poi così male.
Anche se riesci a far funzionare il posizionamento in modo adeguato per la maggior parte del tempo, ci sono probabilmente delle eccezioni. Alcuni di questi noterai e potresti essere in grado di affrontare. Altri non ti accorgerai quando crei una grande mappa o un set di tessere perché non puoi scorrere ogni pollice della tua mappa su una varietà di scale. Quasi sempre avrai l'impulso di spostare manualmente alcune etichette posizionate automaticamente, da una prospettiva cartografica.
Come ho suggerito nel mio commento, renderei il problema più semplice per il motore di etichettatura. In questo caso, lo farei definendo i miei fiumi come una vista tabella *, con le geometrie dei fiumi ritagliate per rispettare i confini del lago. In questo modo, non ci sono elementi fluviali all'interno dei laghi da etichettare e nessuna collisione di etichette.
* Presumo l'uso di un RDBMS qui, come PostgreSQL / PostGIS, per comodità e la possibilità di aggiornare solo la fonte autorevole di dati e fare in modo che la vista si risolva da sola senza il tuo intervento. Ma puoi anche fare un po 'di lavoro in anticipo con file statici per tagliare ed eliminare funzionalità, ma non lo consiglio se hai mai intenzione di rivisitare una mappa.
Esempio:
A partire da due shapefile (che potrebbero essere tabelle di database) di fiumi e laghi, con i fiumi che si intersecano con i laghi e causando problemi di etichettatura che sono difficili da risolvere in modo completo e sicuro:
Portali in Postgres se ne hai bisogno con shp2pgsql :
shp2pgsql -s 4326 /data/lake public.lakes | psql -d mydb
shp2pgsql -s 4326 /data/river public.rivers | psql -d mydb
Quindi definire una vista con 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;
Aggiungi la vista al tuo layout:
Sebbene il problema nel mio esempio sia stato deliberatamente fabbricato, gli stili nei due strati del fiume (originale e vista) sono gli stessi e sono posizionati in cima al lago nell'ordine di disegno. Quando aggiorni le geometrie dei laghi o dei fiumi, non dovrai fare molto di più che aggiornare il rendering.