利用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


基于上述函数,我们就可以简单的实现经纬度之间的距离计算,例如:

```sql
SELECT 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可以非常方便地实现经纬度距离的计算。不仅节省了学习成本,而且可以迅速地实现经纬度距离的计算。

数据运维技术 » 利用MSSQL快速批量计算经纬度(mssql批量计算经纬度)