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

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

数据库表结构

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



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


尴尬 随手画的  勿喷


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

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

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

/** * 生成以中心点为中心的四方形经纬度 *  * @param lat 纬度 * @param lon 精度 * @param raidus 半径(以米为单位) * @return */  public static double[] getAround(double lat, double lon, int raidus) {  Double latitude = lat;  Double longitude = lon;  Double degree = (24901 * 1609) / 360.0;  double raidusMile = raidus;  Double dpmLat = 1 / degree;  Double radiusLat = dpmLat * raidusMile;  Double minLat = latitude - radiusLat;  Double maxLat = latitude + radiusLat;  Double mpdLng = degree * Math.cos(latitude * (Math.PI / 180));  Double dpmLng = 1 / mpdLng;               Double radiusLng = dpmLng * raidusMile;   Double minLng = longitude - radiusLng;    Double maxLng = longitude + radiusLng;    return new double[] { minLat, minLng, maxLat, maxLng };  }

这样四周的经纬度都已经生成了。    
下一步是查询数据库中和四周经纬度匹配的数据。 如果数据量很大的话会很耗时间,而且会很消耗流量。所以需要用到分页查询 

代码如下 


select * from mobile_user where mu_latitude <> 0and mu_longitud > #left_lat#and mu_longitud < #right_lat#and mu_latitude > #down_lon#and mu_latitude < #top_lon#and mu_u_id <> #uid#order by ACOS(SIN((#lat# * 3.1415) / 180 ) * SIN((mu_latitude * 3.1415) / 180 ) +COS((#lat# * 3.1415) / 180 ) * COS((mu_latitude * 3.1415) / 180 ) *COS((#lon# * 3.1415) / 180 - (mu_longitud * 3.1415) / 180 ) ) * 6380 asc limit #start#,#end#





我用的是ibatis框架,sql里以#开始并结束的 是我传递过来的参数。  sql语句计算了每条数据和中心经纬度的距离并且以最近进行排序。  sql语句是根据下面的方法演变而来
方法是计算两个经纬度之间的直线距离。

/** * 计算中心经纬度与目标经纬度的距离(米) *  * @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使用了。  
做个笔记,欢迎补充。


鉴于一些网站采集本blog的文章,  本站原创。  http://blog.csdn.net/qq7342272   转载请注明出处。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/61830.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Louvain算法在反作弊上的应用

作者 | ANTI 一、概述 随着互联网技术的发展&#xff0c;人们享受互联网带来的红利的同时&#xff0c;也面临着黑产对整个互联网健康发展带来的危害&#xff0c;例如薅羊毛、刷单、刷流量/粉丝、品控、诈骗、快排等等&#xff0c;反作弊作为打击黑产的中坚力量&#xff0c;持…

艾永亮:酒瓶中的战争,谁是下一瓶被拿起的葡萄酒

1972年2月&#xff0c;美国总统尼克松访华。为庆祝中美关系破冰&#xff0c;尼克松特意从美国带来了干红葡萄酒&#xff0c;并开玩笑道&#xff1a;“中国很大&#xff0c;但缺少葡萄酒和时尚女性。” 47年后&#xff0c;你站在酒柜前&#xff0c;面对着琳琅满目又大同小异的葡…

基础实验5-2.2 电话聊天狂人(Map的使用+例题)

欢迎观看我的博客&#xff0c;如有问题交流&#xff0c;欢迎评论区留言&#xff0c;一定尽快回复&#xff01;&#xff08;大家可以去看我的专栏&#xff0c;是所有文章的目录&#xff09; 文章字体风格&#xff1a; 红色文字表示&#xff1a;重难点 蓝色文字表示&#xff1a;思…

人员抽烟行为识别检测算法

人员抽烟行为识别检测系统基于YOLOv7 技术方法&#xff0c;对画面开展724h无间断分析。大大提升效率&#xff0c;减少了人力成本。YOLOv7 的发展方向与当前主流的实时目标检测器不同&#xff0c;研究团队希望它能够同时支持移动 GPU 和从边缘到云端的 GPU 设备。除了架构优化之…

程序员哥们儿在面试提问环节被挂了!

扫 码 带 你 走 进 程 序 员 的 欢 乐 源 泉 最近看到一张网友分享的聊天截图&#xff1a; 一程序员面完技术三面&#xff0c;最后面试官说很不错&#xff0c;面试通过了&#xff0c;问这个人还有什么问题&#xff0c;于是这位“耿直”程序员说&#xff1a;你们面试太简单了&am…

培训机构出来的同学背了这些面试题,拿了12K,把我给羡慕坏了

前言&#xff1a; 首先介绍一下我的同学&#xff0c;专科毕业应用电子技术专业&#xff0c;已经毕业快两年了。因为专业的原因工作一年觉得没什么发展前途就想转行&#xff0c;身为他的“好基友”&#xff0c;他觉得我这个工作挺好的&#xff0c;就咨询了我一下&#xff0c;经…

软件测试整套面试流程要注意这些事情,做好了真的能收到offer【建议收藏】

小编热衷于收集整理资源&#xff0c;记录踩坑到爬坑的过程。希望能把自己所学&#xff0c;实际工作中使用的技术、学习方法、心得及踩过的一些坑&#xff0c;记录下来。也希望想做软件测试的你一样&#xff0c;通过我的分享可以少走一些弯路&#xff0c;可以形成一套自己的方法…

面试施工员的时候你知道会问什么问题吗?

一、施工员常见面试题有哪些? 1、钢筋锚固长度的规定。 2、梁模板模起供高度。 3、混凝土道路施工有什么特别注意的地方吗? 4、施工现场用水量的计算依据。 5、外墙裂缝的产成原因? 6、你所知道的材料预控措施有哪些? 7、讲一讲你的工作经历&#xff0c;以前从事哪些项目的…

软件测试面试技巧 这么准备,拿下心仪offer不是问题

拥有一个心仪的offer&#xff0c;是每个软件测试工程师们都梦寐以求的事情&#xff0c;那如何才能通过最后的面试一关&#xff0c;拿到offer呢&#xff1f; 俗话说&#xff0c;知己知彼百战不殆&#xff0c;作为测试员&#xff0c;在面试前对面试官可能提出的问题进行总结和准…

软件测试面试话术 这样准备,让你成功拿到高薪offer

面试就是就是进入岗位前的临门一脚&#xff0c;如果因为准备不足而导致面试失败那可就亏大了&#xff01;因此&#xff0c;为了帮助大家提高面试成功率&#xff0c;尽快拿到高薪offer&#xff0c;我为你们准备了一套面试话术以及技巧&#xff0c;希望对即将参加软件测试面试的你…

今天面试招了个18K的人,从腾讯出来的果然都有两把刷子···

公司前段时间缺人&#xff0c;也面了不少测试&#xff0c;前面一开始瞄准的就是中级的水准&#xff0c;也没指望来大牛&#xff0c;提供的薪资在15-20k&#xff0c;面试的人很多&#xff0c;但平均水平很让人失望。看简历很多都是4年工作经验&#xff0c;但面试中&#xff0c;不…

软件测试100%(打包票必问)面试题:介绍下你做过得项目、学会必拿offer

小编热衷于收集整理资源&#xff0c;记录踩坑到爬坑的过程。希望能把自己所学&#xff0c;实际工作中使用的技术、学习方法、心得及踩过的一些坑&#xff0c;记录下来。也希望想做软件测试的你一样&#xff0c;通过我的分享可以少走一些弯路&#xff0c;可以形成一套自己的方法…

开学季,孩子们怎么学习?

&#xff08;1&#xff09;学习 我首先想告诉大家一下&#xff1a; 素质教育靠家庭知识教育学校技能教育靠自己 你想在学校里学到工作挣钱的本事&#xff0c;你想在企业里学到工作挣钱的本事&#xff0c;门儿都没有&#xff0c;这个大家要有清醒的认识。 一、小学学什么 小学其…

优秀期刊《儿童绘本》CN刊物征稿

《儿童绘本》 《儿童绘本》是由国家新闻出版管理部门批准&#xff0c;由吉林省舆林报刊发展有限责任公司主管主办&#xff0c;国内外公开发行的全国优秀期刊。国内统一连续出版物号CN 22-1406/J&#xff1b;国际标准连续出版物号ISSN 1673-954X 以“普及绘本知识&#xff0c;推…

steam/csgo搬砖靠谱吗?难做吗?

Steam-csgo搬砖难不难做&#xff1f;我告诉你并不难&#xff0c;任何行业都是入局简单&#xff0c;但是你先搞懂里面的思维逻辑&#xff0c;稳定利润的话就需要花点功夫~有两条路可走&#xff0c;一就是不断踩坑试错&#xff0c;用自身去换取经验。第二就是知识付费&#xff0c…

备战系统分析师——第2章经济管理部分

正在备考2023年5月底的软考--系统分析师。这次让我们聊一下第2章的经济管理部分。 首先是会计常识&#xff0c;这是我第一次接触会计知识&#xff0c;很多东西还是很新奇的。会计计价有两种方式&#xff0c;历史成本计价和公允价值计价&#xff0c;我理解历史成本计价就是在做会…

【人工智能】突破界限:LLM 大语言模型在推动基于AI的语言处理方面的极限,大模型发展历史,对AI带来的变革,对各行各业的影响,未来的发展趋势,大模型的能力极限在哪里?

突破界限:大型语言模型推动基于AI的语言处理发展 文章目录 突破界限:大型语言模型推动基于AI的语言处理发展1. 引言2. 大型语言模型的发展史时间线关键阶段3. 基于大型语言模型的AI变革4. 对各行各业的影响各行各业影响LLM的应用5. 未来的发展趋势6. 大型语言模型的能力极限总…

学生如何使用chatGTP提升学习能力?

短短两三个月&#xff0c;ChatGPT炸圈范围越来越大&#xff0c;很快就从科技圈来到了教育界。前段时间&#xff0c;北密歇根大学的哲学教授Antony Aumann在批改论文的过程中发现一篇论文好到令人感到震惊。这篇论文逻辑严谨&#xff0c;措辞得当&#xff0c;结构清晰&#xff0…

搭建一个定制版New Bing吧

项目介绍 项目地址&#xff1a;https://github.com/adams549659584/go-proxy-bingai 引用项目简介&#xff1a;用 Vue3 和 Go 搭建的微软 New Bing 演示站点&#xff0c;拥有一致的 UI 体验&#xff0c;支持 ChatGPT 提示词&#xff0c;国内可用&#xff0c;国内可用&#xff…

用AI生成思维导图的方法

写在前边&#xff1a; 这篇文章很简单&#xff0c;只为给自己做个记录。并且做一个简单的思考&#xff1a;明明很容易的东西&#xff0c;一旦陷入了思维困境中&#xff0c;就无法找到出去的路。这时候需要扩展思维或者他人提点。 正文&#xff1a; 就挺尴尬&#xff0c;之前…