Subversion Repositories eFlore/Applications.coel

Compare Revisions

Ignore whitespace Rev 1650 → Rev 1651

/trunk/jrest/services/Coel.php
665,11 → 665,33
* @param in data: un tableau associatif doté de *toutes* les clefs suivantes:
* 'adresse', 'cp', 'ville', 'pays'
* @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
*/
static function coordGuess(Array $data, Array $lonlat) {
static function coordGuess(Array $data, Array &$lonlat, Array $opts = NULL) {
if(!$data) return FALSE;
// TODO
$common_query = array('accept_language' => 'fr', 'format' => 'json', 'limit' => 1);
if(! $data['adresse'] || (! $data['cp'] && ! $data['ville'])) {
$query = array_merge($common_query,
array('q' => implode(', ', $data)),
$opts ? $opts : array());
}
else {
$query = array_merge($common_query,
array_filter(array('street' => $data['adresse'],
'city' => $data['ville'],
'postalcode' => $data['cp'],
'country' => $data['pays'])),
$opts ? $opts : array());
}
$fullquery = 'http://nominatim.openstreetmap.org/search.php?' . http_build_query($query);
$r = json_decode(file_get_contents($fullquery));
error_log(sprintf("COEL: Nominatim request returned %d result(s) [%s]", count($r), $fullquery));
if($r && isset($r[0])) {
$lonlat['lon'] = $r[0]->lon;
$lonlat['lat'] = $r[0]->lat;
return TRUE;
}
return FALSE;
}
 
683,12 → 705,34
* @return un tableau associatif contenant une ou plusieurs des clefs suivantes:
* 'adresse', 'cp', 'ville', 'pays'
*/
static function addrReStruc(Array $in) {
static function addrReStruct(Array $in) {
// TODO: fixer le bug des pays ...
if(is_numeric($in['cs_ce_truk_pays'])) {
switch($in['cs_ce_truk_pays']) {
case '2654':
$pays = 'france';
break;
case '2717':
$pays = 'émirats arabe unis';
break;
default:
$pays = '';
}
} else $pays = @trim($in['cs_ce_truk_pays']);
 
// 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, "rue"));
$adresse = substr($adresse, stripos($adresse, "avenue"));
$adresse = substr($adresse, stripos($adresse, "boulevard"));
$adresse = substr($adresse, stripos($adresse, "place"));
 
return array(
'adresse' => @trim($in['cs_adresse_01']) ? $in['cs_adresse_01'] : '',
'adresse' => $adresse,
'cp' => @trim($in['cs_code_postal']) ? $in['cs_code_postal'] : '',
'ville' => @trim($in['cs_ville']) ? $in['cs_ville'] : '',
'pays' => @trim($in['cs_ce_truk_pays']) ? $in['cs_ce_truk_pays'] : 'France'
'pays' => $pays !== FALSE ? $pays : 'France'
);
}
}