Rotación automática de mapas en QGIS del compositor de mapas

10

La cuestión es que me pregunto si es posible calcular automáticamente la rotación del mapa en el editor de mapas. Tengo muchos mapas en un archivo con sus propios parámetros de proyección, y me gustaría definir la rotación del mapa en el compositor de mapas basado en la fórmula de proyección (¿o algo más?)

Por ejemplo, ubicar un mapa específico en el proyecto:

ingrese la descripción de la imagen aquí

La proyección es

ingrese la descripción de la imagen aquí

En el creador del mapa, el límite del mapa se ve así

ingrese la descripción de la imagen aquí

Y con el ángulo de rotación seleccionado para el mapa con sus parámetros de proyección:

ingrese la descripción de la imagen aquí

El ángulo de rotación del mapa es diferente para cada mapa dependiendo de su ubicación y parámetros de proyección.

¿Es posible automatizar este proceso y calcular el ángulo de rotación del mapa automáticamente, ya que no encuentro este valor manualmente cada vez (me gustaría crear un compositor universal para todos los mapas a través del menú de generación de atlas)?

Jane
fuente
1
¿Desea rotar la entidad para que sea paralela a los bordes del marco del mapa? ¿Podría calcular el acimut de uno de los lados de la entidad y usarlo para rotarlo? Si fuera una línea, algo así como rotación = grados (atan (abs ((y1-y2) / (x1-x2)))) le daría un ángulo en grados. Luego, la rotación 90 lo alinearía con el marco del mapa.
mixedbredie
2
¿Estás usando un atlas? Si genera una capa de cobertura utilizando la herramienta "Cuadro de límite mínimo orientado", esa capa incluirá un atributo de rotación que puede vincularse a la rotación del elemento del mapa utilizando propiedades definidas por datos.
ndawson
@mixedbredie, sí, quiero rotar mi mapa para que los límites del mapa sean paralelos al marco del mapa en el lienzo del mapa. Intenté calcular el acimut, pero el problema es que mi capa con mapas es poligonal y no se sabe si el primer punto es el vértice superior izquierdo u otro cierto vértice (inferior derecho, etc.). Entonces, el ángulo casi no siempre satisface
Jane
La solución sugerida por @ndawson funciona de maravilla. Use la nueva capa de cuadro delimitador como una capa de cobertura oculta y todo se alineará.
mixedbredie
1
Abra la Caja de herramientas de procesamiento (Ctrl + Alt + T) y busque "orientado"; verá la herramienta en Geoalgoritmos de QGIS> Herramientas generales de vectores.
mixedbredie

Respuestas:

3

A continuación, una solución encontrada por @ndawson en los comentarios de la pregunta. Por favor, siéntase libre de comentar y mejorar esta respuesta.

Ejecute desde la caja de herramientas de procesamiento la herramienta de cuadro de límite mínimo Orientado en la cuadrícula de envolvente del mapa que ya usa.

Herramienta de cuadro delimitador orientado

Creará una capa que debería ser bastante idéntica a su capa original. Encontrará en la tabla de atributos un campo ANGLE

Campos OBB

Ahora debería poder usar este campo ANGLE en el compositor para completar el campo definido de datos para la rotación:

Ángulo definido datos

El problema parece ser que el ángulo no siempre es fácil de usar porque depende de la forma en que se forman los polígonos iniciales. Hice algunas pruebas y depende de la forma en que haya dibujado sus polígonos de origen. Puede que tenga que ajustar los valores de los atributos del campo ANGLe en consecuencia:

(el rojo es polígonos originales, en negro los polígonos de la herramienta OMBB). Digitalicé el ejemplo de polígonos similares de dos maneras diferentes (hacia la derecha o hacia la izquierda)

Ejemplo de OMBB

Para volver el valor del ángulo a su capa original, puede usar una operación de unión de ubicación espacial.

Gisnside
fuente
Muchas gracias! ¡He atentamente tu respuesta detallada! Pero el problema parece ser más complejo. Tengo una capa con todos los mapas y sus proyecciones en la tabla de atributos para cada mapa. La capa inicial con un conjunto de mapas en WGS84, pero al preparar un mapa, configuro la proyección en el lienzo del mapa, tomada de la tabla de atributos (que difiere para cada mapa) y necesito un valor de rotación de mapa en ESTA PROYECCIÓN. Entonces, tengo que volver a guardar cada mapa en su propia proyección y luego ejecutar OMBB para el polígono. Probé algunos mapas, pero el valor del ángulo de rotación sin éxito difiere del calculado a través de OMBB
Jane
Sería genial calcular el valor del ángulo de rotación en el compositor de mapas, basado en la fórmula de proyección en la tabla de atributos
Jane
No es fácil ! No veo cómo podría hacerlo de una manera simple, especialmente para el ángulo de rotación. Hay una manera de proyectar datos con la función "transformar", pero dudo que funcione para cualquier otra cosa que no sean las coordenadas. (Devuelve la geometría transformada de un CRS de origen a un CRS de destino. Sintaxis: transform (geom, source_auth_id, dest_auth_id) - Ejemplo: geom_to_wkt (transform ($ geometry, 'EPSG: 2154', 'EPSG: 4326'))
gisnside