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就能计算出两个经纬度直接的距离,也就满足了需求!

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • python中int是什么类型

    python中int是什么类型python中的基本数据类型1:虽然python中的变量不需要声明,但使用时必须赋值整形变量浮点型变量字符型2:可以一个给多个变量赋值,也可以多个给多个变量赋值3:python3中有6个标准数据类型

  • (详细图解)VS2017安装教程

    (详细图解)VS2017安装教程VS2017版本同15版一样,细分为三个版本,分别是:社区版(Community):免费提供给单个开发人员,给予初学者及大部分程序员支持,可以无任何经济负担、合法地使用。 企业版:为正规企业量身定做,能够提供点对点的解决方案,充分满足企业的需求。企业版官方售价2999美元/年或者250美元/月。 专业版:适用于专业用户或者小团体。虽没有企业版全面的功能,但相比于免费的社区版,…

  • unity3d 入门[通俗易懂]

    unity3d 入门[通俗易懂]unity关联vsunity安装cinemachineassetstore搜索cinemachine插件,import后确认导入后,可以在packages节点(library/packagecache中代码)找到Cinemachine如果报错(确保没有io错误):Windows>PackageManager>inproject依赖项,删除后,重新安装IO错误…

  • 服务器出现kernel: TCP: time wait bucket table overflow解决

    服务器出现kernel: TCP: time wait bucket table overflow解决http://blog.sina.com.cn/s/blog_69cdee7f0100yowt.html#一台Nginx+php-fcgi的服务器做了负载均衡,在主控端发现一直在报错:viewsourceprint?01#—————————-引用文字-开始———————-

  • Mybatis异常总结

    Mybatis异常总结

  • linux dlopen 内存版本,dlopen函数详解

    linux dlopen 内存版本,dlopen函数详解Linux提供了一套API来动态装载库。下面列出了这些API:-dlopen,打开一个库,并为使用该库做些准备。-dlsym,在打开的库中查找符号的值。-dlclose,关闭库。-dlerror,返回一个描述最后一次调用dlopen、dlsym,或dlclose的错误信息的字符串。C语言用户需要包含头文件dlfcn.h才能使用上述API。glibc还增加了两个POSIX标准中没有的API:…

    2022年10月27日

发表回复

您的电子邮箱地址不会被公开。

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