El etiquetado automatizado es un problema realmente difícil, pero la geometría de las características no es tan mala.
Incluso si puede obtener la colocación para trabajar adecuadamente la mayor parte del tiempo, es probable que haya excepciones. Algunos de estos los notará y podrá abordar. Otros no los notará al hacer un mapa grande o un conjunto de mosaicos porque no puede verter sobre cada pulgada de su mapa en una variedad de escalas. Casi siempre tendrá la necesidad de mover algunas etiquetas colocadas automáticamente de forma manual, desde una perspectiva cartográfica.
Como sugerí en mi comentario, facilitaría el problema al motor de etiquetado. En este caso, haría esto definiendo mis ríos como una vista de tabla *, con geometrías de ríos recortadas para respetar los límites del lago. De esa manera, no hay características de los ríos dentro de los lagos para ser etiquetados, y no hay colisiones de etiquetas.
* Asumo el uso de un RDBMS aquí, como PostgreSQL / PostGIS, por conveniencia y la capacidad de actualizar solo su fuente autorizada de datos y hacer que la vista funcione sin su intervención. Pero también puede trabajar un poco por adelantado con archivos estáticos para recortar y eliminar características, pero no lo recomiendo si alguna vez planea volver a visitar un mapa.
Ejemplo:
Comenzando con dos archivos de forma (podrían ser tablas de bases de datos) de ríos y lagos, con ríos que se cruzan con lagos y causan problemas de etiquetado que son difíciles de resolver por completo y con confianza:
Tráigalos a Postgres si lo necesita con shp2pgsql :
shp2pgsql -s 4326 /data/lake public.lakes | psql -d mydb
shp2pgsql -s 4326 /data/river public.rivers | psql -d mydb
Luego defina 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;
Agregue la vista a su diseño:
Aunque el problema en mi ejemplo está fabricado deliberadamente, los estilos en las dos capas del río (original y vista) son los mismos, y se colocan en la parte superior del lago en el orden de dibujo. Cuando actualice las geometrías de lagos o ríos, no necesitará hacer mucho más que actualizar el renderizado.