2017-06-23 2 views
-1

Je travaille avec l'API JS de Google Maps. J'essaie de placer un marqueur au centre de ma carte. J'utilise la variable currLocation pour conserver l'emplacement actuel. La variable currLocation a une valeur dans la méthode private inline (Section 1), mais elle est null lorsque je veux définir un marqueur (Section 2). Stackoverflow avait beaucoup de solutions pour "Impossible de définir la valeur de la variable globale", mais je ne pouvais pas résoudre mon problème avec leur référence.Impossible d'affecter une valeur à une variable à l'intérieur d'une méthode

Toute aide serait appréciée.

function initMap() { 

    var currLocation = null; 

    var defaultCenter = { lat: 34.397, lng: 150.644 }; 

    //Set Map properties 
    var map = new google.maps.Map(document.getElementById('gmap'), { 
     scrollwheel: true, 
     zoom: 10 
    }); 


    //Get Current Location - Section 1 
    if (navigator.geolocation) { 
     navigator.geolocation.getCurrentPosition(function (position) { 
      currLocation = new google.maps.LatLng(position.coords.latitude, position.coords.longitude); 
      map.setCenter(currLocation); 
     }); 
    } 
    else { 
     map.setCenter(defaultCenter); 
    } 

    //Put marker on the current location - Section 2 
    var marker = new google.maps.Marker({ 
     position: currLocation, 
     map: map 
    }); 
} 

Répondre

0

Bien le problème réside dans votre logique de flux de contrôle. Si la détection de la première fonction échoue (par exemple, if(navigator.geolocation)) (à partir de votre description, cela sonne exactement comme cela), la valeur de currLocation restera nulle. Si, il est souhaitable de continuer sans currLocation alors:

  1. renverrait une exception dans votre bloc de else que, navigateur ne pas connaître la distance.
  2. Définissez-le sur une valeur par défaut acceptable autre que null.
0

Vous êtes censé mettre la fonction de marquage dans le rappel de succès de getCurrentPosition. Parce que c'est une fonction asynchrone. currLocation serait null jusqu'à ce que la fonction de rappel de succès soit appelée.