Subversion Repositories eFlore/Applications.coel

Compare Revisions

Ignore whitespace Rev 1708 → Rev 1709

/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']) ) {
$lonlat = array();
if(Coel::coordGuess(Coel::addrReStruct($params), $lonlat)) {
$params['cs_latitude'] = $lonlat['lat'];
$params['cs_longitude'] = $lonlat['lon'];
return TRUE;
}
}
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, $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;
}
/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 = '';
}
} else $pays = @trim($in['cs_ce_truk_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']);
 
// 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