Page 1 sur 2

Geocoding & Reverse Geocoding

Posté : 10 mai 2012, 16:13
par Aoigami
Bonjour, j'ai un petit soucis de Geocoding et de Reverse Geocoding
Voilà j'ai une BDD avec des lieux avec leurs adresses 1 et 2, leur code postal et leur ville
J'aimerais récupérer leur longitude et latitude (Geocoding) pour ensuite savoir s'ils sont en France ou non (Reverse Geocoding)

Voilà le code :
$address = $street1. ',+'.$street2.'+'.$postal_code.',+'.$city;

function getLatLong($address){
    if (!is_string($address))die("All Addresses must be passed as a string");
    $_url = sprintf('http://maps.google.com/maps?output=js&q=%s',rawurlencode($address));
    $_result = false;
    if($_result = file_get_contents($_url)) {
        if(strpos($_result,'errortips') > 1 || strpos($_result,'Did you mean:') !== false) return false;
        preg_match('!center:\s*{lat:\s*(-?\d+\.\d+),lng:\s*(-?\d+\.\d+)}!U', $_result, $_match);
        $_coords['lat'] = $_match[1];
        $_coords['long'] = $_match[2];
        
    }
    return $_coords;
}

$latitude = $_coords['lat'];
$longitude = $_coords['long'];
$url = "http://maps.googleapis.com/maps/api/geocode/xml?latlng=$longitude,$latitude&sensor=false";

$xml = file_get_contents($url);

$sxe = new SimpleXMLElement($xml);
if( 'OK' === (string)$sxe->status) {
    echo $sxe->result->formatted_address;
} else {
    echo 'ERREUR : ' . $sxe->status;
}
Mais j'ai plusieurs erreurs :
Notice: Undefined variable: street1 in /Applications/MAMP/htdocs/Test/Site.php on line 26

Notice: Undefined variable: street2 in /Applications/MAMP/htdocs/Test/Site.php on line 26

Notice: Undefined variable: postal_code in /Applications/MAMP/htdocs/Test/Site.php on line 26

Notice: Undefined variable: city in /Applications/MAMP/htdocs/Test/Site.php on line 26

Notice: Undefined variable: _coords in /Applications/MAMP/htdocs/Test/Site.php on line 42

Notice: Undefined variable: _coords in /Applications/MAMP/htdocs/Test/Site.php on line 43
ERREUR : ZERO_RESULTS
Line 26 :
$address = $street1. ',+'.$street2.'+'.$postal_code.',+'.$city;
Line 42 :
$latitude = $_coords['lat'];
Line 43 :
$longitude = $_coords['long'];
Pourriez-vous m'aider ? (Je pense que je suis une quiche et qu'il faut initialiser $street1, $street2, ... car je les appelles dans une fonction SELECT)

Re: Geocoding & Reverse Geocoding

Posté : 10 mai 2012, 16:49
par xTG
Il faudrait voir le code qui précède cette ligne pour comprendre d'où viennent ces variables (qui apparemment n'existent pas d'après les messages d'erreur).

Re: Geocoding & Reverse Geocoding

Posté : 10 mai 2012, 17:10
par Aoigami
Voilà ce que j'ai avant :
$resultat = mysql_query("SELECT user.company, login, site.street1, site.street2, site.postal_code, site.city, site.latitude, site.longitude FROM user, site WHERE (site.street1 = user.street1) && (site.latitude<='4,1'|| site.latitude>='51,3' || site.longitude<='-5' || site.longitude>='8,1' || site.latitude IS NULL && site.longitude IS NULL ) ORDER BY user.company ASC LIMIT 200") or die (mysql_error());
Pour voir si les conditions étaient respectés, j'avais fait ultérieurement un tableau avec le tableau et pour chaque ligne $donnees['...'] pour street1, street2, ...
La j'ai essayé mais ça ne marche pas

EDIT : Je viens de me souvenir j'avais un boucle !
Mais du coup comment je dois faire ? :S

Re: Geocoding & Reverse Geocoding

Posté : 10 mai 2012, 17:20
par xTG
Après un mysql_query() il faut une fonction pour récupérer les résultats, pas ça qui te manquerai ?
Genre mysql_fetch_array() et compagnie. 8-|

Re: Geocoding & Reverse Geocoding

Posté : 10 mai 2012, 17:22
par Aoigami
Mais oui dit donc O_o tellement absorbé par ce code que j'avais pas vu qu'il manquait ce petit bout de code essentiel O_o

Re: Geocoding & Reverse Geocoding

Posté : 11 mai 2012, 10:22
par Aoigami
Bon j'ai corrigé l'erreur du manque de mysql_fetch_array ;)

Mais maintenant j'aimerai (je pense que c'est comme ça qu'il faudrait faire) mettre les latitude trouvé dans un array pour ensuite les récupérer ... Mais comment ?

Voilà mon code :)
$donnees  = mysql_fetch_array($resultat);

$address = $donnees['street1']. ',+'.$donnees['street2'].'+'.$donnees['postal_code'].',+'.$donnees['city'];

function getLatLong($address){
    if (!is_string($address))die("All Addresses must be passed as a string");
    $_url = sprintf('http://maps.google.com/maps?output=js&q=%s',rawurlencode($address));
    $_result = false;
    if($_result = file_get_contents($_url)) {
        if(strpos($_result,'errortips') > 1 || strpos($_result,'Did you mean:') !== false) return false;
        preg_match('!center:\s*{lat:\s*(-?\d+\.\d+),lng:\s*(-?\d+\.\d+)}!U', $_result, $_match);
        $_coords['lat'] = $_match[1];
        $_coords['long'] = $_match[2];
        
    }
    return $_coords;
}

$latitude = $_coords['lat'];
$longitude = $_coords['long'];
$url = "http://maps.googleapis.com/maps/api/geocode/xml?latlng=$longitude,$latitude&sensor=false";

$xml = file_get_contents($url);

$sxe = new SimpleXMLElement($xml);
if( 'OK' === (string)$sxe->status) {
    echo $sxe->result->formatted_address;
} else {
    echo 'ERREUR : ' . $sxe->status;
}
Je pense qu'après :
    return $_coords;
Je devrais faire un array = $_coords; enfin ... Je pense :S

A la fin je voudrais avoir les lieux mal localisés (selon les conditions) qui sont en France dans un tableau (pour avoir le pays il faut que je touches à :
    echo $sxe->result->formatted_address;

Re: Geocoding & Reverse Geocoding

Posté : 11 mai 2012, 10:37
par xTG
Je pense surtout qu'il faudrait l'appeler ta fonction. ;)

Re: Geocoding & Reverse Geocoding

Posté : 11 mai 2012, 11:04
par Aoigami
J'ai appelé la fonction juste oublié de copier la ligne ;)
[...]
    return $_coords;
}


getLatLong($address);

$latitude = $_match['1'];
[...]

Re: Geocoding & Reverse Geocoding

Posté : 11 mai 2012, 11:10
par xTG
$retour_de_la_fonction = maFonction($monParametre);
:P

Re: Geocoding & Reverse Geocoding

Posté : 11 mai 2012, 12:02
par Aoigami
Merci ;)

Mais y a un truc je comprends pas comment je peux faire pour mon return ...
(Il serait peut être temps que je me pose la question ...)
J'ai dans $_coords['lat'] la latitude et dans $_coords['long'] la longitude ...
Ensuite dans la suite de mon code je voudrais récupérer $_coords donc latitude et longitude donc je récupère la latitude $_match['1'] et la longitude $_match['2']
La j'me perds totalement comment je peux faire :/

Re: Geocoding & Reverse Geocoding

Posté : 11 mai 2012, 12:47
par xTG
Euh... Tu n'as semble-t-il pas compris le but du return dans la fonction. :mrgreen:
function addition($a, $b){
  $c = $a + $b;
  return $c;
}
$resultat = addition(5,3);
echo $resultat;

Re: Geocoding & Reverse Geocoding

Posté : 11 mai 2012, 14:16
par Aoigami
Malgré la fatigue (oui ne pas beaucoup dormir n'est pas bon pour la santé) j'ai bien compris que cela retournait la latitude ET la longitude ;)
Mais comment l'utiliser dans mon code ? Je pense modifier mon code pour que les données s'affichent dans un tableau mais sur un site web et non un XML

Re: Geocoding & Reverse Geocoding

Posté : 11 mai 2012, 14:22
par xTG
J'avoue ne pas trop comprendre, c'est ça que tu veux ?
<table>
<tr><th>Lat</th><th>Lng</th></tr>
<tr><td><?php echo $retourDeMaFonction['lat']; ?></td><td><?php echo $retourDeMaFonction['lng']; ?></td></tr>
</table>

Re: Geocoding & Reverse Geocoding

Posté : 11 mai 2012, 14:50
par Aoigami
Non ;)
Désolé si j'ai mal expliqué je vais le refaire : J'ai une BDD avec des lieux (avec un nom, une adresse 1, une adresse 2, un code postal, une ville et pour certaines ... une latitude et une longitude souvent fausse ;) ) ce que je dois faire c'est récupérer l'adresse de chaque lieu donc avec street1, street2, postal_code et city pour en connaître sa latitude et sa longitude
Ensuite je dois, avec ces latitudes et longitudes, savoir si elles sont en France
Exemple : j'ai un lieu "Pinpin", j'ai récupéré son adresse et j'ai eu ses coordonnées puis j'ai su que c'était en France donc il devrait s'afficher dans le tableau comme ceci :

Pinpin Street1 Street2 Postal_Code City Latitude Longitude

En ayant bien sûr à la place de "Pinpin", "Street1", "Street2", "Postal_Code", "City" les données présents dans la BDD ;)

Re: Geocoding & Reverse Geocoding

Posté : 11 mai 2012, 15:15
par xTG
C'est encore moins clair pour moi. x)