Rev 2453 | Rev 2455 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?phpclass CelRadiusPoints extends Cel {/*** Méthode appelée avec une requête de type GET.*/public function getRessource() {return $this->getElement(array());}/*** Méthode appelée avec une requête de type GET.*/public function getElement($params) {$lat_centre = str_replace(',', '.', round(floatval($_GET['lat']), 3));$lon_centre = str_replace(',', '.', round(floatval($_GET['lon']), 3));$radius = str_replace(',', '.', floatval($_GET['radius']/1000));$retour = array();$retour['points'] = $this->obtenirPointsPourCentreEtRadius($lat_centre, $lon_centre, $radius);if(empty($retour['points'])) {$retour['plus_proche'] = $this->obtenirPointPlusProche($lat_centre, $lon_centre);}$this->envoyerJson($retour);}public function obtenirPointsPourCentreEtRadius($lat_centre, $lon_centre, $radius) {$requete = "SELECT "."id_observation, nom_sel, latitude, longitude, COUNT(id_observation) as nb_obs "."FROM cel_obs "."WHERE latitude != 0 AND longitude != 0 "."AND ".$this->renvoyerDistanceSql($lat_centre, $lon_centre)." < ".$radius." "."GROUP BY latitude, longitude ";$points = Cel::db()->requeter($requete);return $points;}private function renvoyerDistanceSql($lat_centre, $lon_centre) {$sous_requete ="( "."6371 * acos ( "."cos ( radians(".$lat_centre.") ) "."* cos( radians( latitude ) ) "."* cos( radians( longitude ) - radians(".$lon_centre.") ) "."+ sin ( radians(".$lat_centre.") ) "."* sin( radians( latitude ) ) ".") ".") ";return $sous_requete;}public function obtenirPointPlusProche($lat_centre, $lon_centre) {$requete = "SELECT "."id_observation, nom_sel, ".$this->renvoyerDistanceSql($lat_centre, $lon_centre)." AS distance, "."latitude, longitude, COUNT(id_observation) as nb_obs "."FROM cel_obs "."WHERE latitude != 0 AND longitude != 0 "."GROUP BY latitude, longitude "."HAVING distance = MIN(distance) "."ORDER BY distance ";$point = Cel::db()->requeterLigne($requete);return $point;}}