读书人

java 兑现微信搜索附近人功能

发布时间: 2012-09-28 00:03:35 作者: rapoo

java 实现微信搜索附近人功能

最近给andorid做后台查询数据功能,有一个需求是模仿微信的查找附近人功能。 数据库中存储每个用户的经纬度信息及用户信息,通过当前用户传递过来的经纬度查询这个用户半径N公里以内的用户信息。

数据库表结构

表信息表名Mobile_Usermu_id自增,主键mu_u_id用户表的ID 外键mu_longitud精度mu_latitude纬度(还有其他的一些信息,这里就列举4个字段足矣)



首先需要一个方法,是把传递过来的经纬度按照半径N公里扩散,找出距离中心经纬度N公里的上下左右经纬度值。效果如图

java 兑现微信搜索附近人功能

java 兑现微信搜索附近人功能 随手画的 勿喷


以中心生成经纬度时 正上方和正下方的精度是不变的,只有纬度变化。 生成左右时道理一样,只有精度变化,纬度是不变的。

所以只需要生成上下的纬度,左右的精度就可以了。

参考了网上的文章,http://digdeeply.info/archives/06152067.html 这篇文章是用PHP实现的经纬度查询。修改成java的 代码如下

/**      * 计算中心经纬度与目标经纬度的距离(米)      *       * @param centerLon      *            中心精度      * @param centerLan      *            中心纬度      * @param targetLon      *            需要计算的精度      * @param targetLan      *            需要计算的纬度      * @return 米      */      private static double distance(double centerLon, double centerLat, double targetLon, double targetLat) {            double jl_jd = 102834.74258026089786013677476285;// 每经度单位米;          double jl_wd = 111712.69150641055729984301412873;// 每纬度单位米;          double b = Math.abs((centerLat - targetLat) * jl_jd);          double a = Math.abs((centerLon - targetLon) * jl_wd);          return Math.sqrt((a * a + b * b));      } 


这样既实现了分页处理,又实现了每条数据的经纬度与中心经纬度的直线距离(以米为单位)。

最后就是组成json数组返回给android使用了。
做个笔记,欢迎补充。

读书人网 >编程

热点推荐