Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 2563 → Rev 2564

/trunk/jrest/bibliotheque/RechercheInfosZoneGeo.php
73,17 → 73,27
}
public function obtenirInfosPourNoms($nom, $pays, $code) {
$nom = trim($nom);
$pays = trim($pays);
$code = trim($code);
$retour = false;
// Dans le cas de la france on possède directement une table
// avec les centroïdes des communes
if($pays == 'FR' || $code != "*") {
if($pays == 'FR' || $code != "") {
$retour = $this->chercherCentroideCommuneBdd($nom, $code);
} else {
// Sinon méthode habituelle, un test simple suivi d'un test plus complexe
$retour = $this->chercherCentroideCommuneBdd($nom, $code);
if(!$retour) {
$retour = $this->effectuerRequeteGeocodingMondiale($nom);
// On cherche donc d'abord en France
if($pays == "") {
$retour = $this->chercherCentroideCommuneBdd($nom, $code);
}
// Si on ne trouve rien on teste dans le monde entier
if($retour == false) {
$retour = $this->effectuerRequeteGeocodingMondiale($nom, '2,3,4,5,6,7,8', 1, $pays);
}
}
return $retour;
192,8 → 202,10
return $retour;
}
private function effectuerRequeteGeocodingMondiale($nom, $niveau = '2,3,4,5,6,7,8', $limite = 1) {
$url = $this->config['cel']['url_service_geo_mondial'].'?masque='.urlencode($nom).'&niveau='.$niveau.'&limite='.$limite;
private function effectuerRequeteGeocodingMondiale($nom, $niveau = '2,3,4,5,6,7,8', $limite = 1, $pays = null) {
$url_sans_pays = $this->config['cel']['url_service_geo_mondial'].'?masque='.urlencode($nom).'&niveau='.$niveau.'&limite='.$limite;
$url = $url_sans_pays.(!empty($pays) ? '&pays='.urlencode($pays) : '');
 
$res = @json_decode(file_get_contents($url), true);
 
$retour = array();
211,6 → 223,14
$retour[] = $this->formaterLigneResultat($param);
}
}
} else if($limite == 1) {
// Dans le cas où un pays a été demandé mais pas de résultat, on rentente la recherche sans
// préciser de pays
$res = @json_decode(file_get_contents($url_sans_pays), true);
if(!empty($res)) {
$retour = $this->traiterLigneResultatRequeteGeocodingMondiale($res);
}
}
return $retour;
/trunk/jrest/bibliotheque/GestionObservation.php
63,7 → 63,6
$sous_requete_colonnes = $this->traiterParametresObservationEtConstruireSousRequeteAjout($parametres);
 
$requete_insertion_observation = $requete_insertion_observation.$sous_requete_colonnes;
 
// important ! ne pas utiliser la fonction executerRequete qui renvoie une erreur si la requete
// contient des | (pipes) ce qui peut arriver dans les commentaires
// TODO: corriger la fonction ou bien continuer à utiliser executerRequeteSimple
468,7 → 467,6
if (isset($parametres['ce_zone_geo'])) {
if ($parametres['ce_zone_geo'] == 'null' || trim($parametres['ce_zone_geo']) == "" || !is_numeric($parametres['ce_zone_geo'])) {
$parametres['ce_zone_geo'] = "";
$parametres['pays'] = '';
} else {
if (strlen($parametres['ce_zone_geo']) == 4) {
$parametres['ce_zone_geo'] = '0'.$parametres['ce_zone_geo'];
481,8 → 479,6
}
$parametres['pays'] = 'FR';
}
} else {
$parametres['pays'] = '';
}
 
// TODO: Fusionner cette partie et la partie du dessus en une fonction qui complete toutes les infos
/trunk/jrest/services/CoordSearch.php
1,7 → 1,7
<?php
// declare(encoding='UTF-8');
/**
* Service recherche de commune par coordonnées et vice versa.
* Service recherche de zone par coordonnées et vice versa.
*
* @internal Mininum PHP version : 5.2
* @category CEL
17,38 → 17,33
*/
class CoordSearch extends Cel {
/**
* Recherche de coordonnées suivant ce qui est fourni
*
* $uid[0] = latitude (ou * si recherche coordonnées d'une commune)
* $uid[1] = longitude (ou * si recherche coordonnées d'une commune)
* $uid[2] = commune (ou * si recherche d'une commune correspondant à des coordonnées)
* $uid[3] = code_postal (ou * si recherche d'une commune correspondant à des coordonnées)
* $uid[4] = code_pays (ou * si recherche d'une commune correspondant à des coordonnées, par défaut vaut FR)
*/
public function getRessource() {
return $this->getElement(array());
}
public function getElement($uid){
$header = '';
$retour = array();
 
$params = $this->traiterParametres($uid);
$params = $this->traiterParametres();
$recherche_zones_geo = new RechercheInfosZoneGeo($this->config);
 
if ($this->estUneRequeteReverseGeocoding($params)) {
 
$coordonnees = array('latitude' => $params['lat'], 'longitude' => $params['lon']);
$informations_communes = $recherche_zones_geo->obtenirInfosPourCoordonnees($coordonnees);
$informations_zones = $recherche_zones_geo->obtenirInfosPourCoordonnees($coordonnees);
$header = 'Content-Type: application/json; charset=UTF-8';
$retour = json_encode($informations_communes);
$retour = json_encode($informations_zones);
} elseif ($this->estUneRequeteGeocoding($params)) {
$informations_coord = $recherche_zones_geo->obtenirInfosPourNoms($params['commune'], $params['pays'], $params['code']);
$informations_coord = $recherche_zones_geo->obtenirInfosPourNoms($params['zone'], $params['pays'], $params['code']);
$header = 'Content-Type: application/json; charset=UTF-8';
$retour = json_encode($informations_coord);
} else {
$header = 'HTTP/1.0 400 Bad Request';
$retour = 'Commune ou Coordonnées non spécifiées';
$retour = 'zone ou Coordonnées non spécifiées';
}
header($header);
55,29 → 50,25
echo $retour;
}
 
protected function traiterParametres($params) {
$lat = $this->affecterValeurParametreOuDefaut($params, 0, '*');
$lng = $this->affecterValeurParametreOuDefaut($params, 1, '*');
$commune = $this->affecterValeurParametreOuDefaut($params, 2, '*');
$code_postal = $this->affecterValeurParametreOuDefaut($params, 3, '*');
$code_pays = $this->affecterValeurParametreOuDefaut($params, 4, '');
protected function traiterParametres() {
$lat = !empty($_GET['lat']) ? $_GET['lat'] : '';
$lon = !empty($_GET['lon']) ? $_GET['lon'] : '';
$zone = !empty($_GET['zone']) ? $_GET['zone'] : '';
$code = !empty($_GET['code']) ? $_GET['code'] : '';
$pays = !empty($_GET['pays']) ? $_GET['pays'] : '';
return array(
'lat' => $lat,
'lon' => $lng,
'commune' => $commune,
'code' => $code_postal,
'pays' => $code_pays);
'lon' => $lon,
'zone' => $zone,
'code' => $code,
'pays' => $pays);
}
 
private function affecterValeurParametreOuDefaut($params, $indice, $valeur_si_non_present) {
return isset($params[$indice]) ? str_replace('"','',urldecode($params[$indice])) : $valeur_si_non_present;
}
 
private function estUneRequeteReverseGeocoding($params) {
return ($params['lat'] != '*' && $params['lon'] != '*');
return ($params['lat'] != '' && $params['lon'] != '');
}
 
private function estUneRequeteGeocoding($params) {
return ($params['commune'] != '*');
return ($params['zone'] != '');
}
}
/trunk/jrest/services/InventoryLocationList.php
22,10 → 22,10
$this->controleUtilisateur($uid[0]);
$idUtilisateurP = Cel::db()->proteger($uid[0]);
 
$requete = 'SELECT DISTINCT ce_zone_geo, zone_geo, lieudit, station '.
$requete = 'SELECT DISTINCT pays, ce_zone_geo, zone_geo, lieudit, station '.
'FROM cel_obs '.
"WHERE ce_utilisateur = $idUtilisateurP ".
'ORDER BY ce_zone_geo ASC, zone_geo ASC, lieudit ASC, station ASC '.
'ORDER BY pays ASC, ce_zone_geo ASC, zone_geo ASC, lieudit ASC, station ASC '.
' -- '.__FILE__.':'.__LINE__;
$resultats = Cel::db()->requeter($requete);