Subversion Repositories eFlore/Applications.cel

Rev

Rev 428 | Rev 478 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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