lbs mysql_使用mysql来实现lbs排序
目前基于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排序相关推荐
- geohash mysql_基于MySQL实现按距离排序、范围查找geoHash
简介现在几乎所有的O2O应用中都会存在"按范围搜素.离我最近.显示距离"等等类似的功能,那这样的功能是怎么实现的呢?本文提供了基于MySQL的实现方式,同样适用于其它数据库.本文不 ...
- mysql 5.7 lbs_使用mysql来实现lbs(地理位置服务)功能
现在大型的网站实现的lbs服务基本上是用mongodb的实现定位的(gps不太清楚).对于小的应用来说,有些大材小用了,而且还大大增加了维护成本.这里用mysql来实现lbs的功能. 数据库设计层面, ...
- MySQL优化篇:排序分组优化
文章目录 1.order by关键字排序优化 1.1 无过滤不索引 1.2 顺序错,必排序 1.3 方向反,必排序 1.4 索引的选择 1.5 using filesort 1.6 使用覆盖索引 1. ...
- Mysql 数据库重置ID排序
本文仅供学习交流使用,如侵立删!demo下载见文末 Mysql 数据库重置ID排序 //删除QRcode表id字段 alter table QRcode drop id; //添加id字段,自增长 a ...
- MySQL中实现分组排序
这几天在项目开发中需要用SQL实现数据的分组排序,以前在oracle的存储过程开发中用过rank函数可以很方便的实现,但是现在在MySQL中是没有类似的,经过上网搜索资料现将MySQL中的数据排序和分 ...
- mysql order by 中文 排序
mysql order by 中文 排序 1. 在MySQL中,我们经常会对一个字段进行排序查询,但进行中文排序和查找的时候,对汉字的排序和查找结果往往都是错误的. 这种情况在MySQL的很多版本中都 ...
- mysql中两次排序_MySQL中的两种排序方式: index和filesort
index :通过有序索引顺序扫描直接返回有序数据,不需要额外的排序,操作效率较高. filesort:通过对返回数据进行排序,filesort 并不代表通过磁盘文件排序,而是说明进行了一个排序操作, ...
- mysql默认字符集和排序_MySQL字符集和排序规则
MySQL在创建数据库是,需要设置数据库的字符集和排序规则,如图所示: 我觉得这里有必要解释下字符集和排序规则这两个概念. 字符集 说到字符集,需要先提下字符.字符集和字符编码这几个词的含义. 字符( ...
- mysql 自然排序_如何在mysql中实现自然排序
背景 熟悉mysql的同学应该清楚,mysql在对字符串做order by排序时是按照字典序进行排序的,但是如果字符串中包含数字的话(我们称这种类型的字符串为alphanumeric),仅按照字典序的 ...
- Mysql Order By 字符串排序,mysql 字符串order by
Mysql Order By 字符串排序,mysql 字符串order by ============================== ©Copyright 蕃薯耀 2017年9月30日 http ...
最新文章
- oracle数据库集群日志,Oracle集群数据库中恢复归档日志
- 将当前的head推送到远程_Git 通俗易懂系列 三、远程仓库和标签
- ajax 用户验证js,js ajax验证用户名
- Bitmap-把方形图片处理为圆形
- 数学建模算法与应用习题1-3 解析 MATLAB 整数规划
- 上采样、下采样到底是什么?
- 工控安全入门常用逻辑编程
- 从C++11到C++23(一) C++20圆周率、常数e和常见对数
- win10查询计算机显卡,windows10系统电脑查看显卡型号的两种方法
- 递归回溯生成和解决数独问题c/c++
- 尽量使用unity引擎的Random随机数
- Laravel 速查表 Cache
- 墙裂推荐!B站上的Python学习资源
- 常见的浏览器内核有哪些?
- redhat 7配置ftp server
- Linux | crontab定时任务及开机自启项
- 计算机名有重名,导致的问题
- 产品负责人(Product Owner)的主要职责和技能
- 计算机二级自学考试,关于全国计算机等级考试(NCRE)与高等教育自学考试课程衔接的通知...
- leetcode 2022.04.10 招商银行专场竞赛 D.商店促销活动(dp)