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

Soyez le premier à donner votre avis sur cette source.

Snippet vu 9 175 fois - Téléchargée 17 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

slhuilli
Messages postés
195
Date d'inscription
lundi 7 janvier 2002
Statut
Membre
Dernière intervention
12 avril 2019
-
Le nom du formulaire passé dans Action est le nom de ce fichier. Dans ce cas googleMap1.php5
cs_georges26
Messages postés
6
Date d'inscription
samedi 5 mai 2007
Statut
Membre
Dernière intervention
11 mai 2012
-
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
slhuilli
Messages postés
195
Date d'inscription
lundi 7 janvier 2002
Statut
Membre
Dernière intervention
12 avril 2019
-
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

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.