编写一个sql server 2008的自定义函数,根据地图的两点经纬度坐标,计算两点间的实际物理距离并输出,要求以米为单位输出并精确到米,输出只需数值,无需长度单位。
时间: 2023-06-05 11:47:18 浏览: 146
可以使用以下SQL Server 2008自定义函数来计算两点间的实际物理距离(以米为单位):
CREATE FUNCTION dbo.CalculateDistance(@lat1 FLOAT, @lon1 FLOAT, @lat2 FLOAT, @lon2 FLOAT)
RETURNS FLOAT
AS
BEGIN
DECLARE @R FLOAT = 6371000; -- 地球半径,单位为米
DECLARE @dLat FLOAT = RADIANS(@lat2 - @lat1);
DECLARE @dLon FLOAT = RADIANS(@lon2 - @lon1);
DECLARE @a FLOAT = SIN(@dLat / 2) * SIN(@dLat / 2) + COS(RADIANS(@lat1)) * COS(RADIANS(@lat2)) * SIN(@dLon / 2) * SIN(@dLon / 2);
DECLARE @c FLOAT = 2 * ATN2(SQRT(@a), SQRT(1 - @a));
DECLARE @d FLOAT = @R * @c;
RETURN @d;
END
其中,@lat1和@lon1是第一个点的纬度和经度,@lat2和@lon2是第二个点的纬度和经度。函数返回两点间的实际物理距离,以米为单位,并精确到米。可以使用以下语句调用该函数:
SELECT dbo.CalculateDistance(39.9042, 116.4074, 31.2304, 121.4737);
该语句将返回北京和上海之间的实际物理距离,以米为单位。