2009-02-03 14 views

Répondre

7

Ce que vous recherchez est le Haversine formula. Vous n'avez pas besoin de Google Maps pour cela, vous pouvez le faire séparément. Il y a un script pour le faire (en JavaScript) here.

2

Non, mais vous pouvez utiliser la formule de Vincenty, qui modélise la forme de la Terre. Il est disponible en Javascript here.

Un assez facile à analyser la page Web est (par exemple): http://boulter.com/gps/distance/?from=51.5329855+-0.1303506&to=40.757584+-73.985642&units=m

Pour les personnes qui veulent seulement une mesure rapide de la distance, consultez this gadget. Cependant, il utilise uniquement le calcul du grand cercle.


Comme le fait remarquer Rob, Google ont ajouté, mais ils utilisent encore que la formule du grand cercle, qui peut être inexact par 1/300.

3

Oui Google peut faire

google api docs

est ici un morceau de script java qui s'est la distance en kms pour deux points

 
function initialize() { 
     if (GBrowserIsCompatible()) { 
      map = new GMap2(document.getElementById("map_canvas")); 
      map.setCenter(new GLatLng(52.6345701, -1.1294433), 13); 
      map.addControl(new GLargeMapControl());   
      map.addControl(new GMapTypeControl()); 
      geocoder = new GClientGeocoder(); 

      // NR14 7PZ 
      var loc1 = new GLatLng(52.5773139, 1.3712427); 
      // NR32 1TB 
      var loc2 = new GLatLng(52.4788314, 1.7577444);   
      alert(loc2.distanceFrom(loc1)/1000); 
     } 
    } 

3

et la distance cal en C#:

// this returns the distance in miles. for km multiply result: * 1.609344 
public static double CalculateDistance(double lat1, double lon1, double lat2, double lon2) 
{ 
    double t = lon1 - lon2; 
    double distance = Math.Sin(Degree2Radius(lat1)) * Math.Sin(Degree2Radius(lat2)) + Math.Cos(Degree2Radius(lat1)) * Math.Cos(Degree2Radius(lat2)) * Math.Cos(Degree2Radius(t)); 
    distance = Math.Acos(distance); 
    distance = Radius2Degree(distance); 
    distance = distance * 60 * 1.1515; 

    return distance; 
} 

private static double Degree2Radius(double deg) 
{ 
    return (deg * Math.PI/180.0); 
} 

private static double Radius2Degree(double rad) 
{ 
    return rad/Math.PI * 180.0; 
} 
0

Si vous voulez juste obtenir la distance en nombre, essayez chose comme ça.

function InitDistances() { 
    var startLocation = new GLatLng(startLat, startLon); 
    var endLocation = new GLatLng(endLat, endLon); 
    var dist = startLocation .distanceFrom(endLocation); 

    // Convert distance to miles with two decimal points precision 
    return (dist/1609.344).toFixed(2); 
} 
10

Si vous cherchez à utiliser l'API de cartes v3 Google, voici une fonction que j'utilise: Note: vous devez ajouter &libraries=geometry à votre source de script

<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false&libraries=geometry"></script> 

maintenant la fonction:

//calculates distance between two points in km's 
function calcDistance(p1, p2){ 
    return (google.maps.geometry.spherical.computeDistanceBetween(p1, p2)/1000).toFixed(2); 
} 
+0

Je veux la distance de la route pas la distance géométrique? – codepk