Aangezien je SQL Server 2008 gebruikt, heb je de geography
gegevenstype beschikbaar, dat is ontworpen voor precies dit soort gegevens:
DECLARE @source geography = 'POINT(0 51.5)'
DECLARE @target geography = 'POINT(-3 56)'
SELECT @source.STDistance(@target)
Geeft
----------------------
538404.100197555
(1 row(s) affected)
Om ons te vertellen dat het ongeveer 538 km is van (nabij) Londen naar (nabij) Edinburgh.
Natuurlijk zal er eerst wat moeten worden geleerd, maar als je het eenmaal weet, is het veel gemakkelijker dan je eigen Haversine-berekening te implementeren; plus je krijgt VEEL functionaliteit.
Als u uw bestaande gegevensstructuur wilt behouden, kunt u nog steeds STDistance
. gebruiken , door geschikte geography
. te construeren instanties met behulp van de Point
methode:
DECLARE @orig_lat DECIMAL(12, 9)
DECLARE @orig_lng DECIMAL(12, 9)
SET @orig_lat=53.381538 set @orig_lng=-1.463526
DECLARE @orig geography = geography::Point(@orig_lat, @orig_lng, 4326);
SELECT *,
@orig.STDistance(geography::Point(dest.Latitude, dest.Longitude, 4326))
AS distance
--INTO #includeDistances
FROM #orig dest