23,7 → 23,7 |
*/ |
class ZoneADmin { |
|
const PATTERN_LAT = '/^[0-9]+(?:[.][0-9]+|)$/'; |
const PATTERN_LAT = '/^[-]?[0-9]+(?:[.][0-9]+|)$/'; |
const PATTERN_LON = '/^[-]?[0-9]+(?:[.][0-9]+|)$/'; |
const MIME_JSON = 'application/json'; |
|
33,6 → 33,7 |
private $lat = null; |
private $lon = null; |
private $zone = null; |
private $niveaux = null; |
|
public function __construct(Bdd $bdd) { |
$this->bdd = $bdd; |
44,6 → 45,7 |
$this->lat = $this->parametres['lat']; |
$this->lon = $this->parametres['lon']; |
$this->zone = isset($this->parametres['zone']) ? $this->parametres['zone'] : null; |
$this->niveaux = isset($this->parametres['niveau']) ? explode(',', $this->parametres['niveau']) : null; |
|
$zoneTrouveeInfos = $this->localiserPointLatLon(); |
$corps = $this->formaterResultats($zoneTrouveeInfos); |
60,7 → 62,7 |
if (! array_key_exists('lat', $this->parametres)) { |
$messages[] = "Vous devez indiquer une latitude en degré décimal à l'aide du paramètres d'url : lat"; |
} else if (!preg_match(self::PATTERN_LAT, $lat)) { |
$messages[] = "La valeur de latitude doit être un nombre décimal positif dont le séparateur décimal est un point. Ex. : 44 ou 43.03"; |
$messages[] = "La valeur de latitude doit être un nombre décimal dont le séparateur décimal est un point. Ex. : 44 ou 43.03"; |
} |
if (! array_key_exists('lon', $this->parametres)) { |
$messages[] = "Vous devez indiquer une longitude en degré décimal à l'aide du paramètres d'url : lon"; |
131,6 → 133,8 |
|
private function construireRequeteUnion() { |
$zone = isset($this->zone) ? $this->bdd->proteger($this->zone) : null; |
$niveaux = isset($this->niveaux) ? $this->niveaux : null; |
|
$requeteTpl = 'SELECT osm_id, '. |
"(($this->lon - centre_lng) * ($this->lon -centre_lng) + ($this->lat - centre_lat) * ($this->lat - centre_lat)) AS distance ". |
'FROM osm_zones_admin '. |
138,10 → 142,10 |
(isset($zone) ? "AND zone = $zone " : ''). |
'ORDER BY distance ASC '. |
"LIMIT %s "; |
$niveaux = array(2,3,4,5,6,7,8); |
$niveaux = isset($niveaux) ? $niveaux : array(2,3,4,5,6,7,8); |
$requetesAUnir = array(); |
foreach ($niveaux as $niveau) { |
$requetesAUnir[] = sprintf($requeteTpl, $niveau, ($niveau * 2)); |
$requetesAUnir[] = sprintf($requeteTpl, $this->bdd->proteger($niveau), ($niveau * 2)); |
} |
$requete = '('.implode(') UNION (', $requetesAUnir).') -- '.__FILE__.' : '.__LINE__; |
return $requete; |