LBS应用中的地理距离搜索

LBS应用中的地理距离搜索 

 

1 地理距离 

详见"球面距离"  和 “球面距离公式”

http://baike.baidu.com/view/1013440.htm

http://baike.baidu.com/view/2450564.htm

 

 

2 MongoDB 的 Geospatial Indexing 

http://www.mongodb.org/display/DOCS/Geospatial+Indexing

 

3 MySQL 的 Geo Distance Search with MySQL Presentation 

http://wenku.baidu.com/view/03919dcca1c7aa00b52acbf7.html

 

 

上述3来自MySQL AB 2006 年的PPT,节选下其中的图表,mysql中几种方案的性能对比:

 


LBS应用中的地理距离搜索

 

 

实践中以上都不算是比较好的方式,因为我们不太可能让一个业务功能要依赖于底层的某个具体服务。

 

实践中的做法:

 

1. 保存所有用户上传的GPS信息(lon,lat)

2. 搜索附近的人或商家,或者搜索某个范围内的人或商家时,先用 abs(lon-lon1) , abs(lat-lat1) 锁定一个大概范围,比如阀值取为1或者0.01等,具体根据业务需求和数据密度;

3. 再锁定的大概范围内,再进行粗排序或分组分级;

4. 然后根据具体业务需求进行两两距离计算和精确排序 。

你可能感兴趣的:(mongodb,mysql,LBS,geo,球面距离公式)