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' |
); |
} |
} |