java根据经纬度计算距离_java根据高德经纬度获取地区

java根据经纬度计算距离_java根据高德经纬度获取地区前一阵项目中,有一个需求:是查找附近的人,其实就是查询某个距离内有多少用户。实现方式还是比较简单的,首先用户在APP上开启定位权限,将自己的经纬度都存储到数据库,然后以此经纬度为基准,以特定距离为半径,查找此半径内的所有用户。那么,如何java如何计算两个经纬度之间的距离呢?有两种方法,误差都在接受范围之内。1、基于googleMap中的算法得到两经纬度之间的距离,计算精度与谷歌地图的距离精度差不…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

前一阵项目中,有一个需求:是查找附近的人,其实就是查询某个距离内有多少用户。实现方式还是比较简单的,首先用户在APP上开启定位权限,将自己的经纬度都存储到数据库,然后以此经纬度为基准,以特定距离为半径,查找此半径内的所有用户。

那么,如何java如何计算两个经纬度之间的距离呢?有两种方法,误差都在接受范围之内。

1、基于googleMap中的算法得到两经纬度之间的距离,计算精度与谷歌地图的距离精度差不多。

/**

* 默认地球半径

*/

private static double EARTH_RADIUS = 6371000;//赤道半径(单位m)

/**

* 转化为弧度(rad)

* */

private static double rad(double d)

{

return d * Math.PI / 180.0;

}

/**

* @param lon1 第一点的精度

* @param lat1 第一点的纬度

* @param lon2 第二点的精度

* @param lat2 第二点的纬度

* @return 返回的距离,单位m

* */

public static double GetDistance(double lon1,double lat1,double lon2, double lat2) {

double radLat1 = rad(lat1);

double radLat2 = rad(lat2);

double a = radLat1 – radLat2;

double b = rad(lon1) – rad(lon2);

double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));

s = s * EARTH_RADIUS;

s = Math.round(s * 10000) / 10000;

return s;

}

2、计算中心经纬度与目标经纬度的距离(米)

/**

* 计算中心经纬度与目标经纬度的距离(米)

*

* @param centerLon

* 中心精度

* @param centerLat

* 中心纬度

* @param targetLon

* 需要计算的精度

* @param targetLat

* 需要计算的纬度

* @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));

}

通过测试计算可得:

public static void main(String []args){

long raidus = 10000; //半径10km

double lon = 116.510958; //当前经度

double lat = 39.90786; //当前纬度

double lon1=116.510842;

double lat1=39.90777;

// double lon2=108.9644583556;

// double lat2=34.286439088548;

double dist;

double dist2;

dist=GeoUtil.GetDistance(lon, lat, lon1, lat1);

dist2=GeoUtil.distance(lon, lat, lon1, lat1);

System.out.println(“1.两点相距:” + dist + ” 米”);

System.out.println(“2.两点相距:” + dist2 + ” 米”);

}

其中:1.两点相距:14.0 米

2.两点相距:15.924338550347233 米

由此可见,这两种方法误差都不算大,如此java就能计算出两个经纬度直接的距离,也就满足了需求!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/190416.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Swift 启动页动画(CAKeyframeAnimation)

    Swift 启动页动画(CAKeyframeAnimation)

    2021年5月27日
    154
  • idea2021.7.20激活码获取【2021.7最新】

    (idea2021.7.20激活码获取)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月20日
    38
  • java工具类-Java对象转换成Map

    java工具类-Java对象转换成Mappackagecom.hwqh.hwqhuser.util;importjava.lang.reflect.InvocationTargetException;importjava.lang.reflect.Method;importjava.util.HashMap;importjava.util.Map;/***Map转换工具类*/publicclass…

    2022年5月27日
    86
  • Sample rate 理解「建议收藏」

    Sample rate 理解「建议收藏」在Gnuradio中,我们可以看到很多模块中都有Samplerate这个概念然后看到一个说明 Anyprocessingblock’s’SampleRate’parameterisusedforDSPcalculation,notforcontrollingtherateatwhichsamplesareproduced.Thisisdis

    2022年10月17日
    5
  • 2.6 从JSON数据源导入数据

    2.6 从JSON数据源导入数据2.6从JSON数据源导入数据1、如何读取json格式的数据在开始之前,需要安装requests模块案例:读取并解析GitHub(http://github.com)网站的最近活动时间表2、操作步骤指定GitHubURL来读取JSON格式数据使用requests模块访问指定的URL,并获取内容读取内容并将之转化为JSON格式的对象迭代访问JSON对象3、代码实现importrequestsimportjsonurl=’https://github.com/ti

    2022年6月19日
    28
  • Linux中安装tree命令

    Linux中安装tree命令在CentOS系统的普通用户下,使用sudoyum-yinstalltree下载tree命令,在ubuntu系统的普通用户下,使用sudoapt-getinstalltree下载tree命令

    2022年7月24日
    11

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号