Usando o exemplo a seguir , sou capaz de redimensionar por escala e origem.
polygonFeature.geometry.resize(scale, origin);
vectorLayer.redraw();
Mas alguém tem alguma sugestão ou código de exemplo sobre como eu redimensionaria um polígono em um de seus eixos?
Por exemplo: eu gostaria de redimensionar o polígono laranja para algo como o polígono vermelho. Portanto, apenas as bordas norte e sul se movem, enquanto as bordas leste-oeste permanecem constantes.
EDIT # 1 Aqui está um caso de uso e dados de exemplo: Um usuário deseja apenas uma parte do retângulo laranja porque está interessado apenas no litoral e os fornecedores de satélite cobrarão mais por toda a imagem. O usuário precisa especificar qual parte da imagem que deseja solicitar.
Embora, eu não precise de toda a solução com alças de dimensionamento, tudo que eu preciso é a capacidade de redimensionar a altura do polígono .
Edição # 2: Talvez eu esteja fazendo isso errado. Preciso de uma solução de javascript (navegador) de openlayers e não posso voltar ao servidor para redimensionar. Talvez o que eu deva fazer seja interpolar pontos ao longo das bordas leste e oeste da geometria do polígono (pontos pretos). Em seguida, crie duas linhas (linhas verdes) nas quais o usuário pode arrastar, mas restringir o movimento (draging) para esses pontos interpolados. Quando o usuário está "pronto", recebo o polígono amarelo restante?
fonte
Respostas:
Isto é o que eu estava procurando!
Exemplo: http://openlayers.org/dev/examples/transform-feature.html
fonte
No caso geral, eu usaria uma transformação de perspectiva para transformar seu quadrilátero original em um quadrado de unidade e vice-versa.
Os passos básicos são:
Ressalvas:
Para o trabalho que você está realizando, você não deve ter casos estranhos, como polígonos côncavos. Não tenho certeza do que aconteceria com os quadríceps que cobrem as regiões polares, suspeito que você teria que projetá-lo primeiro em alguma projeção polar.
O link postado na etapa 1. leva a um artigo pesado em matemática e a algum código pesado em modelo C ++. Mas não deve ser muito difícil descobrir como o código funciona, porque é apenas uma pequena função na parte superior do arquivo .
fonte