Suite

Les contrôles de mesure et de dessin OpenLayers n'affichent pas les croquis en mouvement sur les appareils tactiles

Les contrôles de mesure et de dessin OpenLayers n'affichent pas les croquis en mouvement sur les appareils tactiles


J'ai une API SIG qui utilise les contrôles de mesure et de dessin OpenLayers 2.13. Mais parlons juste du contrôle de la mesure, car les problèmes sont certainement liés.

Comme je le montre dans ce CodePen, le contrôle de mesure est censé afficher les mesures immédiates, c'est-à-dire les imprimer lors du déplacement de la souris.

measureControl = new OpenLayers.Control.Measure(OpenLayers.Handler.Path, measureControlOptions); map.addControl(measureControl); mesureControl.events.register('mesure', mesureControl, function(e) { printOutput(e); }); mesureControl.events.register('mesurepartielle', mesureControl, function(e) { printOutput(e); });

Bien sûr, lorsque j'utilise cet exemple dans un appareil tactile, je ne peux pas utiliser l'événement onmousemove. Au lieu de cela, le comportement est comme ceci :

  • 1er appui pour commencer à mesurer
  • 2e appui pour arrêter la mesure

Il indique la longueur souhaitée, mais je ne suis pas en mesure d'effectuer une mesure précise car je souhaite voir les mesures lorsque je déplace mon doigt sur l'écran tactile.

Je ne suis pas très familier avec les événements tactiles, alors je m'excuse si c'est une question stupide. mais existe-t-il un moyen simple d'imiter le comportement de la souris sur l'appareil tactile ?

Le comportement souhaité est quelque chose comme :

  • appuyez vers le bas --> commence à mesurer
  • appuyez sur déplacer (sans lever le doigt) --> continue de mesurer et affiche la nouvelle mesure à chaque mouvement
  • appuyez vers le haut --> arrête la mesure

Je suppose que vous devez écouter l'événement touchmove mais que vous ne l'avez pas testé auparavant.

S'il n'est pas nécessaire de mesurer par touchmove, vous pouvez jeter un œil à cet exemple avec un contrôle de mesure optimisé pour les appareils mobiles.

http://rawgit.com/pgiraud/OL-MobileMeasure/master/examples/mobile-measure.html

UPDATE1: je viens de l'essayer et ça marche. Vous pouvez prendre la valeur de pixel d'événement de l'événement touchmove et l'utiliser en combinaison avec map.getLonLatFromLayerPx(e.xy) pour obtenir un nouveau point de sommet pour la ligne.

Vous trouverez ici deux exemples de travail :

http://rawgit.com/neogis-de/OL_MobileMeasuring/master/index.html

http://rawgit.com/neogis-de/OL_MobileMeasuring/master/index2.html

(avec décalage de 5px pour que vous puissiez voir la fin de la ligne de mesure)


Voir la vidéo: Suivi de mouvement tuto 2 correction et optimisation