计算SQL Server中两个纬度/经度坐标之间的距离
创建一个SQL函数,以英里或公里为单位计算纬度/经度坐标之间的距离
语境
计算两个地方之间的距离可能非常棘手,那里有一些不错的文章,但是此页面仅会涉及代码。
有关如何在球体上计算距离的更多信息,请参阅Wikipedia上的Haversine公式,它有点复杂,因此我们不想重复其中的内容。
我们在网上找到了一些这样的代码,并已将其改编为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