Eu gostaria de girar um conjunto de pontos vetoriais no QGIS um número arbitrário de graus em torno de um ponto central (ou ponto arbitrário).
Isso é semelhante a uma pergunta recente sobre a criação de uma grade regular ; foi sugerido lá o uso da ferramenta "Affine Transformation" (que suponho que significou o plug-in) para girar ou mudar uma grade de pontos em um ângulo ou distância arbitrários. Suspeito que não esteja entendendo como funciona e não consegui fazê-lo funcionar.
Eu crio uma grade regular de pontos no QGIS e garanto que a zona UTM esteja definida corretamente para a camada e o projeto, ative a edição da camada e abra a caixa de diálogo do plug-in (qgsAffine):
Eu seleciono 'camada inteira' e, em seguida, desejando girar todo o campo de pontos em 15 °, coloco 15 nas duas caixas 'rotação' (que podem ser as coisas que estão dando errado). A operação resulta na rotação dos pontos em algum lugar fora do planeta!
Essa é a ferramenta certa para o trabalho? Eu gostaria de girar um conjunto de pontos sobre o centro comum, idealmente.
Atualização : qgsAffine é apenas um pensamento; se pudermos fazer isso em qualquer ferramenta QGIS, ficarei feliz!
Atualização 2 : qgsAffine é utilizável SE você souber os números certos para conectar (veja a resposta abaixo, obrigado Mike!). A planilha / calculadora funciona bem, ou aqui está a função R para obter os números diretamente:
## Compute correct affine numbers for qgsAffine plugin
affine <- function(originX, originY, rotAngle) {
A <- rotAngle * pi / 180
scaleX <- scaleY <- cos(A)
rotX <- sin(A)
rotY <- -sin(A)
transX <- originX - cos(A) * originX + sin(A) * originY
transY <- originY - sin(A) * originX - cos(A) * originY
aff <- data.frame(scaleX, scaleY, rotX, rotY, transX, transY)
return(aff)
}
Portanto, para girar uma grade de pontos no norte de Uganda (UTM 36N), affine(578988, 419210, 30)
obtém:
scaleX scaleY rotX rotY transX transY
1 0.8660254 0.8660254 0.5 -0.5 287174.7 -233330.5
... que, inserido na caixa de diálogo qgsAffine, gira corretamente os pontos.
fonte
Respostas:
Você pode fazer isso no PostGIS usando ST_Affine . A funcionalidade para girar em torno de um ponto arbitrário foi adicionada ao ST_Rotate for PostGIS 2.0.
Se você possui uma versão anterior (como PostGIS 1.5, ou mesmo anterior), você pode adicionar estas funções:
Veja exemplos em ST_Rotate para ter uma idéia de como usá-lo para girar uma geometria em torno de um ponto x , y , incluindo o centróide (centro comum).
Como todos gostamos de matemática, a matriz de transformação das funções acima é representada como:
Onde θ é a rotação no sentido anti-horário sobre uma origem, x0 é o Leste / Longitude do ponto de origem e y0 é o Norte / Latitude. Essa matemática pode ser adaptada a qualquer ferramenta de transformação afim.
Para usar a ferramenta qgsAffine, você precisa entender para onde os valores da matriz fluem. Também é necessário um bom modelo de planilha para fazer pré-cálculos. A caixa de diálogo qgsAffine é mais ou menos assim:
Onde:
Por exemplo, se você deseja girar um polígono 30 ° no sentido horário em torno de 42 ° S, 174 ° E, aqui estão suas entradas para sua planilha:
Em seguida, copie / cole os resultados de uma planilha para a caixa direita. Usando a ordem das guias na caixa de diálogo:
O mesmo exemplo do PostGIS seria algo como:
fonte
Eu nunca cheguei a lugar nenhum tentando girar camadas vetoriais usando qgsAffine e acho que não estou sozinho. Esta questão surgiu recentemente no fórum QGIS e foi encontrada uma solução usando o OpenJump (gratuito). Dê uma olhada neste tópico (no final):
http://forum.qgis.org/viewtopic.php?f=2&t=10126&sid=28473d53d244a4cd2a6f91887811ef02
Claro que você também pode usar essa ferramenta apenas para fazer uma rotação simples dos seus dados.
fonte