Rotação automática de mapa no QGIS do compositor de mapas

10

O problema é que eu desejo tornar possível calcular automaticamente a rotação do mapa no compositor de mapas. Eu tenho muitos mapas em um arquivo com seus próprios parâmetros de projeção e gostaria de definir a rotação do mapa no compositor de mapas com base na fórmula de projeção (ou outra coisa?)

por exemplo, localize um mapa específico no projeto:

insira a descrição da imagem aqui

A projeção é

insira a descrição da imagem aqui

No limite do mapa do compositor de mapas, parece

insira a descrição da imagem aqui

E com o ângulo de rotação selecionado para o mapa com seus parâmetros de projeção:

insira a descrição da imagem aqui

O ângulo de rotação do mapa é diferente para cada mapa, dependendo da localização e dos parâmetros de projeção.

É possível automatizar esse processo e calcular o ângulo de rotação do mapa automaticamente, pois não encontra esse valor manualmente todas as vezes (eu gostaria de criar o compositor universal para todos os mapas via menu de geração de atlas)?

Jane
fonte
1
Deseja girar o recurso para que fique paralelo às bordas do quadro do mapa? Você poderia calcular o azimute de um dos lados do recurso e usá-lo para girá-lo? Se fosse uma linha algo como rotação = graus (atan (abs ((y1-y2) / (x1-x2))))) daria a você um ângulo em graus. Em seguida, a rotação 90 o alinharia com o quadro do mapa.
mixedbredie
2
Você está usando um atlas? Se você gerar uma camada de cobertura usando a ferramenta "Caixa delimitadora mínima orientada", essa camada incluirá um atributo de rotação que pode ser vinculado à rotação do item de mapa usando propriedades definidas pelos dados.
Ndawson 29/06
@mixedbredie, Sim, quero girar meu mapa para que os limites do mapa sejam paralelos ao quadro do mapa na tela do mapa. Tentei calcular o azimute, mas o problema é que minha camada com mapas é poligonal e não há como dizer que o primeiro ponto é o vértice superior esquerdo ou outro vértice (inferior direito, etc.). Então, o ângulo quase sempre não é suficiente
Jane
A solução sugerida por @ndawson funciona muito bem. Use a nova camada de caixa delimitadora como uma camada de cobertura oculta e tudo ficará alinhado.
mixedbredie
1
Abra a Caixa de ferramentas de processamento (Ctrl + Alt + T) e procure por "orientado" - você vê a ferramenta em geoalgoritmos do QGIS> Ferramentas gerais de vetor.
mixedbredie

Respostas:

3

Abaixo uma solução encontrada por @ndawson nos comentários da pergunta. Por favor, sinta-se livre para comentar e melhorar esta resposta.

Execute da caixa de ferramentas de processamento a ferramenta Caixa delimitadora mínima orientada na grade de envelopes de mapa que você já usa.

Ferramenta Caixa delimitadora orientada

Isso criará uma camada que deve ser bastante idêntica à sua camada original. Você encontrará na tabela de atributos um campo ANGLE

Campos OBB

Agora você deve poder usar este campo ANGLE no compositor para preencher o campo de dados definido para rotação:

Ângulo definido pelos dados

O problema parece ser que o ângulo nem sempre é fácil de usar, pois depende da maneira como os polígonos iniciais são feitos. Fiz alguns testes e depende de como você desenhou seus polígonos de origem. Você pode precisar ajustar os valores dos atributos do campo ANGLe de acordo:

(vermelho é polígonos originais, em preto os polígonos da ferramenta OMBB). Digitalizei para os exemplos semelhantes de polígonos de duas maneiras diferentes (indo para a direita ou esquerda)

Exemplo OMBB

Para retornar o valor do ângulo à sua camada original, você pode usar uma operação de junção de localização espacial.

gisnside
fonte
Muito obrigado! Eu tenho vermelho atentamente sua resposta detalhada! Mas o problema parece ser mais complexo. Eu tenho uma camada com todos os mapas e suas projeções na tabela de atributos para cada mapa. A camada inicial com o conjunto de mapas no WGS84, mas ao preparar um mapa, defino a projeção na tela do mapa, tirada da tabela de atributos (que difere para cada mapa) e preciso de um valor de rotação do mapa em ESTA PROJEÇÃO. Portanto, preciso salvar novamente cada mapa em sua própria projeção e executar o OMBB para o polígono. Eu testei para alguns mapas, mas difere valor de ângulo de rotação unseccesfully partir calculados via OMBB
Jane
Seria ótimo para o valor do ângulo de rotação calcular no mapa compositor, com base na fórmula de projeção na tabela de atributos
Jane
Díficil ! Não vejo como você poderia fazer isso de uma maneira simples, especialmente no ângulo de rotação. Existe uma maneira de projetar dados com a função "transformar", mas duvido que funcione para qualquer outra coisa que seja coordenada. (Retorna a geometria transformada de um CRS de origem em um CRS de destino. Sintaxe: transform (geom, source_auth_id, dest_auth_id) - Exemplo: geom_to_wkt (transform ($ geometry, 'EPSG: 2154', 'EPSG: 4326'))
gisnside