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