2009-10-08 8 views
0

J'ai le javascript qui renvoie la distance entre les 2 points (2 latitude & longitude sont les paramètres d'entrée) sur la carte google sur la base de la formule 'Haversine'.Est-ce que Calculatedistance javascript de google map exact?

Le résultat est-il précis? Cette distance est-elle calculée sur la base de la feuille de route ou est-ce simplement la distance courte entre 2 google point.

Répondre

1

Je pense que la formule de haversine ne prend pas le rayon de la terre dans le calcul. Par exemple, lorsque vous calculez la distance entre deux lat-long, vous devez également prendre en compte la courbure de la recherche (elle ne fera pas beaucoup de différence sur une petite distance mais fera une différence pour une distance longue).

vous pouvez faire varier en calculant la distance à l'aide de la formule Cercle grande distance (http://www.movable-type.co.uk/scripts/latlong.html).

Si vous utilisez SQL, vous pouvez utiliser la fonction suivante.

fUNCTION: F_GREAT_CIRCLE_DISTANCE 
Computes the Great Circle distance in kilometers 
between two points on the Earth using the 
Haversine formula distance calculation. 
Input Parameters: 
@Longitude1 - Longitude in degrees of point 1 
@Latitude1 - Latitude in degrees of point 1 
@Longitude2 - Longitude in degrees of point 2 
@Latitude2 - Latitude in degrees of point 2 


------------------------------------------------- 
create function [dbo].[F_GREAT_CIRCLE_DISTANCE] 
(
@Latitude1 float, 
@Longitude1 float, 
@Latitude2 float, 
@Longitude2 float 
) 
returns float 
as 

begin 
declare @radius float 

declare @lon1 float 
declare @lon2 float 
declare @lat1 float 
declare @lat2 float 

declare @a float 
declare @distance float 

-- Sets average radius of Earth in Kilometers 
set @radius = 6371.0E 

-- Convert degrees to radians 
set @lon1 = radians(@Longitude1) 
set @lon2 = radians(@Longitude2) 
set @lat1 = radians(@Latitude1) 
set @lat2 = radians(@Latitude2) 

set @a = sqrt(square(sin((@[email protected])/2.0E)) + 
(cos(@lat1) * cos(@lat2) * square(sin((@[email protected])/2.0E)))) 

set @distance = 
@radius * (2.0E *asin(case when 1.0E < @a then 1.0E else @a end)) 

return @distance 

end 
Questions connexes