java附近的人_java实现搜索附近地点或人的功能

本文介绍了使用Java和MySQL实现查找附近地点的功能,通过计算矩形边界并利用经纬度索引来提升查询效率。首先建立经纬度数据库,然后根据用户位置和查询范围计算矩形顶点,进一步筛选出10公里内的地点,最后使用MySQL的GetDistance函数进行精确距离计算,排除多余数据。
摘要由CSDN通过智能技术生成

前言

当前大多数app都有查找附近的功能, 简单的有查找周围的运动场馆, 复杂的有滴滴, 摩拜查找周围的车辆. 本文主要阐述查找附近地点的一般实现. 搜索附近的人也是同样的思路.

方案比较

方案1 (性能还不错)

数据库直接存经纬度, 然后计算矩形边界值, 走索引查询

方案2 (还没试过)

将经纬度转换成 一个值, 然后进行比较查询 genhash

方案3 (据说高性能, 性能怎样?待测试)

方案1的实现(本文主要阐述此方案)

实现环境: java+MySQL

场景模拟:  张三用户在成都天府五街查询周围10公里内的地点

1. 首先建立经纬度数据, 比如常见地点的经纬度数据库, 我这里是网上下载的一个shop_area 表数据,里面包含了一些常见地点的经纬度 ,如下图

b8f2028c08154cf6a2f613a43b8faae0.png

2. 然后根据张三用户所在的经纬度, 以及他要查询的距离10公里, 得到查询范围矩形的四个顶点, 如下图:

68772cbc2936f5b80329e96747ad2b11.png

计算这四个点的 mybatis sql:

SELECT

#{myLongitude} - #{distance} / ABS(COS(RADIANS(#{myLatitude})) * 69) AS LongitudeMin,

#{myLongitude} + #{distance} / ABS(COS(RADIANS(#{myLatitude})) * 69) AS LongitudeMax,

#{myLatitude} - (#{distance} / 69) AS LatitudeMin,

#{myLatitude} + (#{distance} / 69) AS LatitudeMax

3. 将刚才得到的矩形四个点的值代入如下sql 来进行经纬度查询过滤, 记得经纬度字段要建立索引

mybatis sql:

SELECT *

FROM (

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值