一 使用场景

目前基于某个位置查附近的人,附近的商家等等,查出来的结果添加距离,或者查附近多大范围内的人或者商家,然后按距离排序已经是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(


2066

被折叠的 条评论
为什么被折叠?



