Line 665... |
Line 665... |
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 |
* @param in opts: un tableau associatif optionnel écrasant ou ajoutant des valeurs d'API
|
669 |
* @return boolean: selon que la fonction à réussi ou non
|
669 |
* @return boolean: selon que la fonction à réussi ou non
|
- |
|
670 |
*
|
- |
|
671 |
* opts['force-q']: force l'utilisation d'une requête en texte libre
|
- |
|
672 |
* quelque soit le remplissage des composants individuels
|
- |
|
673 |
*
|
- |
|
674 |
* Note: le code postal est contre-productif pour Nominatim:
|
- |
|
675 |
* https://lists.openstreetmap.org/pipermail/talk-fr/2013-April/057084.html
|
670 |
*/
|
676 |
*/
|
671 |
static function coordGuess(Array $data, Array &$lonlat, Array $opts = NULL) {
|
677 |
static function coordGuess(Array $data, Array &$lonlat, Array $opts = NULL) {
|
672 |
if(!$data) return FALSE;
|
678 |
if(!$data) return FALSE;
|
673 |
$common_query = array('accept_language' => 'fr', 'format' => 'json', 'limit' => 1);
|
679 |
$common_query = array('accept_language' => 'fr', 'format' => 'json', 'limit' => 1);
|
674 |
if(! $data['adresse'] || (! $data['cp'] && ! $data['ville'])) {
|
680 |
if(! $data['adresse'] || (! $data['cp'] && ! $data['ville']) || @$opts['force-q']) {
|
- |
|
681 |
unset($opts['force-q']);
|
675 |
$query = array_merge($common_query,
|
682 |
$query = array_merge($common_query,
|
676 |
array('q' => implode(', ', $data)),
|
683 |
array('q' => implode(', ', array_filter($data))),
|
677 |
$opts ? $opts : array());
|
684 |
$opts ? $opts : array());
|
678 |
}
|
685 |
}
|
679 |
else {
|
686 |
else {
|
680 |
$query = array_merge($common_query,
|
687 |
$query = array_merge($common_query,
|
681 |
array_filter(array('street' => $data['adresse'],
|
688 |
array_filter(array('street' => $data['adresse'],
|
Line 697... |
Line 704... |
697 |
|
704 |
|
698 |
/*
|
705 |
/*
|
699 |
* Retourne un tableau prêt à être utilisé par coordGuess(), c'est à dire initialisant toutes
|
706 |
* Retourne un tableau prêt à être utilisé par coordGuess(), c'est à dire initialisant toutes
|
700 |
* les clefs nécessaires (même si NULL) et disposant systématiquement d'un pays.
|
707 |
* les clefs nécessaires (même si NULL) et disposant systématiquement d'un pays.
|
- |
|
708 |
* Cela à partir d'un tableau au format de clefs prédéterminé.
|
701 |
* Cela à partir d'un tableau au format de clefs prédéterminé.
|
709 |
* S'occupe du filtrage basique des éléments pour maximiser les chances de détection.
|
702 |
*
|
710 |
*
|
703 |
* @param data: un tableau associatif contenant les clefs telles que nommées à l'issue du
|
711 |
* @param data: un tableau associatif contenant les clefs telles que nommées à l'issue du
|
704 |
* du formulaire de saisie: 'cs_adresse_01', 'cs_code_postal', 'cs_ville'
|
712 |
* du formulaire de saisie: 'cs_adresse_01', 'cs_code_postal', 'cs_ville'
|
705 |
* @return un tableau associatif contenant une ou plusieurs des clefs suivantes:
|
713 |
* @return un tableau associatif contenant une ou plusieurs des clefs suivantes:
|
Line 721... |
Line 729... |
721 |
} else $pays = @trim($in['cs_ce_truk_pays']);
|
729 |
} else $pays = @trim($in['cs_ce_truk_pays']);
|
Line 722... |
Line 730... |
722 |
|
730 |
|
723 |
// pas de précision au n°, mais Nominatim peine avec des préfixes trop élaborés
|
731 |
// 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
|
732 |
// coupons jusqu'à un élément reconnaissable s'il existe
|
- |
|
733 |
$adresse = @trim($in['cs_adresse_01']);
|
- |
|
734 |
$adresse = substr($adresse, stripos($adresse, "ville de "));
|
- |
|
735 |
$adresse = substr($adresse, stripos($adresse, "impasse"));
|
- |
|
736 |
$adresse = substr($adresse, stripos($adresse, "chemin"));
|
725 |
$adresse = @trim($in['cs_adresse_01']);
|
737 |
$adresse = substr($adresse, stripos($adresse, "route"));
|
726 |
$adresse = substr($adresse, stripos($adresse, "rue"));
|
738 |
$adresse = substr($adresse, stripos($adresse, "rue"));
|
727 |
$adresse = substr($adresse, stripos($adresse, "avenue"));
|
739 |
$adresse = substr($adresse, stripos($adresse, "avenue"));
|
728 |
$adresse = substr($adresse, stripos($adresse, "boulevard"));
|
740 |
$adresse = substr($adresse, stripos($adresse, "boulevard"));
|
- |
|
741 |
$adresse = substr($adresse, stripos($adresse, "place"));
|
- |
|
742 |
$adresse = substr($adresse, stripos($adresse, "promenade"));
|
- |
|
743 |
$adresse = substr($adresse, stripos($adresse, "allée"));
|
Line -... |
Line 744... |
- |
|
744 |
$adresse = preg_replace("/[\r\n].*/", "", $adresse);
|
729 |
$adresse = substr($adresse, stripos($adresse, "place"));
|
745 |
|
730 |
|
746 |
$ville = preg_replace('/cedex.*/i', '', @trim($in['cs_ville']));
|
731 |
return array(
|
747 |
return array(
|
732 |
'adresse' => $adresse,
|
748 |
'adresse' => $adresse,
|
733 |
'cp' => @trim($in['cs_code_postal']) ? $in['cs_code_postal'] : '',
|
749 |
'cp' => @trim($in['cs_code_postal']) ? $in['cs_code_postal'] : '',
|
734 |
'ville' => @trim($in['cs_ville']) ? $in['cs_ville'] : '',
|
750 |
'ville' => $ville,
|
735 |
'pays' => $pays !== FALSE ? $pays : 'France'
|
751 |
'pays' => $pays !== FALSE ? $pays : 'France'
|
736 |
);
|
752 |
);
|
737 |
}
|
753 |
}
|
738 |
}
|
754 |
}
|