SQL Server 2008を使用しているため、geography
があります。 まさにこの種のデータ用に設計された利用可能なデータ型:
DECLARE @source geography = 'POINT(0 51.5)'
DECLARE @target geography = 'POINT(-3 56)'
SELECT @source.STDistance(@target)
与える
----------------------
538404.100197555
(1 row(s) affected)
ロンドン(近く)からエジンバラ(近く)までは約538kmです。
当然、最初に行うべき学習はたくさんありますが、一度それを知ったら、独自のHaversine計算を実装するよりもはるかに簡単です。さらに、多くの機能を利用できます。
既存のデータ構造を保持したい場合でも、STDistance
を使用できます 、適切なgeography
を構築することによって Point
を使用するインスタンス 方法:
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