J'ai passé quelques jours à essayer de comprendre celui-ci semble et ne peut pas d'identifier les problèmes. J'ai une base de données SQL 2005 stockant la latitude et la longitude comme Decimal (18,8), dont j'ai reçu en interrogeant Google.Distance entre deux emplacements à l'aide chemin Latitude et Longitude de ce que Google dit
Pour ces deux endroits: From: 10715 Downsville Pike Ste 100 MD 21740 to: 444 East College Ave Ste 120 State College PA, 16801
Compte tenu de cette distance sera « à vol d'oiseau », mes résultats sont encore loin. Dans cet exemple, mon résultat indique 21,32 miles, mais Google Maps dit 144 miles.
Je pense que le nappage qui le rend encore plus frustrant que je trouve ce site est: http://jan.ucc.nau.edu/~cvm/latlongdist.html et est venu avec presque exactement les mêmes résultats que moi.
Voilà mes fonctions et requête:
Fonctions: CalculateDistance
DECLARE @Temp FLOAT
SET @Temp = SIN(@Latitude1/57.2957795130823) *
SIN(@Latitude2/57.2957795130823) +
COS(@Latitude1/57.2957795130823) * COS(@Latitude2/57.2957795130823) *
COS(@Longitude2/57.2957795130823 - @Longitude1/57.2957795130823)
IF @Temp > 1
SET @Temp = 1
ELSE IF @Temp < -1
SET @Temp = -1
RETURN (3958.75586574 * ACOS(@Temp))
LatitudePlusDistance
RETURN (SELECT @StartLatitude + SQRT(@Distance * @Distance/4766.8999155991))
LongitudePlusDistance
RETURN (SELECT @StartLongitude + SQRT(@Distance * @Distance/
(4784.39411916406 *
COS(2 * @StartLatitude/114.591559026165) *
COS(2 * @StartLatitude/114.591559026165))))
Requête:
DECLARE @Longitude DECIMAL(18,8),
@Latitude DECIMAL(18,8),
@MinLongitude DECIMAL(18,8),
@MaxLongitude DECIMAL(18,8),
@MinLatitude DECIMAL(18,8),
@MaxLatitude DECIMAL(18,8),
@WithinMiles DECIMAL(2)
Set @Latitude = -77.856052
Set @Longitude = 40.799159
Set @WithinMiles = 50
-- Calculate the Max Lat/Long
SELECT @MaxLongitude = dbo.LongitudePlusDistance(@Longitude, @Latitude,
@WithinMiles),
@MaxLatitude = dbo.LatitudePlusDistance(@Latitude, @WithinMiles)
-- Calculate the min lat/long
SELECT @MinLatitude = 2 * @Latitude - @MaxLatitude,
@MinLongitude = 2 * @Longitude - @MaxLongitude
SELECT Top 20 *, dbo.CalculateDistance(@Longitude, @Latitude,
LocationLongitude, LocationLatitude) as 'Distance'
FROM Location
WHERE LocationLongitude Between @MinLongitude And @MaxLongitude
And LocationLatitude Between @MinLatitude And @MaxLatitude
And dbo.CalculateDistance(@Longitude, @Latitude, LocationLongitude,
LocationLatitude) <= @WithinMiles
ORDER BY dbo.CalculateDistance(@Longitude, @Latitude, LocationLongitude,
LocationLatitude)
L'autre site vous est lié à partir de 1997, lorsque la Terre était beaucoup plus petite que ce qu'elle est aujourd'hui (en raison de la force centrifuge). J'irais avec Google sur celui-ci. :) – MusiGenesis
Oui oui, le monde était beaucoup plus petit avant Google. Mais cela ne m'aide pas à arriver à la bonne distance. – Mikecancook
J'ai trouvé un autre site pour calculer les résultats et c'est la même chose que j'ai eu, 21 miles et quelques changements. http://www.movable-type.co.uk/scripts/latlong.html essayer ces lieux: latitude/longitude 40,799159, -77,856052 40,22018, -78,140205 – Mikecancook