根据经纬度算距离 | SQL
时间:2021-07-01 10:21:17
帮助过:141人阅读
计算地球上两个坐标点(经度,纬度)之间距离sql函数
CREATE FUNCTION [dbo].
[fnGetDistance](
@LatBegin REAL,
@LngBegin REAL,
@LatEnd REAL,
@LngEnd REAL)
RETURNS FLOAT
AS
BEGIN
--距离(千米)
DECLARE @Distance REAL
DECLARE @EARTH_RADIUS REAL
SET @EARTH_RADIUS = 6378.137
DECLARE @RadLatBegin REAL,
@RadLatEnd REAL,
@RadLatDiff REAL,
@RadLngDiff REAL
SET @RadLatBegin = @LatBegin *PI()
/180.0
SET @RadLatEnd = @LatEnd *PI()
/180.0
SET @RadLatDiff = @RadLatBegin - @RadLatEnd
SET @RadLngDiff = @LngBegin *PI()
/180.0 - @LngEnd *PI()
/180.0
SET @Distance = 2 *ASIN(
SQRT(
POWER(
SIN(
@RadLatDiff/2),
2)
+COS(
@RadLatBegin)
*COS(
@RadLatEnd)
*POWER(
SIN(
@RadLngDiff/2),
2)))
SET @Distance = @Distance * @EARTH_RADIUS
--SET @Distance = Round(@Distance * 10000) / 10000
RETURN @Distance
END
/*
财富广场
经度:114.02644397853898
纬度:22.536917850961675
光大银行
经度:114.02633400796937
纬度:22.537137898472157
*/
SELECT id,name,dbo.fnGetDistance(
114.02633400796937,
22.537137898472157,gislng,gislat)
as 距离
FROM yx_nurse
SELECT dbo.fnGetDistance(
114.02633400796937,
22.537137898472157,gislng,gislat)
as 距离,yx_nurse.
* FROM yx_nurse
WHERE dbo.fnGetDistance(
114.02633400796937,
22.537137898472157,gislng,gislat)
< 0.100
根据经纬度算距离 | SQL
标签:银行 经纬度算距离 ret get radius gis oat asi sql