IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

function load avec géolocalisation


Sujet :

JavaScript

  1. #1
    Membre averti Avatar de BRUNO71
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2007
    Messages
    502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 502
    Points : 319
    Points
    319
    Par défaut function load avec géolocalisation
    Bonjour,

    Je possède une function comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    getLocation();
    function getLocation(){
      if (navigator.geolocation){
            //show the geolocation position
            navigator.geolocation.getCurrentPosition(showPosition);
        }
      }
    function showPosition(position){
        var latitude = "" + position.coords.latitude + "";
       var longitude = "" + position.coords.longitude + "";
            window.alert(latitude+", "+longitude);
       }
    A titre d'essai j'ai inséré une alert pour vérifier cette fonction.... résultat OK.

    En dessous j'ai une autre fontion (load) ...... (map...Google).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     function load() {
          if (GBrowserIsCompatible()) {
            var map = new GMap2(document.getElementById("map"));
            map.addControl(new GSmallMapControl());
            map.addControl(new GMapTypeControl());
       var center = new GLatLng(50.6371834, 3.0630174);
            map.setCenter(center, 9);//zoom
            geocoder = new GClientGeocoder();
            var marker = new GMarker(center, {draggable: true});  
            map.addOverlay(marker);
            document.getElementById("lat").innerHTML = center.lat().toFixed(7);
            document.getElementById("lng").innerHTML = center.lng().toFixed(7);
    Je n'arrive pas à remplacer la latitude et la longitude, dans cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     var center = new GLatLng(50.6371834, 3.0630174);
    J'ai essayé comme ceci, puisque le window.alert fonctionne bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var center = new GLatLng(latitude+", "+longitude);
    Et...ça ne marche pas..
    Comment faire pour insérer (var latitude et var longitude).

    Merci par avance.

    Bruno

  2. #2
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Bonsoir,

    tu as probablement un message d'erreur à propos de variables indéfinies. Tu le verrais dans ta console, appuie sur la touche F12 pour l'ouvrir. Ça te permettra également d’utiliser console.log à la place de alert.

    Ton problème est un problème de contexte : les variables latitude et longitude ne sont pas définies au sein de la fonction load. En fait, elles ne sont pas garanties d'être disponibles à ce moment. Je m'explique.

    La méthode getCurrentPosition de l'API de géolocalisation est une méthode asynchrone. C'est pour ça que tu dois lui passer une fonction de rappel (callback) en paramètre, en l'occurence ta fonction showPosition. Celle-ci est appelée quand/si l'utilisateur clique sur « accepter » lorsque son navigateur lui demande s'il peut autoriser ton site à connaître ses coordonnées (invite qui n'apparaît pas toujours – suivant la configuration du navigateur, si ce n'est pas la première visite, etc.). À ce moment, il y a de grandes chances que l'évènement load se soit déjà produit.

    Temporellement parlant, en général ton script reçoit les coordonnées après la fin de ta fonction load. Tu ne peux donc pas centrer la carte dans cette fonction. Au lieu de ça, tu dois le faire dans la fonction showPosition. Tu devras t'arranger pour que l'objet map soit disponible dans cette fonction, ce qui signifie également que tu dois appeler ta fonction getLocation depuis ta fonction load (et non plus depuis le niveau global), et lui passer map en paramètre.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  3. #3
    Membre averti Avatar de BRUNO71
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2007
    Messages
    502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 502
    Points : 319
    Points
    319
    Par défaut
    Bonjour Watilin,

    3h30 du mat !Que de courage...

    Excellente explication, mon problème est résolu...

    J'ai changer de place la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    if (GBrowserIsCompatible()) {
     function load() {
    getLocation();
    function getLocation(){
      if (navigator.geolocation){
            navigator.geolocation.getCurrentPosition(showPosition);
        }
      }
    function showPosition(position){
            var latitude = "" + position.coords.latitude + "";
            var longitude = "" + position.coords.longitude + "";
            var map = new GMap2(document.getElementById("map"));
            map.addControl(new GSmallMapControl());
            map.addControl(new GMapTypeControl());
       var center = new GLatLng(latitude, longitude);
    }
    //etc etc
    Merci...

  4. #4
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Bonjour,
    if (GBrowserIsCompatible())
    il serait peut être urgent de passer à la version 3.
    Citation Envoyé par Google himself
    Version 2 of the Maps API is deprecated, and is warranted only until 19 November 2013 .
    Upgrading Your Google Maps JavaScript Application To v3

  5. #5
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var latitude = "" + position.coords.latitude + "";
    Il faudra qu'on m'explique un jour à quoi peut bien servir la concaténation d'une variable avec une chaine vide...

    Bref.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var center = new GLatLng(latitude, longitude);
    Comme l'indique la syntaxe, la fonction GLatLng() attend deux paramètres, or dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var center = new GLatLng(latitude+", "+longitude);
    tu ne lui en passes qu'une et de surcroit pas au bon format.
    Ce n'est pas parce que tu mets des virgules dans une chaine que tu transmets plus de paramètres !
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 08/10/2007, 11h27
  2. utiliser la function locate avec Ttable Tquery PROBLEME
    Par jojojojo57 dans le forum Bases de données
    Réponses: 4
    Dernier message: 18/03/2007, 14h45
  3. function stripslashes() avec des string
    Par rigel dans le forum Langage
    Réponses: 2
    Dernier message: 04/07/2006, 08h53
  4. Réponses: 1
    Dernier message: 22/04/2006, 19h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo