Rotazione automatica della mappa nel compositore di mappe QGIS


10

Il fatto è che mi chiedo di rendere possibile calcolare automaticamente la rotazione della mappa nel compositore di mappe. Ho molte mappe in un file con i loro parametri di proiezione e vorrei definire la rotazione delle mappe nel compositore di mappe in base alla formula di proiezione (o smth?)

ad es. posizione di una mappa specifica nel progetto:

inserisci qui la descrizione dell'immagine

La proiezione è

inserisci qui la descrizione dell'immagine

Nella mappa del compositore appare il confine della mappa

inserisci qui la descrizione dell'immagine

E con l'angolo di rotazione selezionato per la mappa con i loro parametri di proiezione:

inserisci qui la descrizione dell'immagine

L'angolo di rotazione della mappa è diverso per ogni mappa a seconda della posizione e dei parametri di proiezione.

È possibile automatizzare questo processo e calcolare automaticamente l'angolo di rotazione della mappa, perché non trovo questo valore manualmente ogni volta (vorrei creare un compositore universale per tutte le mappe tramite il menu di generazione dell'atlante)?


1
Vuoi ruotare l'elemento in modo che sia parallelo ai bordi del riquadro della mappa? Potresti calcolare l'azimut di uno dei lati della funzione e utilizzarlo per ruotarlo? Se fosse una linea simile a rotazione = gradi (atan (abs ((y1-y2) / (x1-x2)))) ti darebbe un angolo in gradi. Quindi 90 - rotazione lo allinea con la cornice della mappa.
mixedbredie,

2
Stai usando un atlante? Se si genera un livello di copertura utilizzando lo strumento "Limite minimo orientato", tale livello includerà un attributo di rotazione che può essere associato alla rotazione dell'elemento della mappa utilizzando le proprietà definite dai dati.
ndawson,

@mixedbredie, Sì, voglio ruotare la mia mappa in modo che i confini della mappa siano paralleli alla cornice della mappa nell'area di disegno della mappa. Ho provato a calcolare l'azimut, ma il problema è che il mio livello con le mappe è poligonale e non si può dire che il primo punto sia il vertice in alto a sinistra o altri certi vertici (in basso a destra, ecc.). Quindi, l'angolo quasi ogni volta non soddisfa
Jane

La soluzione suggerita da @ndawson funziona a meraviglia. Usa il nuovo livello del riquadro di delimitazione come livello di copertura nascosto e tutto sarà allineato.
mixedbredie il

1
Apri la Casella degli strumenti di elaborazione (Ctrl + Alt + T) e cerca "orientato": vedrai lo strumento in Geoalgoritmi QGIS> Strumenti generali vettoriali.
mixedbredie il

Risposte:


3

Di seguito una soluzione trovata da @ndawson nei commenti della domanda. Non esitate a commentare e migliorare questa risposta.

Esegui dalla casella degli strumenti di elaborazione lo strumento Casella di delimitazione minima orientata sulla griglia di enveloppe della mappa che già usi.

Strumento orientato al rettangolo di selezione

Creerà un livello che dovrebbe essere abbastanza identico al livello originale. Nella tabella degli attributi troverai un campo ANGLE

Campi OBB

Ora dovresti essere in grado di utilizzare questo campo ANGLE nel compositore per riempire il campo definito di dati per la rotazione:

Angolo definito dai dati

Il problema sembra essere che l'angolo non è sempre facile da usare perché dipende dal modo in cui sono realizzati i poligoni iniziali. Ho fatto alcuni test e dipende da come hai disegnato i tuoi poligoni sorgente. Potrebbe essere necessario modificare di conseguenza i valori degli attributi del campo ANGLe:

(il rosso è poligoni originali, in nero i poligoni dello strumento OMBB). Ho digitalizzato per l'esempio poligoni simili in due modi diversi (andando a destra o a sinistra)

Esempio OMBB

Per ripristinare il valore dell'angolo al livello originale, è possibile utilizzare un'operazione di unione della posizione spaziale.


Grazie mille! Ho attentamente rosso la tua risposta dettagliata! Ma il problema sembra essere più complesso. Ho un livello con tutte le mappe e le loro proiezioni nella tabella degli attributi per ogni mappa. Il livello iniziale con set di mappe in WGS84, ma durante la preparazione di una mappa, ho impostato la proiezione nell'area di disegno della mappa, presa dalla tabella degli attributi (che differisce per ogni mappa) e ho bisogno di un valore di rotazione della mappa in QUESTA PROIEZIONE. Quindi, devo salvare nuovamente ogni mappa nella propria proiezione e quindi eseguire OMBB per il poligono. Ho provato per alcune mappe, ma il valore dell'angolo di rotazione senza interruzione differisce da calcolato tramite OMBB
Jane

Sarebbe bello calcolare il valore dell'angolo di rotazione nel compositore di mappe, basato sulla formula di proiezione nella tabella degli attributi
Jane

Non facile ! Non vedo come potresti farlo in modo semplice, soprattutto per l'angolo di rotazione. C'è un modo per proiettare i dati con la funzione "trasforma", ma dubito che funzionerà per qualsiasi altra coordinata. (Restituisce la geometria trasformata da un CRS di origine in un CRS di destinazione. Sintassi: transform (geom, source_auth_id, dest_auth_id) - Esempio: geom_to_wkt (transform ($ geometry, 'EPSG: 2154', 'EPSG: 4326'))
gisnside
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.