Subversion Repositories eFlore/Applications.cel

Rev

Rev 2743 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2743 Rev 2747
Line 152... Line 152...
152
				$rd = array();
152
				$rd = array();
153
				for($ii = $index_insertion_point_debut+1; $ii <= $index_insertion_point_fin; $ii++) {
153
				for($ii = $index_insertion_point_debut+1; $ii <= $index_insertion_point_fin; $ii++) {
154
					$rd[] = $element['geometry'][$ii];
154
					$rd[] = $element['geometry'][$ii];
155
				}
155
				}
Line -... Line 156...
-
 
156
				
-
 
157
				$proj_debut = $infos_debut;
-
 
158
				$proj_fin = $infos_fin;
156
				
159
				
157
				// Insertion des points utilisateurs en début et fin de tableau
160
				// Insertion des points utilisateurs en début et fin de tableau
158
				array_unshift($rd, $proj_debut);
161
				array_unshift($rd, $proj_debut);
Line 159... Line 162...
159
				array_push($rd, $proj_fin);
162
				array_push($rd, $proj_fin);
Line 172... Line 175...
172
			asort($distances_fin);
175
			asort($distances_fin);
173
			reset($distances_fin);
176
			reset($distances_fin);
174
			$cle_plus_courte_fin = key($distances_fin);
177
			$cle_plus_courte_fin = key($distances_fin);
175
		}
178
		}
Line -... Line 179...
-
 
179
		
176
		
180
		if(!empty($distances_fin)) {
177
		$cle_choisie = $this->choisirIndexRuePlusProchePourDebutEtFin($cle_plus_courte_debut, $cle_plus_courte_fin, $distances_debut, $distances_fin);	
181
			$cle_choisie = $this->choisirIndexRuePlusProchePourDebutEtFin($cle_plus_courte_debut, $cle_plus_courte_fin, $distances_debut, $distances_fin);	
178
		$rue_plus_proche = $distances_fin[$cle_choisie];			
182
			$rue_plus_proche = $distances_fin[$cle_choisie];			
179
		unset($distances_fin[$cle_choisie]);
183
			unset($distances_fin[$cle_choisie]);
-
 
184
			$distances_fin = array($cle_choisie => $rue_plus_proche) + $distances_fin;
Line 180... Line 185...
180
		$distances_fin = array($cle_choisie => $rue_plus_proche) + $distances_fin;
185
		}
181
		
186
		
182
		$elements_fmt = array();
187
		$elements_fmt = array();
183
		foreach($distances_fin as $index => $distance) {
188
		foreach($distances_fin as $index => $distance) {
Line 217... Line 222...
217
		
222
		
218
		return $cle_choisie;
223
		return $cle_choisie;
Line 219... Line 224...
219
	}
224
	}
220
	
225
	
221
	function getIndexInsertionDebut($element, $index_min, $debut) {
226
	function getIndexInsertionDebut($element, $index_min, $debut) {
222
		// le point de début est situé entre $index_debut et $index_debut + 1
227
		// le point de début est situé entre $index_min et $index_min + 1
223
		$proj_debut = $this->getOrthoPoint($element['geometry'][$index_min], $element['geometry'][$index_min+1], $debut);		
228
		$proj_debut = $this->getOrthoPoint($element['geometry'][$index_min], $element['geometry'][$index_min+1], $debut);		
224
		$point_deb = $element['geometry'][$index_min];
229
		$point_deb = $element['geometry'][$index_min];
225
		$point_deb_plus_un = $element['geometry'][$index_min+1];
230
		$point_deb_plus_un = $element['geometry'][$index_min+1];
Line 242... Line 247...
242
		$distance_point_fin_moins_un_proj = self::haversineGreatCircleDistance($point_fin_moins_un['lat'], $point_fin_moins_un['lon'], $proj_fin['lat'], $proj_fin['lon']);
247
		$distance_point_fin_moins_un_proj = self::haversineGreatCircleDistance($point_fin_moins_un['lat'], $point_fin_moins_un['lon'], $proj_fin['lat'], $proj_fin['lon']);
243
		$distance_point_fin_fin_moins_un = self::haversineGreatCircleDistance($point_fin['lat'], $point_fin['lon'], $point_fin_moins_un['lat'], $point_fin_moins_un['lon']);
248
		$distance_point_fin_fin_moins_un = self::haversineGreatCircleDistance($point_fin['lat'], $point_fin['lon'], $point_fin_moins_un['lat'], $point_fin_moins_un['lon']);
Line 244... Line 249...
244
	
249
	
245
		if($distance_point_fin_moins_un_proj < $distance_point_fin_fin_moins_un) {
250
		if($distance_point_fin_moins_un_proj < $distance_point_fin_fin_moins_un) {
246
			// le point le plus proche doit être éliminé
251
			// le point le plus proche doit être éliminé
247
			return $index_max;
252
			return $index_max - 1;
248
		} else {
253
		} else {
249
			// il doit être gardé
254
			// il doit être gardé
250
			return $index_max + 1;
255
			return $index_max;
251
		}
256
		}
Line 252... Line 257...
252
	}
257
	}
253
	
258