from:http://www.cnblogs.com/jifeng/p/4356006.html
Nosql学习之Redis资料(一)

http://redis.io/download

目前基于LBS地理位置的搜索已经应用非常广了,的确是个很方便的东西。

我们做程序的就是要考虑如何通过这些功能,来做出更符合用户的内容来。

1,如何获取位置

例如微信,可以通过发送地理位置来获取到当前用户的经纬度。查看

在网页端,可以使用html5获取地理定位。查看

2,数据表设计

数据库中要预存自己的位置数据,如何获取数据请查看相关地图api。

字段:十进制数的纬度 latitude FLOAT(10,6) 十进制数的经度 longitude FLOAT(10,6)

假设我们数据库中已经存储大量酒店的位置信息

3,根据用户位置查询附近

如上图,假设当前用户所在的位置为坐标O,那么我们要查询附近的酒店,理想的范围应该是以O为原点的圆内,但是我们先不这样做,后面会讲到。

我们先以O为原点,在坐标上以0.3的差值标识了4个位置,其实这样就是一个正方形范围,大致应该符合我们的要求。

那么我们就要从数据库中查询范围在这个正方形之内的所有酒店了。

一,获取到用户的经纬度坐标:

1
$latitude;$longitude

  

二,定义一个差值,设置经度和纬度的范围:

1
2
3
4
5
$i = 0.3; //差值可自定义,值越大,范围就越大
$min_latitude = $latitude - $i; //纬度最小值
$max_latitude = $latitude + $i; //纬度最大值
$min_longitude = $longitude - $i; //经度最小值
$max_longitude = $longitude + $i; //经度最大值

  

三,数据库中查询在这个范围之内的酒店:

1
SELECT * FROM table WHERE (latitude BETWEEN $min_latitude AND $max_latitude) AND (longitude BETWEEN $min_longitude AND $max_longitude);

  

这样我们的附近搜索基本完成了

四,以地理位置由远及近的排序:

如果我们要筛选出最近的10个的话,用上面的语句来查询,可能会把稍远的先查出来,后面的就没有机会了,那么我们得做个排序了。

如上图,如果我们要获取E位置和F位置分别距离O点的长度,那么我们就需要计算OE和OF的长度分别为多少,这里我们要用到直角三角形的数学公式:C^2 = A^2 + B^2,知道A和B,那么C的值也就得到了。

注意:请首先在表中建立一个字段d,以作后面缓存距离使用,否则会报错

我们可以根据经纬度的差分别来获取到A和B的值,SQL语句是这样的:

1
SELECT *,SQRT(POWER($latitude - latitude, 2) + POWER($longitude  - longitude, 2)) AS d FROM table WHERE (latitude BETWEEN $min_latitude AND $max_latitude) AND (longitude BETWEEN $min_longitude AND $max_longitude) AND d < $i ORDER BY d ASC LIMIT 10;

  

SQRT(X):求X的平方根,POWER(X, Y):求X的Y次方

通过这样一步,我们的范围已经锁定在圆形之内了,并且按照由近及远的方式进行排序(在不考虑效率的情况下)。

基于LBS的地理位置附近的搜索以及由近及远的排序相关推荐

  1. mysql lbs_基于LBS的地理位置附近的搜索以及由近及远的排序(MYSQL)

    目前基于LBS地理位置的搜索已经应用非常广了,的确是个很方便的东西. 我们做程序的就是要考虑如何通过这些功能,来做出更符合用户的内容来. 1,如何获取位置 例如微信,可以通过发送地理位置来获取到当前用 ...

  2. 基于LBS的热点店铺搜索

    阿里云大学课程:基于LBS的热点店铺搜索 课程介绍 当我们打开手机地图搜索周边的美食.电影院.KTV等等,地图上会立刻显示出相关的地点推荐给我们,此功能是如何实现的呢?本认证课程内容就是指导用户如何来 ...

  3. 【LBS】移动互联网基于LBS地理位置应用开发必备

    原文:[LBS]移动互联网基于LBS地理位置应用开发必备 源代码下载地址:http://www.zuidaima.com/share/1694743146056704.htm 功能:计算两个点(经纬度 ...

  4. 基于LBS功能应用的Geohash方案

    随着移动终端的普及,很多应用都基于LBS功能,附近的某某(餐馆.银行.妹纸等等). 基础数据中,一般保存了目标位置的经纬度:利用用户提供的经纬度,进行对比,从而获得是否在附近. 目标: 查找附近的某某 ...

  5. 基于LBS的地图社交软件的探索

    我开始的时候,是和室友幻想打算做一款手机地图和现实互动相结合的现实版LOL~~不过幻想归幻想,我们把这个幻想的一种简单变种--基于地图的社交拿出来研究.于是就有了"图乐"最初的想法 ...

  6. 基于商品包含关系的飞猪搜索优化实践

    今天给大家分享阿里巴巴集团黄仔所做的分享<基于商品包含关系的飞猪搜索排序优化.pdf>,本次分享主要介绍了商品包含关系在飞猪搜索排序的重要性及挑战,针对存在的挑战提出了一个新的DIRN模型 ...

  7. 基于Java的地理位置定位系统

    资源下载地址:https://download.csdn.net/download/sheziqiong/86783248 资源下载地址:https://download.csdn.net/downl ...

  8. 最新基于LBS的毕业设计题目

    基于LBS的毕业设计题目1-10题 1.基于LBS轨迹的出行活动链模式识别研究 2.基于LBS的移动环境中POI推送方法研究 3.基于LBS的任务式旅游App的设计与实现 4.基于LBS的货运信息服务 ...

  9. 基于指标选择的多目标搜索(IBEA)

    基于指标选择的多目标搜索(IBEA) 摘要:这篇文章讨论了决策者的偏好信息通常是如何能整合到多目标搜索中的.主要的思想是:首先是用二元性能指标的形式定义最优目标,然后在选择过程中直接使用这个指标.鉴于 ...

最新文章

  1. Python学习教程(Python学习路线):Python面试100题(二)
  2. 【 Linux 】安装、配置并用 Vim 编写第一个 C 程序
  3. phpmyadmin 解压首次无法登陆问题
  4. tf.train.exponential_decay
  5. C++类内存分布——深度理解继承与虚函数
  6. HTML css嵌套的一个例子
  7. linux硬盘转windows7,记——第一次上手UEFI电脑,将mbr硬盘的Windows7和Linux转为gpt+uefi启动...
  8. 云南计算机专业知识真题,2014年云南省事业单位考试专计算机专业知识模拟真题.doc...
  9. spring历史背景
  10. 【SAS NOTE】数组
  11. xadmin在Django 1.11中的使用及中英文切换
  12. Gitweb源码解析
  13. .net core2 发送电子邮件封装
  14. 浏览器中加载CNN进行手写数字识别,并部署到Gitee Page
  15. 表单构建html的页面代码,网页设计表单制作代码 制作一个很简单网页表单代码...
  16. swin transformer解读
  17. yarn : 无法加载文件 D:\nodejs\node_global\yarn.ps1,因为在此系统上禁止运行脚本。
  18. 技术的理想该继续吗?
  19. R语言第十讲 逻辑斯蒂回归
  20. mysql数据库备份策略及应用场景

热门文章

  1. Ubuntu 下Mysql常用命令
  2. 让你的VB6.0支持滚轮操作
  3. java注解详解_Java注解详解
  4. 【CCIE学习干货】LDP:标签的那些事儿
  5. 解决pip安装时,下载速度慢的问题
  6. 关于const 修饰的一些知识
  7. 大数据多属性的数据架构设计
  8. Node.js 官方Path模块简介
  9. 第一次来请大家多多关照---毕业生找工作篇
  10. python-子类和派生、继承