Module covoiturage sur intranet : recherche informations

Module covoiturage sur intranet : recherche informations - PHP - Programmation

Marsh Posté le 10-08-2009 à 10:33:22    

Bonjour à tous.
 
Alors voila, je suis développeur web (intranet applicatif) dans le public. Et on me demande (si possible) la mise en place d'un module de covoiturage uniquement à notre sphère (et donc "privé" ).
La partie de proposition de place pour le parcours de xxxx à xxxx tel jour à telle heure ne me pose pas vraisemblablement de soucis. J'ai deja une base de données des villes/villages avec codes postales pour mon départements, je peux facilement avoir cela pour ma région (département voisin).
MAIS, le soucis c'est la gestion des proximité, genre une personne habitant a XXX peux admettons prendre quelqu'un sur un rayon de 5 km, cette gestion de proximité est disponible sur différent site de covoiturage ici et là. J'aurais voulu savoir s'il y avait une base open source pour cela ?
Car je ne vois pas du tout comment faire sans cette informations
Au pire des cas je proposerais un choix issus du code postel genre XXXXX peut etre lié à plusieur communes avoisinante mais une gestion des proximités serait bien plus adéquate.
 
ATTENTION, je sais qu'il existe des outils sur différent site qui propose d'exporté leur module de covoiturage sur un site internet en developpement, cela dit cette solution ne m'interesse pas car nous sommes dans un module "privé" et surtout en intranet donc il ne faut aucune liaison avec un site extérieur (passerelle internationnal et authentification oblige)
 
Merci par avance pour vos lumières et votres aide qui me permettrais d'avancer dans mon projet et établir un cahier des charges à présenter à la direction.
 
cordialement

Reply

Marsh Posté le 10-08-2009 à 10:33:22   

Reply

Marsh Posté le 10-08-2009 à 10:38:48    

si tu bosses dans le public, tu peux te rapproche du conseil général de la saone et loire qui ont mis en place un outil équivalent


---------------

Reply

Marsh Posté le 10-08-2009 à 10:51:53    

Le soucis c'est que ce conseil général a fait appel a un prestataire "ecolutis" tout comme mon département (seine maritime) avec roulezmalin.fr or la dans notre cas on ne veux pas rentrer en compétition avec le conseil général et leur outils de covoiturage pour le particulier, mais seulement proposer un service de covoiturage interne a notre organisme et donc on ne vas pas payé des milles et des cents pour une application de ce genre :( d'ailleur leur outils est directement lié à google map, donc un accès extérieur et donc une connection internet vers google est nécessaire. Malheureusement l'outils qui est demander va devoir etre purement interne :( sa me complique la tache car j'avais pour but d'afficher la carte du trajet mais sa ne va pas etre possible va tout falloir rentrer manuellement je pense. genre de XXXX à XXXX en passant par XXXX et XXXX qui sera completer dans le formulaire du déposant d'annonce de facon facultative.
 

Reply

Marsh Posté le 10-08-2009 à 11:22:44    

si j'ai bien compris ton problème, pour chaque ville/village de ta bdd il te faut connaitre la distance avec toutes les autres...

 

je pense que ca serait faisable facilement en utilisant l'api google maps: j'ai bien pigé que tu voulait du offline, mais ce que je veux dire c'est de l'utiliser une première fois pour générer une table de correspondance ville/ville avec les kilométrages...

 

imaginons que tu as une table 'commune' qui contient les communes 'paris', 'marseille', 'lyon', tu crée une table distance_commune qui contient les entrées suivantes:

 

de: paris à:lyon km:466
de: lyon à:paris km:466
de: paris à:marseille km:776
de: marseille à:paris km:776
de: marseille à:lyon km:315
de: lyon à:marseille km:315

 

et pour construire cette table tu t'appuie sur l'api google maps pour faire des calculs d'itinéraires: http://code.google.com/intl/fr/api [...] Directions

 

comme ca ton appli ne dépend plus d'une ressource externe après... et ce type d'infos, sauf construction de rocade important ou autre, ne vas pas changer toutes les 2mn.


Message édité par pataluc le 10-08-2009 à 11:23:45
Reply

Marsh Posté le 10-08-2009 à 11:32:04    

Heuuuuu sauf qu'il va falloir le faire pour chaque ville / village ? ou c'est tout automatique une première fois ?
Ou alors tu me dit de faire un script qui fait une moulinette en prenant la premiere ville de ma BDD puis qui va interroger l'API sur toutes les autres villes suivante en rentrant les données en BDD dans la table distance et ainsi de suite jusqu'a à la fin ?

Reply

Marsh Posté le 10-08-2009 à 11:46:05    

nan tu l'automatise bien sur... je suis en train de regarder j'essaie de te mettre un bout de code ASAP

Reply

Marsh Posté le 10-08-2009 à 12:47:49    

essaie ce code:

 
Code :
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml"  xmlns:v="urn:schemas-microsoft-com:vml">
  3.  <head>
  4.    <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
  5.    <title></title>
  6.      type="text/javascript"></script>
  7.    
  8.    <script type="text/javascript">
  9.  
  10.  
  11.    function initialize() {
  12.      if (GBrowserIsCompatible()) {      
  13.        var map = new GMap2(document.getElementById("map_canvas" ));
  14.        
  15.        
  16.        var cities = new Array("paris", "marseille", "lyon", "nantes" );
  17.        //var cities = new Array("paris", "marseille" );
  18.        var dirs = new Array();
  19.        
  20.        for (var i = 0; i < cities.length; i++){
  21.          for (var j = 0; j < cities.length; j++){
  22.            if (j!=i) {
  23.              var dir = new GDirections(map, null);
  24.                          
  25.              dir.from=cities[i];
  26.              dir.to=cities[j];
  27.                  
  28.              dirs.push(dir);
  29.              
  30.              GEvent.addListener(dir, "load", function(dir) {
  31.                var r = document.getElementById('result').insertRow(-1);
  32.                r.insertCell(-1).innerHTML = dir.from;
  33.                r.insertCell(-1).innerHTML = dir.to;
  34.                r.insertCell(-1).innerHTML = dir.getDistance().meters;                
  35.              } );
  36.              
  37.              setDirections(dir);
  38.              
  39.              GEvent.addListener(dir, "error", handleErrors);
  40.            }
  41.          }
  42.        }
  43.  
  44.      }
  45.    }
  46.    function setDirections(dir) {
  47.      dir.load("from: " + dir.from + " to: " + dir.to,
  48.                { "locale": "fr_FR" });
  49.    }
  50.  
  51.      function onGDirectionsLoad(){
  52.      r = document.getElementById('result').insertRow();
  53.      r.insertCell().innerHTML(gdir.getDistance().meters);
  54.      }
  55.    
  56.  
  57.    function handleErrors(){
  58.      if (gdir.getStatus().code == G_GEO_UNKNOWN_ADDRESS)
  59.        alert("No corresponding geographic location could be found for one of the specified addresses. This may be due to the fact that the address is relatively new, or it may be incorrect.\nError code: " + gdir.getStatus().code);
  60.      else if (gdir.getStatus().code == G_GEO_SERVER_ERROR)
  61.        alert("A geocoding or directions request could not be successfully processed, yet the exact reason for the failure is not known.\n Error code: " + gdir.getStatus().code);
  62.      
  63.      else if (gdir.getStatus().code == G_GEO_MISSING_QUERY)
  64.        alert("The HTTP q parameter was either missing or had no value. For geocoder requests, this means that an empty address was specified as input. For directions requests, this means that no query was specified in the input.\n Error code: " + gdir.getStatus().code);
  65.      
  66.      //   else if (gdir.getStatus().code == G_UNAVAILABLE_ADDRESS)  <--- Doc bug... this is either not defined, or Doc is wrong
  67.      //     alert("The geocode for the given address or the route for the given directions query cannot be returned due to legal or contractual reasons.\n Error code: " + gdir.getStatus().code);
  68.      
  69.      else if (gdir.getStatus().code == G_GEO_BAD_KEY)
  70.        alert("The given key is either invalid or does not match the domain for which it was given. \n Error code: " + gdir.getStatus().code);
  71.      
  72.      else if (gdir.getStatus().code == G_GEO_BAD_REQUEST)
  73.        alert("A directions request could not be successfully parsed.\n Error code: " + gdir.getStatus().code);
  74.      
  75.      else alert("An unknown error occurred." );
  76.       
  77.       }
  78.    </script>
  79.  
  80.  </head>
  81.  <body onload="initialize()" onunload="GUnload()">
  82.  <div id="map_canvas" style="width: 310px; height: 400px"></div>
  83.  <table id="result">  
  84.  </table>
  85.  </body>
  86. </html>
 

après tu n'as plus qu'a remplacer le tableau de ville statique par ta liste, d'une manière ou d'une autre...

 

puis tu exporte les résultat en bdd...


Message édité par pataluc le 10-08-2009 à 12:49:09
Reply

Marsh Posté le 10-08-2009 à 13:13:06    

Super sa marche super bien :)
Par contre y a t'il moyen d'indiquer en plus de la ville le code postal afin d'éviter tout erreur.
Genre je vais raconter une connerie mais admettons que je tape "bourg-la-reine" et que cette commune existe 3 fois dans toute la france (mais code postal différent) sa posé probleme donc y a t'il moyen dans le tableau que l'on envoie a google d'indiqué en plus le code postal afin d'etre le plus précis possible ?
 
Par contre c'est du javascript vais devoir ajaxialisé cela récupérer les donnée de ma BDD (ville et CP) les envoyé a javascript et renvoyé en BDD les valeurs de google
Mais la c'est pas dramatique
 
Par contre j'ai environ 750 commune dans mon département ce qui fera rien que pour la seine maritime 562500 enregistrement dans la table distance, auquel je rajouterai le département voison (l'eure)
donc admettons au total des departement 1 000 000 de lignes
Sa risque pas de faire trop gros ?

Reply

Marsh Posté le 10-08-2009 à 14:02:25    

pour les codes postaux, je pense que si tu remplaces les chaines "ville" par "cp ville" ca doit encore bien marcher...

 

après, si tu es a l'aise en ajax, je pense que le mieux c'est de charger tes villes via ajax, et de remplir ta table avec tes résultats toujours via ajax... du coup a mon avis l'idéal, c'est de faire un genre de démon en ajax, qui charge des listes de couples de villes pour lesquels on a pas encore l'info, qui va chercher l'info et ainsi de suite, jusqu'a la fin...

 

sachant que pour le coté volumétrie, l'api n'est pas infaillible et que tu auras sans doute des cas manuel à gérer et que je ne suis pas sur que google maps te laisse effectuer 5625000 requetes à la suite... c'est l'inconvénient de ma méthode...


Message édité par pataluc le 10-08-2009 à 14:02:56
Reply

Marsh Posté le 10-08-2009 à 14:06:53    

hyptnos a écrit :

AIS, le soucis c'est la gestion des proximité, genre une personne habitant a XXX peux admettons prendre quelqu'un sur un rayon de 5 km, cette gestion de proximité est disponible sur différent site de covoiturage ici et là. J'aurais voulu savoir s'il y avait une base open source pour cela ?


 

hyptnos a écrit :

Par contre j'ai environ 750 commune dans mon département ce qui fera rien que pour la seine maritime 562500 enregistrement dans la table distance, auquel je rajouterai le département voison (l'eure)
donc admettons au total des departement 1 000 000 de lignes
Sa risque pas de faire trop gros ?

Si j'ai bien compris (survol du topic  :o ) :
1. Tu récupères les distances entre communes sur Google => 750 * 749 = 561 750 enregistrements.
2. Tu crées une table "Proximité" :
PROXIMITE (ID, ID_Ville1, ID_Ville2 [,distance optionnel])
   Ou tu peux essayer de gérer ça directement dans ta table des villes.
Ca devrait sacrément limiter le nombre d'enregistrements...
 
Voire, en partant du code de pataluc, tu peux peut-être filtrer directement...

Reply

Marsh Posté le 10-08-2009 à 14:06:53   

Reply

Marsh Posté le 10-08-2009 à 14:31:30    

heu j ene vois pas du tout comment gérer la distance dans la table commune :s sachant qu'une ville aura 749 indice de distance

Reply

Marsh Posté le 10-08-2009 à 16:03:45    

Bon allez j'ai la solution sans engendrer quoi que ce soit niveau BDD  
merci en tout cas pour le code source donnée je met cela de coté sa pourrait toujours me servir par la suite.
 
Avec la BDD INSEE ayant le nom de la commune et le CP j'ai également la longitude et lattitude des villes
Cela est suffisant pour calculer la distance entre deux communes (a vol d'oiseau) sachant que c'est pas pour calculer un itinéraire mais pour avoir les proximité genre (commune se trouvant dans un rayon de 5km de la commune de départ)
 
Donc pour ceux que cela interesse voici la formule (tester et approuver)
 

Citation :


Ville départ = A
Ville Arrivé = B
dist = distance entre A et B (orthodromie)
dist = 6371 x acos[cos(LatA) x cos(LatB) x cos(LongB-LongA)+sin(LatA) x sin(LatB)]
 
6371 qui correspond au rayon de la Terre en Km.

Reply

Marsh Posté le 10-08-2009 à 16:05:35    

'ffectivement, c'est plus simple... moins sexy, mais plus simple ^^  
 

Reply

Marsh Posté le 11-08-2009 à 09:17:19    

l'utilisateur ne va pas s'amuser a regarder le code source hein^^ lui tant qu'il à ce qu'il desire c'est le principal donc je cherche en effet la simplicite :p qui me retournera la distance entre 2 ville et basta

Reply

Marsh Posté le 09-09-2012 à 14:35:37    

Bonjour
 
On a monté un groupe de réflexion sur un meilleur systeme de covoiturage : https://www.facebook.com/groups/512177068796806/
 
Je me demandais si il y avait deja des endroits où on pouvait trouver des informations sur comment ameliorer le covoiturage et egalement pour en discuter ??
 
Merci !


Message édité par pierro78 le 09-09-2012 à 14:36:30
Reply

Marsh Posté le 09-09-2012 à 21:02:12    

Surement pas sur la cat prog dans un nécro-topic de 3 ans :o


---------------
Perhaps you don't deserve to breathe
Reply

Marsh Posté le 12-09-2012 à 14:18:58    

j esperais qu'il y avait des membres encore actifs qui auraient pu me repondre ...
 
je me reponds à moi-meme : je viens de trouver le groupe http://www.linkedin.com/groups?gid=2695799 qui propose des infos interessantes sur le covoiturage ...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed