Rev 416 | Rev 478 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php/*** Service fournissant une carte dynamique des obsertions publiques du CEL.* Encodage en entrée : utf8* Encodage en sortie : utf8** Cas d'utilisation :* /CelWidgetMap/Carte/Utilisateur : carte des observations publiques d'un utilisateur.* /CelWidgetMap/Carte/Utilisateur/Projet : carte des observations publiques d'un utilisateur pour un projet.** Carte = Type de carte. Valeurs possible : defaut,* Utilisateur = identifiant (= courriel) de l'utilisateur ou * pour tous les utilisateurs.* Projet = mot-clé du projet** @author Jean-Pascal MILCENT <jpm@clapas.org>* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>* @version $Id$* @copyright © 2010, Jean-Pascal MILCENT*/class CelWidgetMap extends Cel {/*** Méthode appelée avec une requête de type GET.*/public function getElement($params) {$retour = null;$parametres = $this->traiterParametres(array('carte', 'utilisateur', 'projet'), $params, false);extract($parametres);if (isset($carte)) {$methode = $this->traiterNomMethodeGet($carte);if (method_exists($this, $methode)) {$retour = $this->$methode($parametres);} else {$this->messages[] = "Ce type de carte '$methode' n'est pas disponible.";}} else {$this->messages[] = "Vous devez indiquer le type de carte.";}if (is_null($retour)) {$info = 'Un problème est survenu : '.print_r($this->messages, true);$this->envoyer($info);} else if ($retour['type'] == 'widget') {$squelette = dirname(__FILE__).DIRECTORY_SEPARATOR.'squelettes'.DIRECTORY_SEPARATOR.$retour['squelette'].'.tpl.html';$html = $this->traiterSquelettePhp($squelette, $retour['donnees']);$this->envoyer($html);} else if ($retour['type'] == 'json') {$this->envoyerJson($retour['variable_js'], $retour['donnees']);}}/*** Données de la carte par défaut*/public function getCarteDefautJson($parametres) {$json = null;extract($parametres);$requete = 'SELECT sector, x_utm, y_utm, coord_x, coord_y, ref_geo '.'FROM cel_inventory AS i '.' LEFT JOIN locations AS l '.' ON (l.name = i.location AND l.code = i.id_location) '."WHERE transmission = '1' ".(isset($utilisateur) ? " AND identifiant = '$utilisateur' " : '');$resultats = $this->executerRequete($requete);// Traitement des résultats$mm = array('min_x' => 0,'max_x' => 0,'min_y' => 0,'max_y' => 0);$points = array();foreach ($resultats as $enrg) {if ($enrg['coord_x'] == '' && $enrg['coord_y'] == '' && $enrg['x_utm'] != '' && $enrg['y_utm'] != '') {$convertisseur = new gPoint();$convertisseur->setUTM($enrg['x_utm'], $enrg['y_utm'], $enrg['sector']);$convertisseur->convertTMtoLL();$enrg['coord_x'] = $convertisseur->Lat();$enrg['coord_y'] = $convertisseur->Long();}$id = $enrg['coord_x'].'-'.$enrg['coord_y'];if (!isset($points[$id])) {$points[$id] = $enrg;$points[$id]['nbre'] = 1;} else {$points[$id]['nbre']++;}// Détermination x et y min et max$mm['min_x'] = ($mm['min_x'] > $enrg['coord_x']) ? $enrg['coord_x'] : $mm['min_x'];$mm['min_y'] = ($mm['min_y'] > $enrg['coord_y']) ? $enrg['coord_y'] : $mm['min_y'];$mm['max_x'] = ($mm['max_x'] < $enrg['coord_x']) ? $enrg['coord_x'] : $mm['max_x'];$mm['max_y'] = ($mm['max_y'] < $enrg['coord_y']) ? $enrg['coord_y'] : $mm['max_y'];}// Post-traitement des résultats$x_moyen = str_replace(',', '.', ($mm['max_x'] - $mm['min_x']));$y_moyen = str_replace(',', '.', ($mm['max_y'] - $mm['min_y']));$points = array_values($points);// Création des infos du widget$json['type'] = 'json';$json['variable_js'] = 'obs';$json['donnees']['points'] = $points;$json['donnees']['nombre'] = count($points);$json['donnees']['centre_x'] = $x_moyen;$json['donnees']['centre_y'] = $y_moyen;//echo '<pre>'.print_r($json, true).'</pre>';return $json;}}