1

J'essaie d'implémenter une fonctionnalité où j'ai besoin de garder une trace de la position de l'utilisateur, en premier, je récupère l'emplacement de l'utilisateur en utilisant getCurrentLocation puis je passe les coordonnées pour placer un marqueur indiquant l'emplacement de l'utilisateur (la variable marqueur est définie globalement), puis j'appelle la fonction watchPosition pour pouvoir suivre l'emplacement de l'utilisateur si son emplacement a été modifié. Ce code est mis en œuvre pour une application ionique, mais la même logique sera utilisé sur toutes les applications web (vous pouvez ignorer $ cordovaGeolocation car il est le même que navigator.geolocation)Google map WatchPosition ne fonctionne pas correctement

var map = null; 
var myPosition = null; 

$scope.initMap = function(){ 
    var posOptions = { 
     enableHighAccuracy: false, 
     timeout: 20000,   
    }; 

    $cordovaGeolocation.getCurrentPosition(posOptions).then(
     function (position) { 
      var lat = position.coords.latitude; 
      var long = position.coords.longitude; 
      var myLatlng = new google.maps.LatLng(lat, long);    
      $scope.me = myLatlng; 

      var mapOptions = { 
       center: myLatlng, 
       zoom: 11, 
       disableDefaultUI: true, 
       mapTypeId: google.maps.MapTypeId.ROADMAP, 

      };   

      map = new google.maps.Map(document.getElementById("map"), mapOptions); 

      myPosition = new google.maps.Marker({ 
       map: map, 
       position: myLatlng, 
       draggable:false, 
       icon: "http://i.stack.imgur.com/orZ4x.png", 
      });    
      var circle = new google.maps.Circle({radius: User.getUser().distance*1000, center: myLatlng}); 
      map.fitBounds(circle.getBounds());    
      $cordovaGeolocation.watchPosition(win); 
     }, 
     function(err) { 
      console.log(err); 
     } 
    ); 
} 

le rappel de la fonction watchPosition est ci-dessous:

var win = function(position) { 
    var lat = position.coords.latitude; 
    var long = position.coords.longitude; 
    var myLatlng = new google.maps.LatLng(lat, long); 
    if(myPosition==null){ 
     myPosition = new google.maps.Marker({ 
      map: map, 
      position: myLatlng, 
      draggable:false, 
      icon: "http://i.stack.imgur.com/orZ4x.png", 
     }); 
     myPosition.setMap(map); 
    }else{ 
     myPosition.setPosition(myLatlng); 
    } 
    map.panTo(myLatlng); 
}; 

Répondre

0

Fondamentalement, l'erreur ici est quelque chose avec $ cordovaGeolocation, en le remplaçant par navigator.geolocation résolu le problème pour moi.