Subversion Repositories eFlore/Applications.cel

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
416 aurelien 1
<?php
2
/**
3
 * Service fournissant une carte dynamique des obsertions publiques du CEL.
4
 * Encodage en entrée : utf8
5
 * Encodage en sortie : utf8
6
 *
7
 * Cas d'utilisation :
8
 * /CelWidgetMap/Carte/Utilisateur : carte des observations publiques d'un utilisateur.
9
 * /CelWidgetMap/Carte/Utilisateur/Projet : carte des observations publiques d'un utilisateur pour un projet.
10
 *
11
 * Carte = Type de carte. Valeurs possible : defaut,
12
 * Utilisateur = identifiant (= courriel) de l'utilisateur ou * pour tous les utilisateurs.
13
 * Projet = mot-clé du projet
14
 *
15
 * @author Jean-Pascal MILCENT <jpm@clapas.org>
16
 * @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
17
 * @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
18
 * @version $Id$
19
 * @copyright © 2010, Jean-Pascal MILCENT
20
 */
21
class CelWidgetMap extends Cel {
22
 
23
	/**
24
	 * Méthode appelée avec une requête de type GET.
25
	 */
26
	public function getElement($params) {
27
		$retour = null;
28
		$parametres = $this->traiterParametres(array('carte', 'utilisateur', 'projet'), $params, false);
29
		extract($parametres);
30
 
31
		if (isset($carte)) {
32
			$methode = $this->traiterNomMethodeGet($carte);
33
			if (method_exists($this, $methode)) {
34
				$retour = $this->$methode($parametres);
35
			} else {
36
				$this->messages[] = "Ce type de carte '$methode' n'est pas disponible.";
37
			}
38
		} else {
39
			$this->messages[] = "Vous devez indiquer le type de carte.";
40
		}
41
 
42
		if (is_null($retour)) {
43
			$info = 'Un problème est survenu : '.print_r($this->messages, true);
44
			$this->envoyer($info);
45
		} else if ($retour['type'] == 'widget') {
46
			$squelette = dirname(__FILE__).DIRECTORY_SEPARATOR.'squelettes'.DIRECTORY_SEPARATOR.$retour['squelette'].'.tpl.html';
47
			$html = $this->traiterSquelettePhp($squelette, $retour['donnees']);
48
			$this->envoyer($html);
49
		} else if ($retour['type'] == 'json') {
50
			$this->envoyerJson($retour['variable_js'], $retour['donnees']);
51
		}
52
	}
53
 
54
	/**
55
	 * Données de la carte par défaut
56
	 */
57
	public function getCarteDefautJson($parametres) {
58
		$json = null;
59
		extract($parametres);
60
 
61
		$requete = 	'SELECT sector, x_utm, y_utm, coord_x, coord_y, ref_geo '.
62
					'FROM cel_inventory AS i '.
63
					'	LEFT JOIN locations AS l '.
64
					'		ON (l.name = i.location AND l.code = i.id_location) '.
65
					"WHERE transmission = '1' ".
66
					(isset($utilisateur) ? " AND identifiant = '$utilisateur' " : '');
67
					$resultats = $this->executerRequete($requete);
68
 
69
		// Traitement des résultats
70
		$mm = array('min_x' => 0,'max_x' => 0,'min_y' => 0,'max_y' => 0);
71
		$points = array();
72
		foreach ($resultats as $enrg) {
73
			if ($enrg['coord_x'] == '' && $enrg['coord_y'] == '' && $enrg['x_utm'] != '' && $enrg['y_utm'] != '') {
74
				$convertisseur = new gPoint();
75
				$convertisseur->setUTM($enrg['x_utm'], $enrg['y_utm'], $enrg['sector']);
76
				$convertisseur->convertTMtoLL();
77
				$enrg['coord_x'] = $convertisseur->Lat();
78
				$enrg['coord_y'] = $convertisseur->Long();
79
			}
80
 
81
 
82
			$id = $enrg['coord_x'].'-'.$enrg['coord_y'];
83
			if (!isset($points[$id])) {
84
				$points[$id] = $enrg;
85
				$points[$id]['nbre'] = 1;
86
			} else {
87
				$points[$id]['nbre']++;
88
			}
89
 
90
			// Détermination x et y min et max
91
			$mm['min_x'] = ($mm['min_x'] > $enrg['coord_x']) ? $enrg['coord_x'] : $mm['min_x'];
92
			$mm['min_y'] = ($mm['min_y'] > $enrg['coord_y']) ? $enrg['coord_y'] : $mm['min_y'];
93
			$mm['max_x'] = ($mm['max_x'] < $enrg['coord_x']) ? $enrg['coord_x'] : $mm['max_x'];
94
			$mm['max_y'] = ($mm['max_y'] < $enrg['coord_y']) ? $enrg['coord_y'] : $mm['max_y'];
95
		}
96
 
97
		// Post-traitement des résultats
98
		$x_moyen = str_replace(',', '.', ($mm['max_x'] - $mm['min_x']));
99
		$y_moyen = str_replace(',', '.', ($mm['max_y'] - $mm['min_y']));
100
		$points = array_values($points);
101
 
102
		// Création des infos du widget
103
		$json['type'] = 'json';
104
		$json['variable_js'] = 'obs';
105
		$json['donnees']['points'] = $points;
106
		$json['donnees']['nombre'] = count($points);
107
		$json['donnees']['centre_x'] = $x_moyen;
108
		$json['donnees']['centre_y'] = $y_moyen;
109
 
110
 
111
		//echo '<pre>'.print_r($json, true).'</pre>';
112
		return $json;
113
	}
114
}