2011-02-14 12 views
5

En este caso uso el control Map de OpenLayers 2.10. En el mapa tengo la capa base que es OpenLayers.Layer.OSM y OpenLayers.Layer.Vector con funciones personalizadas. Ahora cuando muevo el mapa usando el mouse, las características que no estaban visibles previamente no se volverán a dibujar hasta que se suelte el botón del mouse. He notado el mismo problema en todos los ejemplos de OpenLayers. ¿Alguien puede proporcionar algún tipo de trabajo para cambiar este comportamiento? Lo que quiero lograr es dibujar características inmediatamente después de que la característica se vuelva visible o siempre dibujar todas las características (trabajo con un número pequeño de características para que el control del mapa no sea crítico).Características de OpenLayers redibujar solo después del mouse moveend

Mi idea actual es manejar algunos eventos específicos en el mapa (como mover el mouse con un clic) y forzar el redibujado de las características.

+0

¿Ya están en el cliente sus características "ocultas" o las obtiene al mover el mapa con el mouse? Será más fácil encontrar una solución si publica algún código que esté usando – igorti

+0

. También necesito una solución para este problema. Tal vez alguien puede ayudar. –

Respuesta

0

No tengo una solución, pero hice una observación. Si mira este ejemplo en Vector Behavior en el sitio web de OL Ejemplos, si las características son parcialmente visibles (es decir, se colocan en el borde de la ventana gráfica), permanecen parcialmente ocultas cuando se arrastran a la vista completa. Solo es completamente visible al soltar el botón del mouse. Mi punto es que parece ser un problema de visualización más que un problema de carga, si eso no era aparente ya ...

Tendrá cuidado con la pregunta, curioso por la respuesta. :-)

+0

Quiero votar esto, pero esto debería ser un comentario, no una respuesta. – colllin

0

En caso de que alguien se tropiece con esta pregunta (como yo lo hice) OpenLayers 2.11 resuelve este problema. Lo probé en mi aplicación web y ahora vuelve a dibujar las características vectoriales de forma instantánea, mientras que con una versión anterior de OL instalada, haría lo que estaba escrito anteriormente. ¡Algo que nunca había notado antes tan agradable para detectarlo!

Aquí están las notas de la versión.

http://trac.osgeo.org/openlayers/wiki/Release/2.11/Notes

Este tipo de espectáculos en acción. El mejor ejemplo que pude encontrar Temo: P

http://openlayers.org/dev/examples/rotate-features.html

+0

Hmm ... En ese "ejemplo" todavía veo el problema. Arrastre el mapa para que los vectores estén completamente fuera de la página y suéltelos. A continuación, arrastre el mapa de regreso a donde estaba: las funciones no volverán a aparecer hasta que suelte el mouse. – colllin

+0

Debo admitir que me di cuenta después de actualizar a OL 2.12 que esto había cambiado, pero pensé que era solo mi configuración que hice algo mal, y de todos modos no es tan importante. Aunque es bueno ver tu explicación en tu respuesta. –

6

actualización

El procesador SVG2 fue introducido en v2.11, y luego inmediatamente obsoleto en v2.12 por razones de fiabilidad (Ver this pull request). Para OL>> 2.12, establezca la propiedad ratio de la capa para que muestre todas las características dentro de un área más amplia como una proporción del tamaño de la pantalla. El trade-off es el rendimiento, y si su usuario "tira" su mapa en alguna dirección, volará más allá de las características, pero en ese punto, probablemente esperan tener algunas demoras en la representación.

new OpenLayers.Layer.Vector("My Layer", { 
    ratio: 2 
}); 

respuesta original

De http://lists.osgeo.org/pipermail/openlayers-dev/2011-March/007345.html:

el nuevo procesador de OpenLayers.Renderer.SVG2 hace lo que está solicitando. Está disponible en el tronco (y estará en 2.11).Para usarlo, configurar la matriz de extracción de grasas para su OpenLayers.Layer.Vector así:

new OpenLayers.Layer.Vector("My Layer", { 
    renderers: ["SVG2", "VML", "Canvas"] 
}); 

o configurarlo en el prototipo:

OpenLayers.Layer.Vector.renderers = ["SVG2", "VML", "Canvas"];

Tenga en cuenta que VML (utilizado en IE6,7,8) y El lienzo (utilizado en dispositivos Android) se comporta como Renderer.SVG y no dibuja características durante el paneo.

Cuestiones relacionadas