SQL 查询表中所有经纬度在一公里内的记录

方法1:计算目标是否在范围内,平均执行7500ms
DECLARE @GGP_LOCATE_POINT GEOGRAPHY = GEOGRAPHY::Point(31.358772277832,120.690238952637, 4326); 
DECLARE @buffer GEOGRAPHY;
set @buffer=@GGP_LOCATE_POINT.STBuffer(1000);
SELECT *  FROM table
WHERE
 @buffer.Filter(GEOGRAPHY::Point(31.358772277832,120.690238952637, 4326))<=1000
 
方法2:计算每个坐标的距离(圆),平均执行5500ms
DECLARE @GGP_LOCATE_POINT GEOGRAPHY = GEOGRAPHY::Point( 31.358772277832,120.690238952637, 4326); 
SELECT *  FROM table
WHERE
  @GGP_LOCATE_POINT.STDistance(GEOGRAPHY::Point(31.358772277832,120.690238952637, 4326))<=1000
  
方法3:按矩形算
优点:快,缺点:不是圆型的范围,平均执行150ms(推荐这个,比较快)

 DECLARE @GGP_LOCATE_POINT GEOGRAPHY = GEOGRAPHY::Point( 31.358772277832,120.690238952637, 4326); 
DECLARE @FLT_LONGITUDE   FLOAT,  @FLT_LATITUDE   FLOAT  --纬度
SELECT @FLT_LONGITUDE =120.690238952637, @FLT_LATITUDE =31.358772277832
SELECT @GGP_LOCATE_POINT.STDistance(GEOGRAPHY::Point(31.358772277832,120.690238952637, 4326)) as [验证距离], *  FROM taable
WHERE
 flat  BETWEEN @FLT_LATITUDE-0.010 AND @FLT_LATITUDE+0.010
AND flon BETWEEN @FLT_LONGITUDE-0.010 AND @FLT_LONGITUDE+0.010
   
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值