根据指定的经纬度从数据库中查询半径为5km的地点

1.从数据库中一个个遍历查找,然后二者之间求距离比较大小,慢!

2.先过滤出经纬度范围,在比较大小


具体代码实现:

controller:

/*** 根据经纬度找范围内的数据 jfinal*/public void findNeighPosition() {String longitude = getPara("lng");String latitude = getPara("lat");renderJson(TestProductService.SERVICE.findNeighPosition(longitude, latitude));}

service+dao:

/*** 根据经纬度查询某一个范围内的园区* @param lng 中心的经度* @param lat 中心的纬度* @param distance 半径大小* @return*/public List<CommunityGroupManagerApplication> findNeighPosition(String lng,String lat,String distance){  double longitude = Double.parseDouble(lng);double latitude = Double.parseDouble(lat);double dis = Double.parseDouble(distance);//先计算查询点的经纬度范围   double r = 6371;//地球半径千米  double dlng =  2*Math.asin(Math.sin(dis/(2*r))/Math.cos(latitude*Math.PI/180));  dlng = dlng*180/Math.PI;//角度转为弧度  double dlat = dis/r;  dlat = dlat*180/Math.PI;          double minlat =latitude-dlat;  double maxlat = latitude+dlat;  double minlng = longitude -dlng;  double maxlng = longitude + dlng;  String sql = "select * from sq_community_group_manager_application where lng>=? and lng <=? and lat>=? and lat<=?";Object[] values = {minlng,maxlng,minlat,maxlat};List<CommunityGroupManagerApplication> list = CommunityGroupManagerApplication.dao.find(sql, values);int len = list.size();//判断两点之间的距离是否大于半径for(int i=0;i<len;i++) {if(getDistance(longitude, latitude, list.get(i).getDouble("lng"), list.get(i).getDouble("lat"))>dis) {list.remove(i);i--;len--;}}return list;  }/*** 求两点之间的距离* @param lng1 A点经度* @param lat1 A点纬度* @param lng2 B点经度* @param lat2 B点纬度* @return 两点距离*/public static double getDistance(double lng1, double lat1, double lng2, double lat2) {double EARTH_RADIUS = 6371;double radiansAX = Math.toRadians(lng1); // A经弧度double radiansAY = Math.toRadians(lat1); // A纬弧度double radiansBX = Math.toRadians(lng2); // B经弧度double radiansBY = Math.toRadians(lat2); // B纬弧度// 公式中“cosβ1cosβ2cos(α1-α2)+sinβ1sinβ2”的部分,得到∠AOB的cos值double cos = Math.cos(radiansAY) * Math.cos(radiansBY) * Math.cos(radiansAX - radiansBX)+ Math.sin(radiansAY) * Math.sin(radiansBY);double acos = Math.acos(cos); // 反余弦值
//      System.out.println("-------"+EARTH_RADIUS * acos);return EARTH_RADIUS * acos; // 最终结果}

注意的是,第二部分的搜索范围是外接正方形,如果想只要内接圆,需要判断比较半径大小

具体的看:

https://www.cnblogs.com/zt007/p/6373722.html
https://blog.csdn.net/sunhuaqiang1/article/details/54138817

根据指定的经纬度查询半径为5km的地点相关推荐

  1. mysql根据经纬度查询范围内数据,并根据距离排序

    最近接到一个新需求,要根据经纬度查询指定范围内的数据,并且根据距离进行排序,网上找了找相关实现方法,记录一下. java代码如下 public final class DistanceUtils {/ ...

  2. 【Java、Redis】通过中心经纬度与半径获取范围内的结果集(类似附近的人)

    文章目录 需求 解决方案 什么是Redis + GeoHash 1.Java + Redis实现 引用的pom依赖 InitEquLongLatTask.java Controller Service ...

  3. JAVA已知圆心经纬度和半径求圆周点的经纬度

    JAVA已知圆心经纬度和半径求圆周点的经纬度 项目中遇到一个需求,需要根据传入的圆心经纬度和半径参数获得圆周点的经纬度,在网上查询了很多没有找到能用的算法,从GPT中获取到了一个简洁的用java实现的 ...

  4. 数据库根据经纬度查询离我最近的数据

    之前很啥很天真地以为无非就是逐个计算距离,然后比较出来就行了,然后当碰到访问用户很多,而且数据库中经纬度信息很多的时候,计算量的迅速增长,能让服务器完全傻逼掉,还是老前辈的经验比我们丰富,给了我很大的 ...

  5. app 隔几秒记录当前经纬度位置_经纬度查询app下载-经纬度查询(在线定位查询)官方版下载v3.6...

    经纬度查询是一款在线定位查询的app,一键快速的获取位置,并且智能的系统还能够进行高德地图的切换,手机上查询也比较的方便,高清的画质,用户在使用的时候非常的清晰,同时还可以了解纬度值的精准信息哦!赶紧 ...

  6. sqlserver根据经纬度查询距离范围

    首先数据库里有坐标的经度和维度字段,然后根据选择的地点经纬度和有效范围(米)来进行查询 通过百度发现了sql有自带的经纬度算法 所以直接来过来使用就行 例子: 指定一个经纬度,给定一个范围值(单位:千 ...

  7. android 3.0+百度地图api地图如何移动到指定的经纬度处

    由于百度地图api,2.0+和3.0+的改动比较大,api基本上被全换过了,有些同学可能2.0+的api使用的非常熟悉,但是更新到3.0+时,却会遇到一些小麻烦(由于api变了,你就需要重新学习它的a ...

  8. android 经纬度的范围内,在Android里如何判断一个指定的经纬度点是否落在一个多边形区域内...

    在lbs开发中,可能要碰到这样的问题,如何判断一个指定的经纬度点是否落在一个多边形区域内,比如我在地图上画了一个多边形区域,然后给出一个经纬度点,怎样判断这个点是否在这个多边形范围之内,由于我用的是a ...

  9. 使用dig或nslookup指定dns服务器查询域名解析

    使用dig或nslookup指定dns服务器查询域名解析 https://www.cnblogs.com/wjoyxt/p/9198694.html 一般来说linux下查询域名解析有两种选择,nsl ...

  10. PHP根据经纬度查询地理位置

    PHP根据经纬度查询地理位置 function getCity($longitude, $latitude){//调取百度接口,其中ak为百度帐号key,注意location纬度在前,经度在后$api ...

最新文章

  1. 有了链路日志增强,排查Bug小意思啦!
  2. 完了!TCP出了大事!
  3. kali linux 安装 Mysql Can‘t read from messagefile 报错解决方案
  4. SpringBoot自动化配置之一:SpringBoot内部的一些自动化配置入门介绍
  5. idea运行android usb调试,android-Intellij Idea不允许在真实设备上运行应...
  6. PCL 1.8.1 在VS2015中配置 包含目录、库目录和附加依赖项
  7. Doris之备份与恢复(全面)
  8. 为什么要设计好目录结构?
  9. 简述Git(Linux、Android~~开源)
  10. CTF常见用法小总结
  11. siri中文语音助理_2020年人工智能和语音控制的7项新发展
  12. AB压力测试(简易版操作)
  13. Java+学生信息管理系统+GUI+文件
  14. 搜狗输入法在别的屏幕
  15. 清华计算机自主招生试题,2017年清华大学自主招生笔试真题及答案汇总|2017自主招生笔试真题(清华大学)|清华大学2017年自主招生笔试真题...
  16. 自动化测试(定位元素的方式,浏览器操作)
  17. 世界为什么是五彩缤纷
  18. 顺丰软件显示无法联系服务器,顺丰可以云服务器吗
  19. Python3脚本抢票
  20. echarts地图的常见用法:基本使用、区域颜色分级、水波动画、区域轮播、给地图添加背景图片和图标、3d地图

热门文章

  1. MATLAB用solve求解普通二元高次方程
  2. C语言函数中的px是什么,C语言学习知识程序设计试卷及其规范标准答案
  3. 电脑的Mac地址怎么查看
  4. 解决No version of NDK matched the requested version编译报错的问题
  5. 怎样显示计算机联网密码错误,我的笔记本电脑连接wifi时总显示密码不对,但密码是对的!应当怎么弄...
  6. 百度校招小结:我做技术面试官的一些思考
  7. RealSR性能大幅提升,旷视科技+快手科技+电子科大联合提出“先发散再收敛”的D2CSR
  8. busybox linux使用教程,使用BusyBox制作Linux根文件系统
  9. Python | 程序查找列表中最小和最大元素的位置
  10. 计算机R3处理器,2018年3月最新版处理器天梯图 秒懂三月台式电脑处理器性能排行...