16,7 → 16,9 |
* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org> |
*/ |
class RechercheInfosZoneGeo extends Cel { |
|
// @TODO: surveiller les conséquences du changement climatique :) |
const POINT_EMERGE_LE_PLUS_BAS = -422;// mètres |
|
public $maxTimeoutRequeteMondiale = 0; |
|
/** |
71,7 → 73,8 |
// Recherche par pays immédiate si en dehors de la bouding box française |
$infos_coord = $this->chercherInfosPays($coordonnees['latitude'], $coordonnees['longitude']); |
} |
return $infos_coord; |
|
return array_merge($infos_coord,['lat' => $coordonnees['latitude'], 'lng' => $coordonnees['longitude']]); |
} |
|
// gère aussi les id_zone_geo @TODO renommer la méthode et internationaliser |
551,4 → 554,76 |
$lieu = str_replace(['+', ' ', '-'], '_', $lieu); |
return $lieu; |
} |
|
public function obtenirAltitude($donnees) { |
$altitude = []; |
$api = ''; |
$parametres_coordonnees = ''; |
|
|
if(empty($donnees) || empty($donnees['code_pays'])) { |
return $altitude; |
} |
|
$pays = $donnees['code_pays']; |
$lat = $donnees['lat'] ?? $donnees['latitude'] ?? null; |
$lon = $donnees['lon'] ?? $donnees['lng'] ?? $donnees['longitude'] ?? null; |
|
if (!($lat && $lon)) { |
return $altitude; |
} |
|
if ('FR' === $donnees['code_pays']) { |
$api = 'ign'; |
$parametres_coordonnees = http_build_query(['lat' => $lat, 'lon' => $lon]); |
} else { |
$api = 'mapquest'; |
$parametres_coordonnees = http_build_query(['latLngCollection' => $lat.','.$lon]); |
} |
|
$url_service = sprintf($this->config[$api]['url_service_altitude'], $this->config[$api]['cle_api'], $parametres_coordonnees); |
|
$ch = curl_init($url_service); |
|
if ('ign' === $api) {// pas de header Authorization pour mapquest |
curl_setopt($ch, CURLOPT_USERPWD, $this->config[$api]['username'] . ":" . $this->config[$api]['password']); |
} |
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); |
$reponse = curl_exec($ch); |
curl_close($ch); |
|
$altitude = $this->traiterReponseServiceAltitude($api, $reponse); |
|
return ['altitude' => $altitude]; |
} |
|
public function traiterReponseServiceAltitude($api, $reponse) { |
$reponse = json_decode($reponse); |
$elevationArrayKey = ''; |
$elevationKey = ''; |
$altitude = null; |
|
// on a de la chance les réponses de ces 2 api sont structurées de la même façon |
if ('ign' === $api) { |
$elevationArrayKey = 'elevations'; |
$elevationKey = 'z'; |
} elseif ('mapquest' === $api) { |
$elevationArrayKey = 'elevationProfile'; |
$elevationKey = 'height'; |
} |
// du coup on peut faire ça |
if ( |
isset($reponse->{$elevationArrayKey}) |
&& is_array($reponse->{$elevationArrayKey}) |
&& isset($reponse->{$elevationArrayKey}[0]->{$elevationKey}) |
// lorsque les coordonnées sortent de leur rayon d'action, ces APIs |
// renvoient bien quelque-chose: -32768 pour mapquest, et -99999 pour l'IGN |
&& POINT_EMERGE_LE_PLUS_BAS < floatval($reponse->{$elevationArrayKey}[0]->{$elevationKey}) |
) { |
$altitude = $reponse->{$elevationArrayKey}[0]->{$elevationKey}; |
} |
|
return $altitude; |
} |
} |