/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); |
/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 |