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

APIs Google Discussion :

Localiser des points sur une carte google


Sujet :

APIs Google

  1. #1
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Points : 175
    Points
    175
    Par défaut Localiser des points sur une carte google
    Bonjour, j'ai une liste de point a localiser, je fais comme ca :

    je charge une dropdownlist avec tous les elements
    Je prends tous les elements qui existent dans ma BD (le nombre = a celui dans la ddl)

    je passe les elements a une fonction javascript dans un tableau et je les localise

    Mon probleme c'est qu'il ne les localise pas tous :

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
            int len = ddlAdr.Items.Count;
     
            string[,] tabStation = new string[ddlAdr.Items.Count, 4];
     
            connection.Open();
            System.Data.SqlClient.SqlDataReader oDBDataReader2;
            String Query2 = "SELECT * FROM [StationsServices]";//  where ID_Station =" + ddlAdr.Items[d].Value
            SqlCommand cmdDatabase2 = new SqlCommand(Query2, connection);
            oDBDataReader2 = cmdDatabase2.ExecuteReader();
            int a = 0;
            while (oDBDataReader2.Read() == true)
            {
                for (int i = a; i < ddlAdr.Items.Count; i++)
                {
                    tabStation[i, 0] = oDBDataReader2["Adresse"].ToString();
                    tabStation[i, 1] = oDBDataReader2["Name_station"].ToString();
                    tabStation[i, 2] = oDBDataReader2["Latitude"].ToString();
                    tabStation[i, 3] = oDBDataReader2["Longitude"].ToString();
                    a = a + 1;
                    break;
                }
     
            }
            connection.Close();
     
            StringBuilder builder2 = new StringBuilder();
            builder2.Append("[");
            for (int i = 0; i < len; ++i)
            {
                builder2.Append("['");
                for (int j = 0; j < 4; ++j)
                {
                    builder2.Append(tabStation[i, j]);
                    if (j != 4 - 1)
                    {
                        builder2.Append("','");
                    }
                }
                builder2.Append("']");
     
                if (i != len - 1)
                {
                    builder2.Append(",");
                }
            }
            builder2.Append("]");
     
            string result = builder2.ToString();
     
            BtnStations.Attributes.Add("onClick", "javascript:findAllAddress(" + result + "); return false;");
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    function findAllAddress(tabStation) {
        clearOverlays();
        var n = tabStation.length;
     
     
        for (var i = 0; i < n; i++) {
            findAddress2(tabStation[i][0], tabStation[i][1], tabStation[i][2], tabStation[i][3]);
            }
    }
     
    function findAddress2(adresse, name, lt, lg) {
     
        var latlng = new google.maps.LatLng(lt, lg);
     
        var address = adresse;  
     
        // script uses our 'geocoder' in order to find location by address name
        geocoder.geocode({ 'latLng': latlng }, function (results, status) {
            if (status == google.maps.GeocoderStatus.OK) { // and, if everything is ok
     
                // we will center map
                var addrLocation = latlng;
                map.setCenter(addrLocation);
     
                // store current coordinates into hidden variables
                document.getElementById('lat').value = lt;
                document.getElementById('lng').value = lg;
     
                // and then - add new custom marker and Infowindow
                var addrMarker = new google.maps.Marker({
     
                    position: addrLocation,
                    map: map,
                    title: results[0].formatted_address
                    //animation: google.maps.Animation.BOUNCE
                });
     
                iconFile = 'https://maps.gstatic.com/mapfiles/ms2/micons/gas.png';          
                addrMarker.setIcon(iconFile) ;
     
                var infowindow = new google.maps.InfoWindow({
                content: '<DIV STYLE="line-height:1.35;overflow:hidden;white-space:nowrap;"><DIV STYLE=overflow:auto; width:50px; height:50px><font style="color:#000;">' + name +
                '<br /></font></div></div>'
     
                });
     
     
                infowindow.open(map, addrMarker);
                markers.push(addrMarker);
     
                addrMarker.indice = markers.length - 1;
     
                // suppression du marker sur dblclick
                google.maps.event.addListener(addrMarker, 'dblclick', function (data) {
                    this.setMap(null);
                    var ind = this.indice;
                    markers.splice(ind, 1);
                    // r?©ajuste les indices des autres marqueurs
                    for (; markers[ind]; ind++) {
                        markers[ind].indice = ind;
                    }
                });
            } 
        });
    }
    quand je met une alert a l'interieur de la fonction findAllAddress, je vois que tous mes elements sont récupérés avec le nombre exact de donnés mais siur la carte il me localise uniquement 5 element

    pourriez vous m'aidez ?

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 079
    Points : 44 662
    Points
    44 662
    Par défaut
    Bonjour,
    OVER_QUERY_LIMIT voilà le mot clé de ton problème, une petite recherche sur le forum devrait te satisfaire.

    Je vais me permettre une remarque quand même
    Les données "adresse" sont dans la base de données ALORS pourquoi s'obstiner à faire du geocodage ALORS que mettre en base les coordonnées serait si simple avec l'avantage de pouvoir ajuster si l'API affiche un écart se qui n'est pas rare somme toute ?
    Il me semble que le geocodage se justifie dans le cas de saisie à la volée mais il faut être maso pour le faire lorsque l'on connait par avance les adresses.

  3. #3
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Points : 175
    Points
    175
    Par défaut
    voila ce que j'ai fais :

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    function findAddress2(adresse, name, lt, lg) {
     
        var lat = parseFloat(lt.replace(',','.'));
        var lng = parseFloat(lg.replace(',','.'));
     
        var latlng = new google.maps.LatLng(lat, lng);
     
        var address = adresse;  
     
        // script uses our 'geocoder' in order to find location by address name
        geocoder.geocode({ 'latLng': latlng }, function (results, status) {
        if (status == google.maps.GeocoderStatus.OK) { // and, if everything is ok
     
                // we will center map
                var addrLocation = latlng;
                map.setCenter(addrLocation);
     
                // store current coordinates into hidden variables
                document.getElementById('lat').value = lat;
                document.getElementById('lng').value = lng;
     
                // and then - add new custom marker and Infowindow
                var addrMarker = new google.maps.Marker({
     
                    position: addrLocation,
                    map: map,
                    title: results[0].formatted_address
                    //animation: google.maps.Animation.BOUNCE
                });
     
                iconFile = 'https://maps.gstatic.com/mapfiles/ms2/micons/gas.png';          
                addrMarker.setIcon(iconFile) ;
     
                var infowindow = new google.maps.InfoWindow({
                content: '<DIV STYLE="line-height:1.35;overflow:hidden;white-space:nowrap;"><DIV STYLE=overflow:auto; width:50px; height:50px><font style="color:#000;">' + name +
                '<br /></font></div></div>'
     
                });
     
     
                infowindow.open(map, addrMarker);
                markers.push(addrMarker);
     
                addrMarker.indice = markers.length - 1;
     
                // suppression du marker sur dblclick
                google.maps.event.addListener(addrMarker, 'dblclick', function (data) {
                    this.setMap(null);
                    var ind = this.indice;
                    markers.splice(ind, 1);
                    // r?©ajuste les indices des autres marqueurs
                    for (; markers[ind]; ind++) {
                        markers[ind].indice = ind;
                    }
                });
            } 
             else{
          // on traite l'erreur OVER_QUERY_LIMIT
          if( status == google.maps.GeocoderStatus.OVER_QUERY_LIMIT){
            // relance la requete
            setTimeout( function(){
              findAddress2(adresse, name, lt, lg); // rappel fonction avec meme param
            }, 200);
          }
          }
        });
    }
    Le fait de rappeler la fonction ne va pas créer des elements redondants dans la carte ?

    Priere de m'expliquer d'avantage cela :
    e vais me permettre une remarque quand même
    Les données "adresse" sont dans la base de données ALORS pourquoi s'obstiner à faire du geocodage ALORS que mettre en base les coordonnées serait si simple avec l'avantage de pouvoir ajuster si l'API affiche un écart se qui n'est pas rare somme toute ?
    Il me semble que le geocodage se justifie dans le cas de saisie à la volée mais il faut être maso pour le faire lorsque l'on connait par avance les adresses.

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 079
    Points : 44 662
    Points
    44 662
    Par défaut
    Le fait de rappeler la fonction ne va pas créer des elements redondants dans la carte ?
    Ben non car si elle est rappelée c'est qu'il ne c'est rien passé, donc rien de crée.

    Concernant l'explication, qui me paraissait pourtant simple ...

    Pourquoi à chaque ouverture de la page demandes tu au client d'aller chercher des informations concernant des données que tu as en partie dans ta base?

    Il me semble donc plus judicieux que tu fasses cette recherche de ton coté et que tu enrichisses ta base de données avec le résultat de la sorte au chargement de la page l'affichage n'en sera que plus rapide et de plus quelle économie de connexion.

  5. #5
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Points : 175
    Points
    175
    Par défaut
    Pour ton explication je ne vois pas ou fais ca
    Je charge mes données à partir de ma base et je les localise sur ma carte :
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    Code :Sélectionner tout - Visualiser dans une fenêtre à part
     
            int len = ddlAdr.Items.Count;
     
            string[,] tabStation = new string[ddlAdr.Items.Count, 4];
     
            connection.Open();
            System.Data.SqlClient.SqlDataReader oDBDataReader2;
            String Query2 = "SELECT * FROM [StationsServices]";//  where ID_Station =" + ddlAdr.Items[d].Value
            SqlCommand cmdDatabase2 = new SqlCommand(Query2, connection);
            oDBDataReader2 = cmdDatabase2.ExecuteReader();
            int a = 0;
            while (oDBDataReader2.Read() == true)
            {
                for (int i = a; i < ddlAdr.Items.Count; i++)
                {
                    tabStation[i, 0] = oDBDataReader2["Adresse"].ToString();
                    tabStation[i, 1] = oDBDataReader2["Name_station"].ToString();
                    tabStation[i, 2] = oDBDataReader2["Latitude"].ToString();
                    tabStation[i, 3] = oDBDataReader2["Longitude"].ToString();
                    a = a + 1;
                    break;
                }
     
            }
            connection.Close();
     
            StringBuilder builder2 = new StringBuilder();
            builder2.Append("[");
            for (int i = 0; i < len; ++i)
            {
                builder2.Append("['");
                for (int j = 0; j < 4; ++j)
                {
                    builder2.Append(tabStation[i, j]);
                    if (j != 4 - 1)
                    {
                        builder2.Append("','");
                    }
                }
                builder2.Append("']");
     
                if (i != len - 1)
                {
                    builder2.Append(",");
                }
            }
            builder2.Append("]");
     
            string result = builder2.ToString();
     
            BtnStations.Attributes.Add("onClick", "javascript:findAllAddress(" + result + ")
    ; return false;");
    Je n ai pas autre moyen parce que tout dépend de cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
           BtnStations.Attributes.Add("onClick", "javascript:findAllAddress(" + result + "); return false;");
    Quand je le met dans un événement click ça ne marche pas

  6. #6
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 079
    Points : 44 662
    Points
    44 662
    Par défaut
    1000 excuses je n'avais pas vu ce morceau de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    while (oDBDataReader2.Read() == true)
    {
        for (int i = a; i < ddlAdr.Items.Count; i++)
        {
            tabStation[i, 0] = oDBDataReader2["Adresse"].ToString();
            tabStation[i, 1] = oDBDataReader2["Name_station"].ToString();
            tabStation[i, 2] = oDBDataReader2["Latitude"].ToString();
            tabStation[i, 3] = oDBDataReader2["Longitude"].ToString();
            a = a + 1;
            break;
        }
     
    }
    j'en étais resté à
    je passe les elements a une fonction javascript dans un tableau et je les localise
    donc ma question change radicalement...cela te sers à quoi attendu que tu as déjà les informations !?!

  7. #7
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Points : 175
    Points
    175
    Par défaut
    Je n'ai pas compris ta question comme toujours

    mais je les charge de ma BD, je les stocke dans un tableau et je les passe a une fonction javascript et je les localiser a travers geocode

  8. #8
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 079
    Points : 44 662
    Points
    44 662
    Par défaut
    Excuse moi mais je ne vois plus comment t'expliquer que ce que tu fais ne sert à RIEN.

    Au départ tu as
    - Adresse
    - Name_station
    - Latitude
    - Longitude

    ...avec Latitude et Longitude tu "geocodes" pour récupérer quoi !?! results[0].formatted_address qui devrait être la même chose (ou proche) de Adresse que tu connais déjà puisque dans ta BdD.

Discussions similaires

  1. Placer des points sur une carte
    Par juniordev dans le forum Débuter
    Réponses: 14
    Dernier message: 09/10/2014, 11h49
  2. Localiser des points sur une carte géographique
    Par Msysteme dans le forum SIG : Système d'information Géographique
    Réponses: 4
    Dernier message: 28/07/2014, 12h05
  3. Afficher des points sur une carte
    Par atta09 dans le forum Discussions diverses
    Réponses: 0
    Dernier message: 29/07/2013, 11h59
  4. Réponses: 9
    Dernier message: 20/07/2012, 16h15
  5. [MySQL] Intégration d'une géo-localisation des points de vente par google map
    Par scorpion75 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 12/10/2011, 13h21

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