[Google Maps API] - Calculer une distance à vol d'oiseau

WRInaute discret
Bonjour,

Voici un petit Javascript qui vous permettra de calculer une distance entre deux GPoint(). Très utile quand on souhaite n'afficher que les markers dans un rayon de X km.

Code:
function LatLong(degLat, degLong) {
	  this.lat = LatLong.llToRad(degLat);
	  this.lon = LatLong.llToRad(degLong);
	} 	 
	
	LatLong.llToRad = function(brng) {
	  if (!isNaN(brng)) return brng * Math.PI / 180;  
	
	  brng = brng.replace(/[\s]*$/,'');               
	  var dir = brng.slice(-1).toUpperCase();         
	  if (!/[NSEW]/.test(dir)) return NaN;            
	  brng = brng.slice(0,-1);                       
	  var dms = brng.split(/[\s:,°º′\'″\"]/);         
	  switch (dms.length) {                           
	    case 3:                                       
	      var deg = dms[0]/1 + dms[1]/60 + dms[2]/3600; break;
	    case 2:                                       
	      var deg = dms[0]/1 + dms[1]/60; break;
	    case 1:                                       
	      if (/[NS]/.test(dir)) brng = '0' + brng;    
	      var deg = brng.slice(0,3)/1 + brng.slice(3,5)/60 + brng.slice(5)/3600; break;
	    default: return NaN;
	  }
	  if (/[WS]/.test(dir)) deg = -deg;               
	  return deg * Math.PI / 180;                     
	}
	
	LatLong.distHaversine = function(p1, p2) {
	  var R = 6371; 
	  var dLat  = p2.lat - p1.lat;
	  var dLong = p2.lon - p1.lon;

	  var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
	          Math.cos(p1.lat) * Math.cos(p2.lat) * Math.sin(dLong/2) * Math.sin(dLong/2);
	  var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
	  var d = R * c;
	
	  return d;
	}

Exemple :
Code:
  startPoint = new LatLong(lat, lng);
  endPoint = new LatLong(lat, lng);
  var dist = LatLong.distHaversine(startPoint, endPoint); // exprimé en Km.

Bonne continuation...
 
Nouveau WRInaute
Alors ok ce script il déchire, ca marche nikel.

Par contre je suis dans l'obligation de le retranscrire en PHP pour une appli d'un client. Le seul truc qui me dérange c'est je ne comprend absolument la syntaxe ' /[NSEW]/.test(dir) '. Pareil pour ' /[NS]/.test(dir) ' et ' /[WS]/.test(dir) '.

C'est quoi de ce NSEW, les directions Nord Sud etc... si c'est le cas est ce que quelqu'un pourrait me filer un lien vers une explication de ca ou encore mieux l'equivalent en PHP.

Merci d'avance les geek ;)
 
Discussions similaires
Haut