使用场景
项目中,经常遇到定位问题,
例如,距离我最近的门店!
我到两家店距离分别是多少?
想必大家偶尔会遇到!那么如何简单高效的解决呢,请看接下来的表演!
解决方案
可能有人使用圆周率,我早就忘了,所以我决定使用坐标和三角函数,初中学的知识,终于能用上啦
思路
使用坐标的原因有两个,
1它可以模拟经纬度,其实经纬度就是坐标点
2他可以确定,在与x轴或y轴平行的两点间的距离
使用三角形的原因
直角三角形,知道两条直角边,可计算出斜边的长度
综合
我就不说了,看图也能知道,c就是我们两点间的距离,
设一个是定位点,一个是目标点,c就是两点间的距离,
刚好由于坐标的作用,a和b两条边的长度会加减法就能算出来,
再使用三角函数就能算出c边的长度啦!
计算公式我就用这张图,勉强看下吧,反正最后是套用最后的公式!
开始表演
– 场景
真实业务场景,我位置在中冶祥腾购物商场,我距离南翔地铁站,与南翔家乐福,距离分别是多少
31.2971446391,121.3234376907 -- 南翔地铁站
31.2989781465,121.3255405426 -- 南翔家乐福
31.2955677941,121.3221502304 -- 当前位置(中冶祥腾购物)
– 表
CREATE TABLE store
(
id
int(8) NOT NULL AUTO_INCREMENT,
name
varchar(10) DEFAULT NULL,
longitude
double DEFAULT NULL,
latitude
double DEFAULT NULL,
PRIMARY KEY (id
)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
– 数据
– 查询
– 按照三角函数公式
SELECT id,`name`,CEILING(SQRT(((longitude-31.2955677941)*(longitude-31.2955677941))+((latitude-121.3221502304)*(latitude-121.3221502304)))*100000) AS 距离我__m FROM store;
– 使用mysql平方函数,开根号函数
– 公式:
SELECT id,`name`,CEILING(SQRT(POWER(存入的经度-输入的经度,2)+POWER(存入的维度-输入的维度,2))*100000) 距离我__m FROM c_store;
– 测试公式:
SELECT id,`name`,CEILING(SQRT(POWER(longitude-31.2955677941,2)+POWER(latitude-121.3221502304,2))*100000) AS 距离我__m FROM store;
– 测试结果: 明显我距离地铁站比较近,距离家乐福比较远,测试正确,距离差不多