SQLServerで2つの緯度/経度座標間の距離を計算します
緯度/経度の座標間の距離をマイルまたはキロメートルで計算するSQL関数を作成します
環境
2つの場所の間の距離を計算するのは非常に難しい場合があります。そこにはいくつかの優れた記事がありますが、このページではコードについてのみ説明します。
球上での距離の計算方法の詳細については、 ウィキペディアのHaversine Formulaを参照してください。少し複雑なので、コンテンツを複製したくありません。
このコードの一部をオンラインで見つけ、マイルまたはキロメートルを要求する機能を備えたSQL関数に適合させました。
これは「カラスが飛ぶように」を計算するだけですが、iPhoneで構築したアプリの一部としてテストされ、距離は正確でした。
SQL Server
CREATE FUNCTION CoordinateDistanceMiles(@Latitude1 float,@Longitude1 float,@Latitude2 float,@Longitude2 float,@Distance NVARCHAR(10))RETURNS FLOATAS BEGIN-- CONSTANTSDECLARE @EarthRadiusInMiles FLOAT=(CASE @Distance WHEN 'Miles' THEN 3959 WHEN 'Kilometers' THEN 6371 ELSE 0 END);DECLARE @PI FLOAT=PI();DECLARE @lat1Radians FLOAT=@Latitude1 * @PI / 180DECLARE @long1Radians FLOAT=@Longitude1 * @PI / 180;DECLARE @lat2Radians FLOAT=@Latitude2 * @PI / 180;DECLARE @long2Radians FLOAT=@Longitude2 * @PI / 180;RETURN Acos(Cos(@lat1Radians)*Cos(@long1Radians)*Cos(@lat2Radians)*Cos(@long2Radians)+Cos(@lat1Radians)*Sin(@long1Radians)*Cos(@lat2Radians)*Sin(@long2Radians)+Sin(@lat1Radians)*Sin(@lat2Radians)) * @EarthRadiusInMiles;END