5 votos

¿Cómo puedo especificar un Mínimo y un Máximo de ajuste de Palabra de longitud en QGIS?

Quiero que mis etiquetas para encajan muy bien dentro de los polígonos.

Basado en esta respuesta descubrí el poder de la wordwrap función en QGIS para hacer etiquetas. Sin embargo, estoy confundido en cuanto a cómo podría especificar un mínimo Y un máximo de longitud de embalaje: me gustaría que la línea no sea más que decir de 13 caracteres, pero también no quiero ninguna línea sólo tiene 3 caracteres. Simplemente anidación de las funciones no funcionó para mí

wordwrap( wordwrap( title(SITE_NAME) , -3), 13)

Así que me gustaría que esta etiqueta para que se ajuste a alguien muy bien dentro de su polígono
enter image description here

Pero si yo sólo uso el simple ajuste de línea que se ve ridículo.
enter image description here

Y si intento crear una expresión para el ajuste de línea, por ejemplo wordwrap( title("SITE_NAME") , -3), la salida de "vista previa" de la muestra

'Anthony
A. Loconte
Memorial
Patinaje
Pista de hielo'

Pero el resultado es todavía la primera imagen de arriba.

Pero si yo en lugar de poner wordwrap( title("SITE_NAME") , -3) en la Label With (cuadro y asegúrese de desactivar todas las funciones de ajuste de línea. Obtengo:
enter image description here

4voto

Minh Le Puntos 711

Desde la sección de ayuda para wordwrap()

Si wrap_length es positivo el número representa el ideal máximo número de caracteres para envolver

La palabra clave de ser ideal ... wordwrap() no romper un 15 char palabra baja al 13 de personaje.


EDIT: La siguiente función de las necesidades de perfeccionamiento de la cadena de ejemplo proporcionado.

'Anthony A. Loconte Memorial Pista De Patinaje'

Esta función le inyectará un delimitador especificado en el número máximo especificado:

from qgis.core import *
from qgis.gui import *

@qgsfunction(args='auto', group='Custom')
def MaxWrap(inField, maxn, delim, feature, parent):
    return delim.join([inField[i:i+maxn] for i in range(0, len(inField), maxn)])

A continuación, utilice ajuste de línea con el mismo delimitador y su mínimo:

wordwrap(maxwrap( SITE_NAME, 13, '^-^'), -3, '^-^')

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X