Subversion Repositories eFlore/Applications.coel

Rev

Rev 1651 | Rev 1667 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1651 Rev 1658
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
}