Déplacer le marqueur en douceur le long de deux coordonnées GPS

10

J'essaie d'animer un marqueur d'une coordonnée GPS à une autre. J'utilise actuellement Google Maps pour y parvenir et, bien que mon algorithme semble correct, Google Maps ne parvient pas à convertir la position GPS au bon pixel sur la carte, ce qui rend l'animation moins fluide lorsque la carte est dézoomée . Zoomé, il est très fluide et c'est pourquoi je soupçonne que le "zig zag" est provoqué par Google effectuant une mauvaise conversion LatLng-> pixel.

La meilleure solution serait pour moi de traiter directement les coordonnées des pixels des marqueurs (x, y) mais il n'y a malheureusement pas de méthode publique pour attribuer l'emplacement des pixels à un marqueur.

Le code est disponible ici: http://dev.syskall.com/map/

Comment rendre l'animation plus fluide lors d'un zoom arrière? Sinon, je serais intéressé à utiliser un équivalent de Google Maps qui me permettrait d'accomplir ce que j'essaie de faire si ce n'est pas possible avec Google Maps.

PS: Je ne sais pas si c'est le bon endroit pour poser ma question, faites-moi savoir si ce n'est pas le cas.

Oli
la source

Réponses:

2

Vous pouvez utiliser la bibliothèque de marqueurs-animer-discrète pour faire des marqueurs une transition en douceur d'un emplacement à un autre.

Vous pouvez initialiser votre marqueur comme ça:

var marker = new SlidingMarker({
   //your original marker options
   //...
});

Ainsi, votre marqueur s'animera du lieu de départ au lieu donné lors de cet appel:

marker.setPosition(givenPosition);

PS Je suis l'auteur de la bibliothèque.

viskin
la source
Votre bibliothèque a-t-elle la possibilité de faire pivoter l'icône selon un angle? sur la base du dernier lat, se déplaçant vers le lon suivant?
Tim Maxey
Voir la discussion ici . Un événement est déclenché pour chaque étape de l'animation, où vous pouvez obtenir des coordonnées et essayer de faire pivoter votre marqueur.
viskin
1

Vous pouvez également envisager l'approche suivante:

  • générer une collection de marqueurs entre deux coordonnées pour chaque emplacement
  • basculer un marqueur spécifique en utilisant la marker.setVisibility(value)fonction

Exemple complet

JSFiddle

Vadim Gremyachev
la source