距离计算&&范围查找&&距离排序

一 使用场景     

 目前基于某个位置查附近的人,附近的商家等等,查出来的结果添加距离,或者查附近多大范围内的人或者商家,然后按距离排序已经是IT界一个很通用的功能了。

二 距离计算搜索(百万点集以下)

2.1 球的定义

2.2 两点之间距离计算

     

2.2.1两点间直线距离

    欧式距离计算法: 欧式距离(Euclidean Distance)是欧几里得空间中两点之间的直线距离,广泛应用于二维、三维及更高维度的空间计算12。其核心思想基于勾股定理,通过平方差的累加与平方根运算实现距离度量.

       

2.2.2余弦定理算球面距离
  • 球面距离

        

如果AOB三点共线的时候我们可能会有N个这样的圆,如果AOB三点不共线的时候我们要算的是劣圆弧长。弧度数的概念实际就是用弧长除以半径称作单位半径弧长。

2.2.2.1认识地球

      

 本初子午线以东叫东经,以西叫西经。赤道以北叫北纬,赤道以南叫南纬。

2.2.2.2 正余弦定理

        正弦定理

       

  • 余弦定理

       

2.2.2.3 同经度弧长计算

         

2.2.2.4 同维度弧长计算

           

2.2.2.5 经纬度都不同

          

   如上图所示,如何求出A1A2的弧长.也就是我们说的球面的劣弧距离。也就是我们地球上任何物体之间的球面距离。

          

 4)AB平方的求解过程

              

5)化解

               

2.2.3 Haversine模型算球面距离(哈弗赛)
2.2.4 Vincenty模型算球面距离

2.3 距离计算搜索落地

    现在几乎所有的O2O应用中都会存在“按范围搜素、离我最近、显示距离”等等基于位置的交互,那这样的功能是怎么实现的呢?本文提供的实现方式,适用于所有数据库。

为了方便下面说明,先给出一个初始表结构

CREATE TABLE `customer` (
    `id` INT(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值