利用MSSQL快速批量计算经纬度(mssql批量计算经纬度)
距离
距离计算有许多应用场景,下面将介绍如何利用MSSQL数据库快速批量计算经纬度距离,要实现这一目的,首先需要用到 MSSQL函数,如下代码:
“`sql
CREATE FUNCTION dbo.getdistance
(@lat1 FLOAT, @long1 FLOAT, @lat2 FLOAT, @long2 FLOAT)
RETURNS FLOAT
AS
BEGIN
RETURN round(((acos(sin( (@lat1 * pi() / 180.0))
* sin((@lat2 * pi() / 180.0))
+ cos((@lat1 * pi() / 180.0))
* cos((@lat2 * pi() / 180.0))
* cos((@long2 * pi() / 180.0 – @long1 * pi() / 180.0)))) * 180.0/PI()) * 60 * 1.1507, 2)
END
基于上述函数,我们就可以简单的实现经纬度之间的距离计算,例如:
```sqlSELECT SOURCE.*, DESTINATION.*,
dbo.getdistance(SOURCE.LatVALUE, SOURCE.LongVALUE, DESTINATION.LatVALUE, DESTINATION.LongVALUE)FROM SOURCETABLE SOURCE, DESTINATIONTABLE DESTINATION
上述代码可以将两个表的经纬度之间的距离计算出来。
MSSQL也可以支持空间索引,但是由于精度问题,它不能支持确切的距离查询,这也就是前面介绍的函数出现的原因。它可以简单计算出经纬度之间的距离,减少开发和运维的工作量,比如客户端开发者可以使用这个函数来实现客户端搜索功能。
此外,在实际应用场景中,也可以使用存储过程来实现距离的快速计算,例如:
“`sql
CREATE PROCEDURE LearnMSSQL.calcDistance
@lat1 FLOAT, @long1 FLOAT, @lat2 FLOAT, @long2 FLOAT
AS
BEGIN
SELECT @distn = round(((acos(sin( @lat1 * pi() / 180.0)) * sin(@lat2 * pi() / 180.0)
+ cos(@lat1 * pi() / 180.0) * cos(@lat2 * pi() / 180.0)
* cos(@long2 * pi() / 180.0 – @long1 * pi() / 180.0)) ) * 180.0/PI() * 60 * 1.1507, 2)
SELECT @distn AS ‘Distance(in Miles)’
END
上述的代码实现了一个计算经纬度距离的存储过程,可以节省大量学习成本。因此,利用MSSQL可以非常方便地实现经纬度距离的计算。不仅节省了学习成本,而且可以迅速地实现经纬度距离的计算。