Intégrer à une base de données des coordonnées géographiques (longitude, longitude)

4/5 (3 avis)

Snippet vu 13 034 fois - Téléchargée 19 fois

Contenu du snippet

Ce code permet au moeyn de google map, de récupérer des cordonnées géo des adresses postales passées en paramètres. Ces adresses sont issues d'une base de données. Le fichier insert-in-bdd.php est inutile

Source / Exemple :


<html>
<head>

<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false">
</script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/
jquery.min.js"></script>

</head>
<body>
   
    <script type="text/javascript">

 /* Déclaration des variables globales */ 
 var geocoder = new google.maps.Geocoder();
 var addr, latitude, longitude;

 /* Fonction chargée de géolocaliser l'adresse */ 
 function geolocalise(){
  /* Récupération du champ "adresse" */ 
  addr = document.getElementById('adresse').value;
  /* Tentative de géocodage */ 
  geocoder.geocode( { 'address': addr}, function(results, status) {
   /* Si géolocalisation réussie */ 
   if (status == google.maps.GeocoderStatus.OK) {
    /* Récupération des coordonnées */ 
    latitude = results[0].geometry.location.lat();
    longitude = results[0].geometry.location.lng();
    /* Insertion des coordonnées dans les input text */ 
    document.getElementById('lat').value = latitude;
    document.getElementById('lng').value = longitude;
    /* Appel AJAX pour insertion en BDD */ 
    var sendAjax = $.ajax({
     type: "POST",
     url: 'insert-in-bdd.php',
     data: 'lat='+latitude+'&lng='+longitude+'&adr='+addr,
     success: handleResponse
    });
     if (GBrowserIsCompatible())
          {
          var map = new GMap2(document.getElementById("map_canvas"));
          map.setCenter(new GLatLng(latitude,longitude), 12);
// "point" correspond aux coordonnées du marqueur de départ
          var point = new GLatLng(latitude,longitude);
// On ajoute la propriété "draggable" (déplaçable) au marqueur
          var marker = new GMarker(point, {draggable: true});
// Affichage par superposition du marqueur
          map.addOverlay(marker);
          }
   }
   function handleResponse(){
    $('#answer').get(0).innerHTML = sendAjax.responseText;
   }
  });
 }

</script>
<form name="saisie" method="post" action="googleMap1.php5">
<br>
<?php

       include("config_defaults_inc.php5"); //Mes param de connextion à la base de données
      
       
       $espace = "PRODUCTION_"; // prefix des nom des tables
       
       
        $res = mysql_connect($g_hostname,$g_db_username,$g_db_password);
        mysql_select_db($database_name);
        //Nombre de lieux non-remplis -
       	$res = mysql_connect($g_hostname,$g_db_username,$g_db_password) or die ("Connexion impossible");
	mysql_select_db($g_database_name,$res) or die ("selection de la BDD impossible");
        
        $sql = "select * from ".$espace."_TBLLIE where LATITUDE IS NULL and CDEETAFTL='CRS' ";
        
        //$sql = "select POD_TBLDTEEVT.REFDTEEVT, POD_TBLTYPEVT.LIBTYPEVT, TITEVT, POD_TBLDTEEVT.DTEEVT, POD_TBLDTEEVT.HRSDBT, POD_TBLDTEEVT.HRSFIN, POD_TBLDTEEVT.JRNENT, POD_TBLLIE.NOM, POD_TBLLIE.RUE, POD_TBLLIE.CDEPOS, POD_TBLLIE.VIL  , TRFEVT, EVTDSC, POD_TBLDTEEVT.TMSMAJ from POD_TBLDTEEVT, POD_TBLEVT , POD_TBLEVTDSC, POD_TBLLIE, POD_TBLTYPEVT where `DTEEVT` > current_date()  and POD_TBLEVT.REFEVT = POD_TBLEVTDSC.REFEVT and POD_TBLLIE.REFLIE = POD_TBLEVT.REFLIE and POD_TBLDTEEVT.REFEVT = POD_TBLEVT.REFEVT and POD_TBLTYPEVT.REFTYPEVT = POD_TBLEVT.REFTYPEVT order by POD_TBLDTEEVT.DTEEVT, POD_TBLDTEEVT.HRSDBT;";	
	$id = mysql_query($sql,$res) or die ("Probleme de selection de BDD");
        $nb= mysql_num_rows($id);
        
        //Nombre total de lieux 
        $sql = "select * from ".$espace."_TBLLIE";
        $id = mysql_query($sql,$res);
        $nbTot= mysql_num_rows($id);
        
        //Recherche du lieu a remplir
        $sql = "select * from ".$espace."_TBLLIE where LATITUDE IS NULL ORDER BY REFLIE LIMIT 1,1";
        
        $id2 = @mysql_query($sql,$res);
        $nom = @mysql_result($id2,0,"NOM");
        $rue = @mysql_result($id2,0,"RUE");
        $cdepos = @mysql_result($id2,0,"CDEPOS");
        $vil = @mysql_result($id2,0,"VIL");
        $pk = @mysql_result($id2,0,"REFLIE");
       
        if ($rue=="")
        {
            $add = $vil;
        }
        else
        {
            $add = $rue.",".$vil;
        }
        
        echo "<br><hr><br><b>Clef primaire : <input size='4' type='text' name='nro' value='".$pk."'><br>".utf8_encode($nom)."</b>";
        echo "  <input type=\"text\" name=\"adresse\" id=\"adresse\" value=\"".utf8_encode($add)."\" />";
        
?>

<br><br>
Latitude : <input type="text" id="lat" value="latitude" name="latitude" readonly />
Longitude : <input type="text" id="lng" value="longitude" name="longitude" readonly />
<input type="button" onclick="geolocalise()" value="géolocaliser" /><input type="submit" name="inserer" value="inserer"><input type="submit" name="sans" value="sans" style="background-color:yellow;"> <button onclick="javascript:location.reload();">Nouvele saisie</button>

</form>
<?php
    if($_POST["inserer"] == "inserer")
    {
        $sql = "update ".$espace."_LIEU set LATITUDE=".$_POST["latitude"].", LONGITUDE=".$_POST["longitude"]." where IDLIEU=".$_POST["nro"].";";
        $id = mysql_query($sql,$res) or die ("insertion échouée");
    }
    
//Cas où il n'y a pas d'adresse postale
    if($_POST["sans"] == "sans")
    {
        $sql = "update ".$espace."_TBLLIE set LATITUDE=0, LONGITUDE=0 where REFLIE=".$_POST["nro"].";";
        $id = mysql_query($sql,$res) or die ("insertion echouée");
    }
    
?>    
<hr>
<br>Liste des endroits non trouvés</br>

<?php
    $sql = "select * from POD_TBLLIE where LATITUDE=0";
    $id2 = mysql_query($sql,$res);
    while (mysql_fetch_row($id2))
    {
        $n = mysql_result($id2, $row, "NOM");
        $v = mysql_result($id2, $row, "VIL");
        $pk = mysql_result($id2, $row, "REFLIE");
        $row++;
        echo $pk.". ".utf8_encode($n)." ".utf8_encode($v)."<br>";
    }
    @mysql_free_result($id);
    mysql_close($res);
    ?>

</body>
</html>

A voir également

Ajouter un commentaire Commentaires
Utilisateur anonyme
25 mars 2012 à 14:43
Pour georges26 :

crsetaftl est un flag qui stipule l'état de l'enregistrement dans la base (en creation, cree, supprime...) et qui de ce fait n'a pas vraiment de rapport avec la choucroute dans notre cas (d'où l'absence de commentaires à cet égard)
pour la base SQL, qui commence avec un préfix stipulant notre environnement (developpement, test, production) il ets simpplement possible de l'enlever n et de nommer les tables "_TBLLIE", ou lui donner un autre nom. Cette table doit comporter deux champs : longitude et latitude
la difference entre $database_name et $g_database_name est effectivement une erreur de ma part, lorsque j'ai "anonymisé" mon code. bien entendu c'est le même champs (je vais corriger cela si je peux)
Enfin pour les cotes (simples cotes) effectivement je n'ai pas traité car dans ma base de donnée, je n'avais pas de cotes.
Dernier enfin, le fait de ne pas boucler correspondait à un besoin très précis (j'avais penser à boucler) c'est que parfois, dans la boucle, il ne trouvait pas les coordonnées dans GMap. Ce que Georges (propose comme amélioration, je l'avais codé au départ et l'ai volontairement supprimé..

@ Georges : je me tiens à ta disposition si tu veux de l'aide
cs_georges26 Messages postés 6 Date d'inscription samedi 5 mai 2007 Statut Membre Dernière intervention 11 mai 2012
25 mars 2012 à 11:46
Bonjour
Intéressant comme script, mais il manque pas mal d'infos pour le faire tourner !
Comme la base sql qu'il faudrait joindre, que l'on comprenne à quoi correspondent certaines tables.
exemple : CDEETAFTL='CRS' correspond à quoi ?

Et il y a des erreurs dans la source, comme par exemple ligne 73 le nom de la base s'appel "$database_name" et ligne 76 "$g_database_name"
J'ai quand même réussi à le lancer, mais ca bloque régulièrement dès que l'adresse comporte un '

Amélioration possible : Une petit boucle qui le fait tourner sur une table d'adresse !

Georges
Utilisateur anonyme
29 janv. 2012 à 11:09
Le nom du formulaire passé dans Action est le nom de ce fichier. Dans ce cas googleMap1.php5

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.