Estoy buscando una mejor solución de etiquetado para mis proyectos. Parece ser difícil, pero ¿tal vez solo soy ciego?
Mis proyectos: construyo libros impresos de bicicleta-caminata. La escala principal es 1: 75k y hay una escala de ciudad de 10k y una escala general de 200k. Como me gusta tener una calidad "cartográfica" de las ubicaciones de las etiquetas, toco cada etiqueta y la muevo a su mejor posición. Tengo que hacer esto para cada escala para que mis columnas de etiquetado para 3 escalas se vean así ('escala 1' significa 10k 'escala 2' para 75k y 'escala 3' para 200k):
Pero antes de intentar explicarlo en detalle, construyo este proyecto de ejemplo simple donde puede ver y probar mi (antigua) solución de etiquetado para 3 escalas: http://www.map-site.de/tmp/LabelingExample.zip
Bueno, está funcionando pero:
- Necesita columnas de etiquetado para cada escala
- Necesitas una capa para cada escala
Estoy buscando una solución mucho mejor sin capas duplicadas y toneladas de columnas. ¡Cuento con tus mentes creativas!
EDITAR: agregué estos dos mapas muy densos como ejemplos:
Solo hay una única posición posible para "St. Paulus Dom" y no es ningún cuadrante:
Cada etiqueta tiene que ser movida manualmente. Algunas de las etiquetas no están en un cuadrante.
Respuestas:
Tengo que decir que lo que está solicitando es un poco complicado porque desea que el etiquetado sea visible a pequeña escala claramente así como a gran escala (mejor ajuste). Entonces, la idea aquí es cómo colocar el punto que puede ser visible a diferentes escalas.
Después de varias pruebas, descubrí que en lugar de crear varias columnas para cada rango de escala y poner coordenadas para x e y en puntos fijos, puede crear solo una columna para posiciones de prioridad para cada punto para la mejor ubicación, como puede ver a continuación (I seguido las ubicaciones en su archivo):
Luego, vas a
Layer propoerties -> Labels -> Placement -> Offset from point
oAround point
, ambos están bien, pero elegíOffset from point
.En
Quadrant
SeleccionarData defined override -> Edit
, e ingrese la siguiente fórmula:Aquí
"Priority"
está la ubicación de los puntos definidos en el nombre del campo.Priority
Necesita usar el desplazamiento para cambiar los puntos para una mejor visibilidad, y utilicé la siguiente fórmula:
Aquí está la salida a diferentes escalas:
Para ver qué representa cada número [0-8] en qué ubicación, eche un vistazo a la siguiente imagen:
Puede controlar la posición de las etiquetas agregando el valor correspondiente a cada posición. Pero desafortunadamente, no puede hacerlo con el enfoque de "hacer clic y mover". Debe hacerlo en la tabla de atributos.
Actualizar:
Según su requisito de que 9 posiciones de cuadrante no son suficientes, descubrí que si selecciona en
Cartography
lugar deOffset from point
, y selecciona prioridad, como en la imagen a continuación, tendrá 12 posiciones de prioridad en lugar de 9. Necesita crear un campo deText
tipo, luego ponga solo la abreviatura que desee para la mejor posición 'TL', 'TSL', 'T' ... etc. Además, puede ingresar una distancia para evitar que la etiqueta cubra el punto.fuente
Puedes deshacerte de las múltiples capas usando expresiones.
Por lo que pude ver en su ejemplo, la principal diferencia entre las capas son las
Data defined Coordinate X Y
definiciones que apuntan a los diferentes valores de escala x, y.Puede lograr esto en una sola capa seleccionando los menús desplegables junto a X e Y y seleccionando editar ... lo que abrirá un generador de cadenas de expresión.
Para X puedes usar algo como
Y para Y puedes usar algo como
Esto debería usar valores scale1 x, y si la escala del mapa es menor o igual a 1: 10,000 y escala 2 x, y si la escala del mapa es menor o igual a 1: 75,000 y escala 3 x, y para cualquier cosa por encima de eso .
Si tiene que posicionarse manualmente para cada escala, no veo cómo puede alejarse de las columnas escala # -x y escala # -y para cada nivel que haya definido.
fuente