Usando el siguiente ejemplo, puedo cambiar el tamaño por escala y origen.
polygonFeature.geometry.resize(scale, origin);
vectorLayer.redraw();
¿Pero alguien tiene alguna sugerencia o código de muestra sobre cómo cambiaría el tamaño de un polígono en uno de sus ejes?
Por ejemplo: me gustaría cambiar el tamaño del polígono naranja a algo como el polígono rojo. Entonces, solo los bordes norte y sur se mueven, mientras que los bordes este oeste se mantienen constantes.
EDITAR # 1 Aquí hay un caso de uso y datos de ejemplo: un usuario solo quiere una parte del rectángulo naranja porque solo está interesado en la costa y los proveedores de satélites le cobrarán más por toda la imagen. El usuario debe especificar qué parte de la imagen desea ordenar.
Aunque, no necesito toda la solución con controladores de tamaño, todo lo que necesito es la capacidad de cambiar el tamaño de la Altura del polígono .
EDITAR # 2: Tal vez estoy haciendo esto mal. Necesito una solución javascript (navegador) de openlayers y no puedo volver al servidor para cambiar el tamaño. Quizás lo que debería estar haciendo es interpolar puntos a lo largo de los bordes este y oeste de la geometría del polígono (puntos negros). Luego cree dos líneas (líneas verdes) en las que el usuario pueda arrastrar pero restringiendo el movimiento (arrastre) a esos puntos interpolados. Cuando el usuario está "hecho", obtengo el polígono amarillo restante
fuente
Respuestas:
¡Esto es lo que estaba buscando!
Ejemplo: http://openlayers.org/dev/examples/transform-feature.html
fuente
En el caso general, usaría una transformación en perspectiva para transformar su cuadrilátero original en un cuadrado unitario y viceversa.
Los pasos básicos son:
Advertencias:
Para el trabajo que estás haciendo, no deberías tener casos extraños como polígonos cóncavos. No estoy seguro de qué pasaría con los quads que cubren las regiones polares, sospecho que primero tendrías que proyectarlo en alguna proyección polar.
El enlace publicado en el paso 1. conduce a un documento con muchos cálculos matemáticos y algunos códigos con muchos elementos en C ++. Pero no debería ser demasiado difícil descubrir cómo funciona el código porque es solo una pequeña función en la parte superior del archivo .
fuente