Subversion Repositories eFlore/Applications.coel

Rev

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

Rev 1649 Rev 1651
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