Bonsoir à tous,

Bon, je dois développer un service de géolocalisation. Pour ça j'utilise l'API de google maps mais je voudrais y apporter quelque choses en plus. Par exemple, j'aimerais calculer la distance entre les coordonnées de l'utilisateur (son @ip est récupérée par google maps) et une éventuelle adresse inclue dans une BD. Mais alors là je rame complètement, ça me dépasse. Un coup de main ne serait pas de refus!
Merci, voici le code :


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
<!DOCTYPE html>
	<html>
	<head>
	<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
	<style type="text/css">
		html { height: 100% }
		body { height: 100%; margin: 200px; padding: 0px }
		#map_canvas { height: 90% ; width:90%;}
	</style>
	<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=true"></script>  <!-- Ici on fait appel à l'API de google Maps -->
	</head>
	<body onload="initialize()">
	<div>
 
		<br> Le produit A est a 43.72 kms d'ici <br>    <!-- Simple test avec données entrées en dur -->
		Le produit B est a 493.563 kms d'ici
	</div>
	<div id="map_canvas">
		<?php
			function getXmlCoordsFromAdress($address)	// Fonction de conversion de l'adresse postale en longitude et latitude
														// Ici il faudrait faire des requêtes pour récupérer l'adresse et la mettre sous la forme "22 rue rambuteau, 75003 PARIS, france" pour ensuite l'enregistrer dans uen variable
			{
				$coords=array();
				$base_url="http://maps.googleapis.com/maps/api/geocode/xml?";
				$request_url = $base_url . "address=" . urlencode($address).'&sensor=false';
				$xml = simplexml_load_file($request_url) or die("url not loading");
				$coords['lat']=$coords['lon']='';
				$coords['status'] = $xml->status ;
				if($coords['status']=='OK')
				{
					$coords['lat'] = doubleval($xml->result->geometry->location->lat);
					$coords['lon'] = doubleval($xml->result->geometry->location->lng);
				}
				return $coords;
			}
 
			function getPositionObjets($array) {
				$res = array();
				foreach($array as $val) {
					$object = array(
						"nom" => $val['nom'],
						"adresse" => $val['adresse'],
						"position" => getXmlCoordsFromAdress($val['adresse'])
					);
					array_push($res, $object);
				}
				return $res;
			}
 
			// Résultat
			$resBDD[0]['nom'] = "Laura";
			$resBDD[0]['adresse'] = "22 rue rambuteau, 75003 PARIS, france";
			$resBDD[1]['nom'] = "Damien";
			$resBDD[1]['adresse'] = "9 rue du Cananda, 13010 MARSEILLE, france";
			$resBDD[2]['nom'] = "Ronan";
			$resBDD[2]['adresse'] = "38 avenue Elsa Triolet, 13008 MARSEILLE, france";
 
			$positionObjets = getPositionObjets($resBDD);
 
			// Test
			$coords=getXmlCoordsFromAdress("22 rue rambuteau, 75003 PARIS, france");	// Ici adresse en dur mais requêtes sur BD puis enregistrer dans variable devrait le faire!
			$lat = $coords['lat'] ;
			$long = $coords['lon'] ;
 
			echo $coords['status'] . " " . $coords['lat'] . " " . $coords['lon'];				// Là ça ne s'affiche pas... Je capte pas pourquoi (pas très grave c'est juste pour vérifier)
 
			function get_distance_m($lat1, $lng1, $lat2, $lng2) {						// Fonction de calcul de la distance en fonction de longitude et latitude
				$earth_radius = 6378137;   // Terre = sphère de 6378km de rayon
				$rlo1 = deg2rad($lng1);
				$rla1 = deg2rad($lat1);
				$rlo2 = deg2rad($lng2);
				$rla2 = deg2rad($lat2);
				$dlo = ($rlo2 - $rlo1) / 2;
				$dla = ($rla2 - $rla1) / 2;
				$a = (sin($dla) * sin($dla)) + cos($rla1) * cos($rla2) * (sin($dlo) * sin($dlo
			));
			$d = 2 * atan2(sqrt($a), sqrt(1 - $a));
			return ($earth_radius * $d);
			}
 
			echo (round(get_distance_m($lat, $long, 45.767299, 4.834329) / 1000, 3)). ' km';	// ça ne s'affiche pas non plus. Il doit y avoir un conflit HTML PHP sur echo et print
																									// Ici si je mets $coords['lat'] et $coords['lon'] ça ne fonctionne pas :/
																									// Ni $lat = $coords['lat'] ...
																									// En gros pour $lat1 et $long1 coordonnées de NOUS et $lat2 et $long2 coordonnées de OBJET
			// affiche 391.613 km
		?>
 
	<script type="text/javascript">
		function initialize() {
			map = new google.maps.Map(document.getElementById("map_canvas"), {
			zoom: 13,
			center: new google.maps.LatLng(48.858565, 2.347198),
			mapTypeId: google.maps.MapTypeId.ROADMAP
			});   
		}
		var maVar1 = '<?php echo $coords['lat']; ?>';			// On récupère la latitude et on la met dans une variable
		var maVar2 = '<?php echo $coords['lon']; ?>';			// On récupère la longitude et on la met dans une variable
		if (navigator.geolocation)
			var watchId = navigator.geolocation.watchPosition(successCallback, null, {enableHighAccuracy:true});
		else
			alert("Votre navigateur ne prend pas en compte la géolocalisation HTML5");
 
		function successCallback(position){
			map.panTo(new google.maps.LatLng(position.coords.latitude, position.coords.longitude));
 
			var marker = new google.maps.Marker({						// Marker avec notre position via @IP
				position: new google.maps.LatLng(position.coords.latitude, position.coords.longitude), 
				// 43.2476341	5.3917355
				map: map
			});
 
			// Postion utilisateur
			var longit = marker.position.bk;
			var latit = marker.position.lk;
 
			var marker2 = new google.maps.Marker({						// Marker chez Maman pour test (Chateauroux)
				position: new google.maps.LatLng(46.80634, 1.63546),
				map: map
			 });
 
			var marker3 = new google.maps.Marker({						// Marker prenant en argument les variables de latitude et longitude précédents (Paris)
				position: new google.maps.LatLng(maVar1, maVar2),
				map: map
			});
 
			// Marqueur Objets
			<?php
				$j = 10;
				if(isset($positionObjets) && !empty($positionObjets)) {
					for($i=0; $i<count($positionObjets); $i++) {
						//echo '<pre>'; print_r($positionObjets[$i]); echo '</pre>';
						print "var marker" . $j . " = new google.maps.Marker({"
							. "position: new google.maps.LatLng(" . $positionObjets[$i]['position']['lat'] . ", " . $positionObjets[$i]['position']['lon'] . "),"
							. "map: map
						});";
						$j++;
					}				
				}
			?>
 
			var iw = new google.maps.InfoWindow({
				content: "Vous êtes ici"
			});
 
			var iw2 = new google.maps.InfoWindow({
				content: "Le produit A"
			});
 
			google.maps.event.addListener(marker, "click", function (e) { iw.open(map, marker); });
			google.maps.event.addListener(marker2, "click", function (e) { iw2.open(map, marker2); });
		};
		// Distance entre marker et marker 3 : 43.72 kms
		// Distance entre marker et marker 2 : 493.563 kms
		//http://www.lexilogos.com/calcul_distances.htm
		// <a href="http://stevemorse.org/jcal/latlon.php" target="_blank">http://stevemorse.org/jcal/latlon.php</a>
	</script> 
	</div>
 
	</body>
	</html>