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

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

1,如何获取位置

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

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

2,数据表设计

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

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

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

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

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

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

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

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

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

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

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语句是这样的:

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 mysql_使用mysql来实现lbs排序相关推荐

  1. geohash mysql_基于MySQL实现按距离排序、范围查找geoHash

    简介现在几乎所有的O2O应用中都会存在"按范围搜素.离我最近.显示距离"等等类似的功能,那这样的功能是怎么实现的呢?本文提供了基于MySQL的实现方式,同样适用于其它数据库.本文不 ...

  2. mysql 5.7 lbs_使用mysql来实现lbs(地理位置服务)功能

    现在大型的网站实现的lbs服务基本上是用mongodb的实现定位的(gps不太清楚).对于小的应用来说,有些大材小用了,而且还大大增加了维护成本.这里用mysql来实现lbs的功能. 数据库设计层面, ...

  3. MySQL优化篇:排序分组优化

    文章目录 1.order by关键字排序优化 1.1 无过滤不索引 1.2 顺序错,必排序 1.3 方向反,必排序 1.4 索引的选择 1.5 using filesort 1.6 使用覆盖索引 1. ...

  4. Mysql 数据库重置ID排序

    本文仅供学习交流使用,如侵立删!demo下载见文末 Mysql 数据库重置ID排序 //删除QRcode表id字段 alter table QRcode drop id; //添加id字段,自增长 a ...

  5. MySQL中实现分组排序

    这几天在项目开发中需要用SQL实现数据的分组排序,以前在oracle的存储过程开发中用过rank函数可以很方便的实现,但是现在在MySQL中是没有类似的,经过上网搜索资料现将MySQL中的数据排序和分 ...

  6. mysql order by 中文 排序

    mysql order by 中文 排序 1. 在MySQL中,我们经常会对一个字段进行排序查询,但进行中文排序和查找的时候,对汉字的排序和查找结果往往都是错误的. 这种情况在MySQL的很多版本中都 ...

  7. mysql中两次排序_MySQL中的两种排序方式: index和filesort

    index :通过有序索引顺序扫描直接返回有序数据,不需要额外的排序,操作效率较高. filesort:通过对返回数据进行排序,filesort 并不代表通过磁盘文件排序,而是说明进行了一个排序操作, ...

  8. mysql默认字符集和排序_MySQL字符集和排序规则

    MySQL在创建数据库是,需要设置数据库的字符集和排序规则,如图所示: 我觉得这里有必要解释下字符集和排序规则这两个概念. 字符集 说到字符集,需要先提下字符.字符集和字符编码这几个词的含义. 字符( ...

  9. mysql 自然排序_如何在mysql中实现自然排序

    背景 熟悉mysql的同学应该清楚,mysql在对字符串做order by排序时是按照字典序进行排序的,但是如果字符串中包含数字的话(我们称这种类型的字符串为alphanumeric),仅按照字典序的 ...

  10. Mysql Order By 字符串排序,mysql 字符串order by

    Mysql Order By 字符串排序,mysql 字符串order by ============================== ©Copyright 蕃薯耀 2017年9月30日 http ...

最新文章

  1. oracle数据库集群日志,Oracle集群数据库中恢复归档日志
  2. 将当前的head推送到远程_Git 通俗易懂系列 三、远程仓库和标签
  3. ajax 用户验证js,js ajax验证用户名
  4. Bitmap-把方形图片处理为圆形
  5. 数学建模算法与应用习题1-3 解析 MATLAB 整数规划
  6. 上采样、下采样到底是什么?
  7. 工控安全入门常用逻辑编程
  8. 从C++11到C++23(一) C++20圆周率、常数e和常见对数
  9. win10查询计算机显卡,windows10系统电脑查看显卡型号的两种方法
  10. 递归回溯生成和解决数独问题c/c++
  11. 尽量使用unity引擎的Random随机数
  12. Laravel 速查表 Cache
  13. 墙裂推荐!B站上的Python学习资源
  14. 常见的浏览器内核有哪些?
  15. redhat 7配置ftp server
  16. Linux | crontab定时任务及开机自启项
  17. 计算机名有重名,导致的问题
  18. 产品负责人(Product Owner)的主要职责和技能
  19. 计算机二级自学考试,关于全国计算机等级考试(NCRE)与高等教育自学考试课程衔接的通知...
  20. leetcode 2022.04.10 招商银行专场竞赛 D.商店促销活动(dp)

热门文章

  1. 设置bing为chrome的默认搜索引擎
  2. 怎样把音频文件转换成mp3格式?
  3. gin框架自带的一些的鉴定权限机制 session cookie
  4. 致加西亚的信 谁动了我的奶酪
  5. RMS数据采集分布式架构
  6. 程序员的薪资真有那么高吗
  7. java 判断是否为英文字母_java 如何判断是否是26个英文字母
  8. 计算机桌面图标右上角出现双箭头符号,电脑桌面上的图标有小箭头怎么清除?...
  9. excel多个工作表合并在一个表
  10. 合并excel多个工作表