【实战总结】根据地图经纬度及范围查询坐标点信息

使用地图经纬度及范围查询坐标点信息的场景,在现实开发中还是有很多机会遇到的,比如地图导航类应用计算两点之间的距离及范围、大众点评美团等点餐按照买家和商家的坐标点进行计算距离,等等。

最近在项目中的一个需求和以上问题类似,需要按照用户的地图坐标经纬度查询一定范围内的商户信息。静下心来思考下,把问题拆解分析下就是,已知一个坐标点,按照距离求设定范围的所有坐标点集合。

1、知识准备

计算两点之间的直线距离,想到的最朴素的计算方法就是使用勾股定理,即:

如果把两个坐标点放置在同一平面内,按照地图坐标(x1,y1)到(x2,y2)的距离求解,即:

sqrt((x2-x1)² + (y2-y1)²)

然而众所周知,地球是一个不规则的球体并不是一个平面,因此除了勾股定理之外,还要充分考虑球面弧度带来的距离变化,如下图:

把上面的立体图横切成切面来观察会更加直观,如下图:

clipboard.png

通过上面的图例,我们可以把这个问题再转换下,变成了一道数学题。 

A、B是两个目标坐标点,已存在A的坐标经纬度(lngA,latA),B的坐标经纬度(lngB,latB)

c是A、B同一平面内最短直线距离,这个可以通过勾股定理获取,即sqrt((lngA - lngB)² + (latA - latB)²)

 

2、实现方法

当我们通过知识储备弄清了问题的本质,掌握了原理,也就解决了问题,接下来我们还需要通过具体实现和途径来解决它。

按照勾股定理自己实现业务逻辑

简单计算平面两点之间的距离,比较简单忽略

使用mysql自带函数st_distance实现

select st_distance(POINT (#latitude#,#longitude#),POINT(latitude,longitude))*111195 from table

利用mysql自带函数计算结果单位是度,需要乘111195(地球半径6371000*PI/180)是将值转化为米即可

借助redis提供的地理空间计算能力实现

还没研究,再有复杂的再去研究下。#TODO

3、参考文章:

https://segmentfault.com/a/1190000016237750

https://blog.csdn.net/YoungLee16/article/details/88540436

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大摩羯先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值