¿Evita las características de etiquetado si se superpone con otra capa en QGIS?


16

Con QGIS 2.12.2, ¿cómo puedo configurar el etiquetado de capas para evitar colocar etiquetas donde ya existen entidades de otra capa?

Por ejemplo, si tengo una capa de polilínea de arroyo / río que contiene "líneas centrales" del lago, y coloco una capa de polígono "lago" encima de ella en el orden de dibujo, no quiero que la capa del río coloque una etiqueta dentro del lago . En cambio, preferiría etiquetar el río fuera del lago (según sea necesario). De esa manera, puedo colocar etiquetas desde la capa de lagos y no me encuentro con colisiones de etiquetas.

Aquí hay un ejemplo, donde (he puesto intencionalmente las líneas en la parte superior con fines visuales) lo que espero lograr es que no se muestren etiquetas de la línea central del río dentro del polígono del lago: Las líneas están etiquetando dentro del polígono


44
¿Cómo se almacenan y sirven sus datos? Trabajando con PostGIS, estaría tentado a definir mis ríos con una vista, donde las partes de los ríos que se cruzan con los lagos se recortan por completo. Un buen etiquetado automatizado es un problema difícil, la geometría no lo es tanto.
alphabetasoup

Estos fueron archivos de forma, pero su idea de pasar a PostGIS y gestionar los problemas de datos sobre la marcha es realmente buena. Te sugiero que muevas tu comentario a una Respuesta, ya que podría hacer un argumento bastante válido de que esta es una buena resolución.
RyanKDalton

Respuestas:


9

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:

ingrese la descripción de la imagen aquí

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:

ingrese la descripción de la imagen aquí

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.

ingrese la descripción de la imagen aquí


2
Si bien no estaba trabajando directamente con una capa de base de datos, esta solución tenía más sentido para mí, ya que no requería editar la geometría de las fuentes de datos iniciales (aparte de cargarlas en la base de datos). Este es un gran ejemplo de pensar fuera de la caja de los archivos de forma y las limitaciones de la aplicación, y encontrar una solución creativa al problema combinando tanto la aplicación como la lógica de la base de datos.
RyanKDalton

13

En QGIS> = 2.12 puede establecer la capa de polígono "lago" como un obstáculo de etiqueta. Esto se hace a través de las propiedades de capa de la capa "lago", en la sección 'Etiquetas'. Cambie el cuadro combinado en la parte superior de " Sin etiquetas " a " Desalentar a otras etiquetas de cubrir entidades en esta capa ".


1
Gracias. Estaba buscando algo así, y no había notado esa opción desplegable antes. Sin embargo, diría que esto fue solo moderadamente exitoso. 1) Solo las etiquetas "desestimuladas" de la capa del río (todavía aparecen dentro del lago, pero no tanto), y 2) ahora no tengo las etiquetas de los nombres de mi lago :( También he intentado configurar las etiquetas River> Obstáculos "Disuadir a las etiquetas de cubrir características" (sin éxito) y establecer pesos bajo y alto (sin éxito), y establecer Colocación> Prioridad = bajo y alto (sin éxito).
RyanKDalton

Ah, tal vez entendí mal. Si tiene etiquetas en la capa del lago, asegúrese de que la casilla de verificación "disuadir a las etiquetas de cubrir entidades" debajo de la pestaña de representación esté marcada. Es posible que deba jugar con el control deslizante "peso" y otras opciones en este grupo para obtener los resultados deseados.
ndawson

1
No, definitivamente estabas en el camino correcto. Jugué con los pesos (alto peso en los polígonos del lago + "minimizar la colocación de etiquetas sobre las características interiores, bajo peso en los ríos) y me acerqué, pero nunca llegué al punto donde las etiquetas de los ríos no estaban en el lago. El problema parece estar asociado con las líneas que se encuentran tanto dentro como fuera del polígono.
RyanKDalton

44
¿Por qué no eliminas (o divides) esas líneas cuando se trata de etiquetar? No son útiles para su mapa de todos modos.
radouxju

4

En general, el etiquetado me resulta bastante difícil, al menos para generar etiquetas que satisfagan los sentidos de mi cartógrafo. Si bien la función de etiquetado automático funciona bien el 80% del tiempo, hay casos como su problema de etiquetado de río / lago donde no genera un buen etiquetado. El etiquetado automático a menudo está vinculado a la geometría de la entidad, por ejemplo, cuántas partes hay en una línea para que al principio se etiqueten todas las partes. Por supuesto, QGIS tiene medios para evitar el etiquetado repetido, que también depende de la escala de la vista del mapa actual.

Bueno, de todos modos, mi consejo no es una solución rápida. A menudo creo una capa especializada solo para etiquetar, de modo que mis etiquetas se controlen más fácilmente. Y a menudo la geometría de las características para la representación cartográfica puede colisionar con una buena geometría para el etiquetado. Por lo tanto, propondría crear una nueva capa donde las corrientes no crucen los lagos, para que pueda evitar el problema por completo. Tener una capa de etiquetado adicional también puede ayudar a prevenir problemas en los que la dirección de etiquetado no está en la dirección prevista, ya que está vinculada a cómo se creó la geometría.

Bueno, me temo que mi propina no es lo que esperabas, pero espero que mi enfoque alternativo te ayude de alguna manera.


Haces un punto válido de que podría crear un nuevo conjunto de datos (lo que sería fácil de hacer en este caso ... simplemente borrar las características de la línea debajo de los polígonos), duplicar los conjuntos de datos no suena demasiado atractivo o manejable, a menos que uses un método basado en bases de datos como @Richard Law mencionado.
RyanKDalton

Veo su punto y entiendo su vacilación para crear un conjunto de datos similar dos veces. En mi experiencia, la capa de etiqueta es con frecuencia más diferente que la capa de datos original. Por ejemplo, para seguir con el ejemplo de su río, es posible que desee cambiar la geometría del río para unir o dividir partes de entidades con el fin de crear un etiquetado más agradable que se repita más regularmente. Al menos este suele ser el caso para mí cuando se trata de carreteras OSM, por ejemplo, que a veces están organizadas de manera bastante arbitraria.
Frank

3

hay un complemento llamado " Máscara " que se puede usar para filtrar etiquetas basadas en polígonos.

Sin embargo, como mencioné en mi comentario anterior, sería mucho más fácil si pudieras dividir tus líneas en la intersección con los lagos (ver diferentes métodos aquí ). Luego puede definir una etiqueta de tamaño cero para los segmentos que se encuentran dentro de los lagos ("Capa"> "Etiquetado"> "Configuración de datos definidos"> "Tamaño" y luego seleccione la columna donde almacena el tamaño de la etiqueta). La división mantiene la mayoría de las propiedades de su red fluvial y es reversible con disolución, por lo que puede continuar trabajando con una sola capa (si es necesario, almacene la longitud total en una tabla de atributos específica).


Gracias, el complemento suena prometedor, así que lo intentaré.
RyanKDalton
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.