mysql stdistance_计算两点之间的距离(纬度,经度)

下面的函数给出两个地理坐标之间的距离(以英里为单位)

create function [dbo].[fnCalcDistanceMiles] (@Lat1 decimal(8,4), @Long1 decimal(8,4), @Lat2 decimal(8,4), @Long2 decimal(8,4))

returns decimal (8,4) as

begin

declare @d decimal(28,10)

-- Convert to radians

set @Lat1 = @Lat1 / 57.2958

set @Long1 = @Long1 / 57.2958

set @Lat2 = @Lat2 / 57.2958

set @Long2 = @Long2 / 57.2958

-- Calc distance

set @d = (Sin(@Lat1) * Sin(@Lat2)) + (Cos(@Lat1) * Cos(@Lat2) * Cos(@Long2 - @Long1))

-- Convert to miles

if @d <> 0

begin

set @d = 3958.75 * Atan(Sqrt(1 - power(@d, 2)) / @d);

end

return @d

end

下面的函数给出了两个地理坐标之间的距离(以千米为单位)

CREATE FUNCTION dbo.fnCalcDistanceKM(@lat1 FLOAT, @lat2 FLOAT, @lon1 FLOAT, @lon2 FLOAT)

RETURNS FLOAT

AS

BEGIN

RETURN ACOS(SIN(PI()*@lat1/180.0)*SIN(PI()*@lat2/180.0)+COS(PI()*@lat1/180.0)*COS(PI()*@lat2/180.0)*COS(PI()*@lon2/180.0-PI()*@lon1/180.0))*6371

END

下面的函数 使用sql server 2008中引入的Geography数据类型,以公里为单位给出两个地理坐标之间的距离

DECLARE @g geography;

DECLARE @h geography;

SET @g = geography::STGeomFromText('LINESTRING(-122.360 47.656, -122.343 47.656)', 4326);

SET @h = geography::STGeomFromText('POINT(-122.34900 47.65100)', 4326);

SELECT @g.STDistance(@h);

用法:

select [dbo].[fnCalcDistanceKM](13.077085,80.262675,13.065701,80.258916)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值