| Line 663... |
Line 663... |
| 663 |
* (http://wiki.openstreetmap.org/wiki/Nominatim)
|
663 |
* (http://wiki.openstreetmap.org/wiki/Nominatim)
|
| 664 |
*
|
664 |
*
|
| 665 |
* @param in data: un tableau associatif doté de *toutes* les clefs suivantes:
|
665 |
* @param in data: un tableau associatif doté de *toutes* les clefs suivantes:
|
| 666 |
* 'adresse', 'cp', 'ville', 'pays'
|
666 |
* 'adresse', 'cp', 'ville', 'pays'
|
| 667 |
* @param out lonlat: un tableau associatif contenant 'lon' et 'lat' si elles ont été déterminées
|
667 |
* @param out lonlat: un tableau associatif contenant 'lon' et 'lat' si elles ont été déterminées
|
| - |
|
668 |
* @param in opts: un tableau associatif optionnel écrasant ou ajoutant des valeurs d'API
|
| 668 |
* @return boolean: selon que la fonction à réussi ou non
|
669 |
* @return boolean: selon que la fonction à réussi ou non
|
| 669 |
*/
|
670 |
*/
|
| 670 |
static function coordGuess(Array $data, Array $lonlat) {
|
671 |
static function coordGuess(Array $data, Array &$lonlat, Array $opts = NULL) {
|
| 671 |
if(!$data) return FALSE;
|
672 |
if(!$data) return FALSE;
|
| - |
|
673 |
$common_query = array('accept_language' => 'fr', 'format' => 'json', 'limit' => 1);
|
| - |
|
674 |
if(! $data['adresse'] || (! $data['cp'] && ! $data['ville'])) {
|
| - |
|
675 |
$query = array_merge($common_query,
|
| - |
|
676 |
array('q' => implode(', ', $data)),
|
| - |
|
677 |
$opts ? $opts : array());
|
| - |
|
678 |
}
|
| 672 |
// TODO
|
679 |
else {
|
| - |
|
680 |
$query = array_merge($common_query,
|
| - |
|
681 |
array_filter(array('street' => $data['adresse'],
|
| - |
|
682 |
'city' => $data['ville'],
|
| - |
|
683 |
'postalcode' => $data['cp'],
|
| - |
|
684 |
'country' => $data['pays'])),
|
| - |
|
685 |
$opts ? $opts : array());
|
| - |
|
686 |
}
|
| - |
|
687 |
$fullquery = 'http://nominatim.openstreetmap.org/search.php?' . http_build_query($query);
|
| - |
|
688 |
$r = json_decode(file_get_contents($fullquery));
|
| - |
|
689 |
error_log(sprintf("COEL: Nominatim request returned %d result(s) [%s]", count($r), $fullquery));
|
| - |
|
690 |
if($r && isset($r[0])) {
|
| - |
|
691 |
$lonlat['lon'] = $r[0]->lon;
|
| - |
|
692 |
$lonlat['lat'] = $r[0]->lat;
|
| - |
|
693 |
return TRUE;
|
| - |
|
694 |
}
|
| 673 |
return FALSE;
|
695 |
return FALSE;
|
| 674 |
}
|
696 |
}
|
| Line 675... |
Line 697... |
| 675 |
|
697 |
|
| 676 |
/*
|
698 |
/*
|
| Line 681... |
Line 703... |
| 681 |
* @param data: un tableau associatif contenant les clefs telles que nommées à l'issue du
|
703 |
* @param data: un tableau associatif contenant les clefs telles que nommées à l'issue du
|
| 682 |
* du formulaire de saisie: 'cs_adresse_01', 'cs_code_postal', 'cs_ville'
|
704 |
* du formulaire de saisie: 'cs_adresse_01', 'cs_code_postal', 'cs_ville'
|
| 683 |
* @return un tableau associatif contenant une ou plusieurs des clefs suivantes:
|
705 |
* @return un tableau associatif contenant une ou plusieurs des clefs suivantes:
|
| 684 |
* 'adresse', 'cp', 'ville', 'pays'
|
706 |
* 'adresse', 'cp', 'ville', 'pays'
|
| 685 |
*/
|
707 |
*/
|
| 686 |
static function addrReStruc(Array $in) {
|
708 |
static function addrReStruct(Array $in) {
|
| - |
|
709 |
// TODO: fixer le bug des pays ...
|
| - |
|
710 |
if(is_numeric($in['cs_ce_truk_pays'])) {
|
| - |
|
711 |
switch($in['cs_ce_truk_pays']) {
|
| - |
|
712 |
case '2654':
|
| - |
|
713 |
$pays = 'france';
|
| - |
|
714 |
break;
|
| - |
|
715 |
case '2717':
|
| - |
|
716 |
$pays = 'émirats arabe unis';
|
| - |
|
717 |
break;
|
| - |
|
718 |
default:
|
| - |
|
719 |
$pays = '';
|
| - |
|
720 |
}
|
| - |
|
721 |
} else $pays = @trim($in['cs_ce_truk_pays']);
|
| - |
|
722 |
|
| - |
|
723 |
// pas de précision au n°, mais Nominatim peine avec des préfixes trop élaborés
|
| - |
|
724 |
// coupons jusqu'à un élément reconnaissable s'il existe
|
| - |
|
725 |
$adresse = @trim($in['cs_adresse_01']);
|
| - |
|
726 |
$adresse = substr($adresse, stripos($adresse, "rue"));
|
| - |
|
727 |
$adresse = substr($adresse, stripos($adresse, "avenue"));
|
| - |
|
728 |
$adresse = substr($adresse, stripos($adresse, "boulevard"));
|
| - |
|
729 |
$adresse = substr($adresse, stripos($adresse, "place"));
|
| - |
|
730 |
|
| 687 |
return array(
|
731 |
return array(
|
| 688 |
'adresse' => @trim($in['cs_adresse_01']) ? $in['cs_adresse_01'] : '',
|
732 |
'adresse' => $adresse,
|
| 689 |
'cp' => @trim($in['cs_code_postal']) ? $in['cs_code_postal'] : '',
|
733 |
'cp' => @trim($in['cs_code_postal']) ? $in['cs_code_postal'] : '',
|
| 690 |
'ville' => @trim($in['cs_ville']) ? $in['cs_ville'] : '',
|
734 |
'ville' => @trim($in['cs_ville']) ? $in['cs_ville'] : '',
|
| 691 |
'pays' => @trim($in['cs_ce_truk_pays']) ? $in['cs_ce_truk_pays'] : 'France'
|
735 |
'pays' => $pays !== FALSE ? $pays : 'France'
|
| 692 |
);
|
736 |
);
|
| 693 |
}
|
737 |
}
|
| 694 |
}
|
738 |
}
|
| 695 |
?>
|
739 |
?>
|
| 696 |
|
740 |
|