Subversion Repositories eFlore/Applications.moissonnage

Rev

Rev 26 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 26 Rev 31
Line 8... Line 8...
8
	
8
	
9
	private $indexLongitude;
9
	private $indexLongitude;
10
	private $indexLatitude;
10
	private $indexLatitude;
Line 11... Line 11...
11
	private $mailles;
11
	private $mailles;
Line 12... Line 12...
12
	
12
	
13
	private $bdd = null;	
13
	private $bdd = null;
Line 64... Line 64...
64
				"(axe='lat' AND fin>=".$this->bbox['sud']." AND debut<=".$this->bbox['nord'].") ".
64
				"(axe='lat' AND fin>=".$this->bbox['sud']." AND debut<=".$this->bbox['nord'].") ".
65
				"OR (axe='lng' AND {$conditionsLongitude})".
65
				"OR (axe='lng' AND {$conditionsLongitude})".
66
			") ORDER BY axe, position";
66
			") ORDER BY axe, position";
67
		$indexMailles = $this->getBdd()->recupererTous($requete);
67
		$indexMailles = $this->getBdd()->recupererTous($requete);
Line -... Line 68...
-
 
68
		
68
		
69
		
69
		foreach ($indexMailles as $index) {
70
		foreach ($indexMailles as $index) {
70
			if ($index['axe'] == 'lng') {
71
			if ($index['axe'] == 'lng') {
71
				$this->indexLongitude[$index['position']] = array($index['debut'], $index['fin']);
72
				$this->indexLongitude[$index['position']] = array($index['debut'], $index['fin']);
72
			} else {
73
			} else {
Line 87... Line 88...
87
		return $this->bdd;
88
		return $this->bdd;
88
	}
89
	}
Line 89... Line 90...
89
	
90
	
90
	
91
	
91
	public function ajouterPoints(& $points) {
92
	public function ajouterPoints(& $points) {
92
		foreach ($points as $index => $point) {
93
		foreach ($points as $point) {
93
			list($longitude, $latitude) = $this->obtenirCoordonneesPoint($point);
94
			list($longitude, $latitude) = $this->obtenirCoordonneesPoint($point);
94
			list($indexLongitude, $indexLatitude) = $this->rechercherIndexMaille($longitude, $latitude);
95
			list($indexLongitude, $indexLatitude) = $this->rechercherIndexMaille($longitude, $latitude);
95
			$this->mailles[$indexLatitude][$indexLongitude]->ajouterPoint($point);
96
			$this->mailles[$indexLatitude][$indexLongitude]->ajouterPoint($point);
Line -... Line 97...
-
 
97
		}
-
 
98
	}
-
 
99
	
-
 
100
	public function ajouterMailles(& $mailles) {
-
 
101
		foreach ($mailles as $maille) {
-
 
102
			$longitude = ($maille->longitudeOuest + $maille->longitudeEst) / 2;
-
 
103
			$latitude  = ($maille->latitudeSud    + $maille->latitudeNord) / 2;
-
 
104
			list($indexLongitude, $indexLatitude) = $this->rechercherIndexMaille($longitude, $latitude);
-
 
105
			$this->mailles[$indexLatitude][$indexLongitude]->combinerMailles($maille);
96
		}
106
		}
97
	}
107
	}
98
	
108
	
99
	private function obtenirCoordonneesPoint($point) {
109
	private function obtenirCoordonneesPoint($point) {
100
		$longitude = 0;
110
		$longitude = 0;
Line 121... Line 131...
121
			$indexLongitude ++;
131
			$indexLongitude ++;
122
		}
132
		}
123
		return array($indexLongitude, $indexLatitude);
133
		return array($indexLongitude, $indexLatitude);
124
	}
134
	}
Line 125... Line 135...
125
 
135
 
126
	public function formaterSortie() {
136
	public function formaterSortie($toutesLesMailles = false) {
127
		$mailles_resume = array();
137
		$mailles_resume = array();
128
		foreach ($this->mailles as $ligne) {
138
		foreach ($this->mailles as $ligne) {
129
			foreach ($ligne as $maille) {
139
			foreach ($ligne as $maille) {
130
				$nombrePoints = $maille->getNombrePoints();
140
				$nombrePoints = $maille->getNombrePoints();
131
				if ($nombrePoints == 0)
-
 
132
					continue;
-
 
133
				$mailles_resume[] = array(
-
 
134
					'zoom'      => $this->zoom,
-
 
135
					'sud'       => $maille->getLatitudeSud(),
-
 
136
					'ouest'     => $maille->getLongitudeOuest(),
-
 
137
					'nord'      => $maille->getLatitudeNord(),
-
 
138
					'est'       => $maille->getLongitudeEst(),
-
 
139
					'points'    => $nombrePoints,
-
 
140
					'type_site' => 'MAILLE'
-
 
141
				);
-
 
142
			}
-
 
143
		}
-
 
144
		if (count($mailles_resume) == 0 || count($mailles_resume[0]) == 0)
-
 
145
			return array();
-
 
146
		return $mailles_resume;
-
 
147
	}
-
 
148
	
-
 
149
	public function formaterPourInsertionBdd() {
-
 
150
		$mailles_resume = array();
-
 
151
		foreach ($this->mailles as $ligne) {
-
 
152
			foreach ($ligne as $maille) {
-
 
153
				if ($maille->getNombrePoints() > 0) {
141
				if ($nombrePoints > 0 || $toutesLesMailles) {
154
					$mailles_resume[] = array(
142
					$mailles_resume[] = array(
155
						'zoom'     => $this->zoom,
143
						'zoom'      => $this->zoom,
156
						'sud'      => $maille->getLatitudeSud(),
144
						'sud'       => $maille->getLatitudeSud(),
157
						'ouest'    => $maille->getLongitudeOuest(),
145
						'ouest'     => $maille->getLongitudeOuest(),
158
						'nord'     => $maille->getLatitudeNord(),
146
						'nord'      => $maille->getLatitudeNord(),
159
						'est'      => $maille->getLongitudeEst(),
147
						'est'       => $maille->getLongitudeEst(),
160
						'indexLat' => $maille->getIndexLatitude(),
148
						'points'    => $nombrePoints,
161
						'indexLng' => $maille->getIndexLongitude(),
149
						'observations' => $maille->getNombreObservations(),
162
						'points'   => $maille->getNombrePoints()
150
						'type_site' => 'MAILLE'
163
					);
151
					);
164
				}
152
				}
165
			}
153
			}
166
		}
154
		}
167
		if (count($mailles_resume[0]) == 0)
155
		if (count($mailles_resume) == 0 || count($mailles_resume[0]) == 0)
168
			return array();
156
			return array();
169
		return $mailles_resume;
157
		return $mailles_resume;
170
	}
-
 
171
	
-
 
172
 
-
 
173
	public function zoomer() {
-
 
174
		$this->zoom += 1;
-
 
175
	}
-
 
176
	
-
 
177
	// redecoupage des mailles en 4 (fonction quadtree)
-
 
178
	// TODO : revoir le fonctionnement de cette methode (pour utilisation par les scripts uniquement)
-
 
179
	public function redecouperMailles() {
-
 
180
		$bdd = new Bdd();
-
 
181
		while (count($this->indexLatitude) > 0) {
-
 
182
			array_pop($this->indexLatitude);
-
 
183
		}
-
 
184
		while (count($this->indexLongitude) > 0) {
-
 
185
			array_pop($this->indexLongitude);
-
 
186
		}
-
 
187
		
-
 
188
		$mailles = $this->resumePourInsertionBdd();
-
 
189
		while (count($this->mailles) > 0) {
-
 
190
			array_pop($this->mailles);
-
 
191
		}
-
 
192
		
-
 
193
		foreach ($mailles as $maille) {
-
 
194
			$indexLat = 2 * $maille['indexLat'];
-
 
195
			$indexLng = 2 * $maille['indexLng'];
-
 
196
			// rechercher les nouvelles coordonnees des mailles au niveau de zoom inferieur
-
 
197
			$requete = "SELECT axe,position,debut,fin FROM mailles_index WHERE zoom=". $this->zoom ." AND ((axe='lat'"
-
 
198
				. " AND (position={$indexLat} OR position=" . ($indexLat+1) . ")) OR (axe='lng' AND"
-
 
199
				. " (position={$indexLng}  OR position=" . ($indexLng+1) . "))) ORDER BY If(axe='lat',0,1)";
-
 
200
			$resultats = $bdd->recupererTous($requete);
-
 
201
			
-
 
202
			$this->indexLatitude[$indexLat]    = array($resultats[0]['debut'], $resultats[0]['fin']);
-
 
203
			$this->indexLatitude[$indexLat+1]  = array($resultats[1]['debut'], $resultats[1]['fin']);
-
 
204
			$this->indexLongitude[$indexLng]   = array($resultats[2]['debut'], $resultats[2]['fin']);
-
 
205
			$this->indexLongitude[$indexLng+1] = array($resultats[3]['debut'], $resultats[3]['fin']);
-
 
206
		}
-
 
207
		ksort($this->indexLatitude);
-
 
208
		ksort($this->indexLongitude);
-
 
209
		
-
 
210
		// creer et ajouter les nouvelles mailles a partir des nouveaux index
-
 
211
		foreach ($this->indexLatitude as $indexLat => $intervalleLat) {
-
 
212
			$ligne = array();
-
 
213
			foreach ($this->indexLongitude as $indexLng => $intervalleLng) {
-
 
214
				$ligne[] = new Maille($intervalleLat[0], $intervalleLng[0], $intervalleLat[1],
-
 
215
					$intervalleLng[1], $indexLat, $indexLng);
-
 
216
			}
-
 
217
			$this->mailles[] = $ligne;
-
 
Line 218... Line -...
218
		}
-
 
219
 
-
 
220
	}
-
 
221
	
-
 
222
	public function getNombreMailles() {
-
 
223
		return count($this->mailles);
-
 
Line 224... Line 158...
224
	}
158
	}
Line 225... Line 159...
225
	
159
 
226
	
160