Subversion Repositories eFlore/Applications.coel

Compare Revisions

Ignore whitespace Rev 1657 → Rev 1658

/trunk/jrest/services/Coel.php
667,13 → 667,20
* @param out lonlat: un tableau associatif contenant 'lon' et 'lat' si elles ont été déterminées
* @param in opts: un tableau associatif optionnel écrasant ou ajoutant des valeurs d'API
* @return boolean: selon que la fonction à réussi ou non
*
* opts['force-q']: force l'utilisation d'une requête en texte libre
* quelque soit le remplissage des composants individuels
*
* Note: le code postal est contre-productif pour Nominatim:
* https://lists.openstreetmap.org/pipermail/talk-fr/2013-April/057084.html
*/
static function coordGuess(Array $data, Array &$lonlat, Array $opts = NULL) {
if(!$data) return FALSE;
$common_query = array('accept_language' => 'fr', 'format' => 'json', 'limit' => 1);
if(! $data['adresse'] || (! $data['cp'] && ! $data['ville'])) {
if(! $data['adresse'] || (! $data['cp'] && ! $data['ville']) || @$opts['force-q']) {
unset($opts['force-q']);
$query = array_merge($common_query,
array('q' => implode(', ', $data)),
array('q' => implode(', ', array_filter($data))),
$opts ? $opts : array());
}
else {
699,6 → 706,7
* Retourne un tableau prêt à être utilisé par coordGuess(), c'est à dire initialisant toutes
* les clefs nécessaires (même si NULL) et disposant systématiquement d'un pays.
* Cela à partir d'un tableau au format de clefs prédéterminé.
* S'occupe du filtrage basique des éléments pour maximiser les chances de détection.
*
* @param data: un tableau associatif contenant les clefs telles que nommées à l'issue du
* du formulaire de saisie: 'cs_adresse_01', 'cs_code_postal', 'cs_ville'
723,15 → 731,23
// pas de précision au n°, mais Nominatim peine avec des préfixes trop élaborés
// coupons jusqu'à un élément reconnaissable s'il existe
$adresse = @trim($in['cs_adresse_01']);
$adresse = substr($adresse, stripos($adresse, "ville de "));
$adresse = substr($adresse, stripos($adresse, "impasse"));
$adresse = substr($adresse, stripos($adresse, "chemin"));
$adresse = substr($adresse, stripos($adresse, "route"));
$adresse = substr($adresse, stripos($adresse, "rue"));
$adresse = substr($adresse, stripos($adresse, "avenue"));
$adresse = substr($adresse, stripos($adresse, "boulevard"));
$adresse = substr($adresse, stripos($adresse, "place"));
$adresse = substr($adresse, stripos($adresse, "promenade"));
$adresse = substr($adresse, stripos($adresse, "allée"));
$adresse = preg_replace("/[\r\n].*/", "", $adresse);
 
$ville = preg_replace('/cedex.*/i', '', @trim($in['cs_ville']));
return array(
'adresse' => $adresse,
'cp' => @trim($in['cs_code_postal']) ? $in['cs_code_postal'] : '',
'ville' => @trim($in['cs_ville']) ? $in['cs_ville'] : '',
'ville' => $ville,
'pays' => $pays !== FALSE ? $pays : 'France'
);
}