/trunk/jrest/services/Coel.php |
---|
719,25 → 719,24 |
* 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 |
* @param in: 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' |
* @param db: une db optionnelle, utilisée si nécessaire pour converir les code pays |
* du formulaire de saisie: 'cs_adresse_01', 'cs_code_postal', 'cs_ville' |
* @return un tableau associatif contenant une ou plusieurs des clefs suivantes: |
* 'adresse', 'cp', 'ville', 'pays' |
*/ |
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 = ''; |
static function addrReStruct(Array $in, $db = NULL) { |
$pays = FALSE; |
if(is_numeric(@$in['cs_ce_truk_pays'])) { |
if($db) { |
$pays= $db->query(sprintf( |
"SELECT cmlv_nom FROM coel_meta_liste_valeur ". |
"WHERE cmlv_ce_parent = 1074 AND cmlv_id_valeur = %d", |
intval($in['cs_ce_truk_pays'])))->fetchColumn(); |
} |
} else $pays = @trim($in['cs_ce_truk_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 |
/trunk/jrest/services/CoelStructure.php |
---|
199,7 → 199,7 |
return; |
} |
try { |
$form_needs_refresh = self::callNominatim($params); |
$form_needs_refresh = self::callNominatim($params, $this->bdd); |
self::NULLifNotNum($params, self::$optional_bool_fields); |
274,7 → 274,7 |
return; |
} |
try { |
$form_needs_refresh = self::callNominatim($params); |
$form_needs_refresh = self::callNominatim($params, $this->bdd); |
self::NULLifNotNum($params, self::$optional_bool_fields); |
367,17 → 367,30 |
$id_structure))->fetchColumn() != 0); |
} |
static function callNominatim(&$params) { |
if ( |
(! @$params['cs_latitude'] || ! @$params['cs_longitude']) && |
(@$params['cs_adresse_01'] || @$params['cs_code_postal'] || @$params['cs_ville']) ) { |
static function callNominatim(&$params, $db = NULL) { |
// lon/lat déjà saisies ? |
if (@$params['cs_latitude'] && @$params['cs_longitude']) return FALSE; |
// ni adresse, ni CP, ni ville ? rien n'est possible |
if (!@$params['cs_adresse_01'] && !@$params['cs_code_postal'] && !@$params['cs_ville']) return FALSE; |
$lonlat = array(); |
if(Coel::coordGuess(Coel::addrReStruct($params), $lonlat)) { |
if(Coel::coordGuess(Coel::addrReStruct($params, $db), $lonlat)) { |
$params['cs_latitude'] = $lonlat['lat']; |
$params['cs_longitude'] = $lonlat['lon']; |
return TRUE; |
} |
// second guess, sans code postal |
if(@$params['cs_code_postal']) { |
$params2 = $params; |
unset($params2['cs_code_postal']); |
if(Coel::coordGuess(Coel::addrReStruct($params2, $db), $lonlat)) { |
$params['cs_latitude'] = $lonlat['lat']; |
$params['cs_longitude'] = $lonlat['lon']; |
return TRUE; |
} |
} |
return FALSE; |
} |