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 :

Distance matrix service trop de de coordonnées par requête [Google Maps]


Sujet :

APIs Google

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 213
    Points : 92
    Points
    92
    Par défaut Distance matrix service trop de de coordonnées par requête
    Bonjour,

    J'ai besoin d'utiliser l'API distance matrix service, mais cette API accepte 25 destinations et 100 maximum éléments par requête.

    Dans ma page l'utilisateur ma rentrer son adresse et cela doit être comparé à 152 coordonnées d'emplacements pour trouver les trois emplacements les plus proche. Ces 152 coordonnées sont réparties sur 10 communes, au départ j'avais diviser ces 152 coordonnées en tableau de 25 éléments mais après 100 éléments, l'API de google me renvoie un OVER_QUERY_LIMIT.

    Après je pensais en fonction de l'adresse rentrée par l'utilisateur envoyer les coordonnées de la commune de l'utilisateur et des communes limitrophes. Si l'utilisateur rentre adresse avec une commune qui ne fait pas partie des 10 communes, la requête ne sera pas envoyé.

    Sinon quand j'arrive à 100 éléments je peux attendre avant de lancer la requête avec les 52 éléments restants mais ce n'est pas optimal.

    Voici mon code*:

    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
    68
    69
    70
    71
    var directions_response = new Array();
     
      function callDirectionAPIRequest(adress, mode_transport, destinations){
        var service = new google.maps.DistanceMatrixService();		
        service.getDistanceMatrix(
        {
          origins: [adress],
        	destinations: destinations,
        	travelMode: google.maps.TravelMode[mode_transport],
        	unitSystem: google.maps.UnitSystem.METRIC,
        	avoidHighways: false,
        	avoidTolls: false
        }, function(response, status) {
           console.log(status);
     
          if (status == google.maps.DistanceMatrixStatus.OK) {
            directions_response.push(response.rows);
          }
        });           
      }
     
      $('#btn_distance').click(function() {
        if ( $('#useradress').length > 0 ) {
          var adress = $('#useradress').val();
          var mode_transport = $('#travelmode').val();
     
          // On charge le geojson contenant tous les points des PAVs
          $.getJSON( "geojson/points.geojson").done(function( data ) {
            var destinations1 = new Array();
            var destinations2 = new Array();
            var destinations3 = new Array();
            var destinations4 = new Array();
            var destinations5 = new Array();
            var destinations6 = new Array();
     
            $.each( data["features"], function( key, val ) {
              var longitude = val["geometry"]["coordinates"][0];
              var latitude = val["geometry"]["coordinates"][1];
     
              if ( key < 25 ) {                    
                destinations1.push(new google.maps.LatLng(latitude,longitude));
              } else if ( key >= 25 && key < 50 ) {
                destinations2.push(new google.maps.LatLng(latitude,longitude));
              } else if ( key >= 50 && key < 75 ) {            
                destinations3.push(new google.maps.LatLng(latitude,longitude));
              } else if ( key >= 75 && key < 100 ) {            
                destinations4.push(new google.maps.LatLng(latitude,longitude));
              } else if ( key >= 100 && key < 125 ) {            
                destinations5.push(new google.maps.LatLng(latitude,longitude));
              } else if ( key >= 125 && key < 150 ) {            
                destinations6.push(new google.maps.LatLng(latitude,longitude));
              }
            });
     
            var obj = {
              key1: destinations1,
              key2: destinations2,
              key3: destinations3,
              key4: destinations4,
              key5: destinations5,
              key6: destinations6
            };
     
            $.each( obj , function( key, val ) {
              callDirectionAPIRequest(adress, mode_transport, val);
            });        
          });      
        } else {
          // Le champ adresse est vide
        }
      });
    Auriez-vous une idée ?

    Merci d'avance

  2. #2
    Membre régulier
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 213
    Points : 92
    Points
    92
    Par défaut
    Bonjour,

    Dans le champ ou l'utilisateur va entrer son adresse j'utilise un système d’auto-complétion basé sur typeahead-adresspicker.js, donc il faudrait que j'extraie juste le nom de la ville dans l'adresse sélectionnée par l'utilisateur.

    Ensuite il faudrait que je récupère les points de la commune correspondants à la commune donnée dans l'adresse et aussi les communes limitrophes, ce qui me réduira le nombre de points à envoyé à l'API Distance Matrix.

    Vous pensez que c'est faisable de faire comme cela ? Je ne sais pas si c'est bien clair ?

  3. #3
    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,
    ton approche me parait bien compliquée.
    Tu peux toujours commencer par faire un tri, fonction de la distance, dans ce qu'il y a à garder ou encore faire un tri ascendant entre les différentes positions et ne garder que les premières.

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 213
    Points : 92
    Points
    92
    Par défaut
    Bonjour,

    J'ai une adresse entrée par l'utilisateur et je dois trouver les trois points les plus proches parmi les 150 que j'ai dans mon fichier geoJSON, si je ne passe pas en premier par l'API distance matrix service pour avoir les distances, je ne peux pas faire de tri en fonction de la distance.

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 213
    Points : 92
    Points
    92
    Par défaut
    J'ai trouvé une possibilité de trouver les points les plus proches en utilisant du Php, du coup mon script javascript se décompose comme suit :

    1. L'utilisateur entre son adresse postale
    2. Je fais une requête avec l'API geocode de google pour récupérer la latitude et longitude correspondante à l'adresse
    3. Il faudrait attendre le résultat de l'API geocode de google avant de faire une requête JSON vers php pour récupérer les dix points les plus proches, c'est toujours un problème de timing
    4. Ensuite je pourrais appeler l'API distance matrix pour qu'il me donne la distance précise et le temps de parcours parmi les dix points les plus proches retournés par php


    Je cherchais une méthode pour attendre que la requête vers l'API geocode de google soit terminée

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

Discussions similaires

  1. [Google Maps] Distance Matrix Service : getDistanceMatrix
    Par lesanglier dans le forum APIs Google
    Réponses: 1
    Dernier message: 23/01/2014, 10h47
  2. Réponses: 2
    Dernier message: 20/11/2007, 10h58
  3. script trop long message afficher par navigateur
    Par nocoment dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 16/05/2007, 18h40
  4. Trop de mémoire utilisée par SQL Server
    Par sylvie75 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 24/08/2006, 12h46
  5. [VBA] Recordset : trop d'éléments obtenus par Recordcount
    Par Nenette_cherie dans le forum Access
    Réponses: 15
    Dernier message: 11/05/2006, 11h33

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