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)


相关推荐

  • 2021计算机三级数据库大题总结

    2021计算机三级数据库大题总结第一套大题为了方便之后的大题都放在这里38.设计ER图,并把ER图转换为关系模式,并指出主码。相关参考资料:(一)什么是ER图?(1)概念ER图:实体关系图,简记E-R图,是指以实体、关系、属性三个基本概念概括数据的基本结构,从而描述静态数据结构的概念模式(2)要素3要素:实体、属性和关系(3)表示 实体型:用矩形表示,矩形框内写明实体名;  属性:用椭圆形或圆角矩形表示,与相应的实体连接起来;多值属性由双线连接;主属性名称下加下划线;  联系:用菱形表示,菱形框内写明

  • mysql fsync_深入理解Fsync「建议收藏」

    mysql fsync_深入理解Fsync「建议收藏」1介绍数据库系统从诞生那天开始,就面对一个很棘手的问题,fsync的性能问题。组提交(groupcommit)就是为了解决fsync的问题。最近,遇到一个业务反映MySQL创建分区表很慢,仔细分析了一下,发现InnoDB在创建表的时候有很多fsync——每个文件会有4个fsync的调用。当然,并不每个fsync的开销都很大。这里引出几个问题:(1)问题1:为什么fsync开销相对都比较大?它到…

  • 国家的崛起,无法建立局域网连接[通俗易懂]

    国家的崛起,无法建立局域网连接[通俗易懂]w8,w10需要启动directplay,具体步骤:控制面板,选择程序和功能,启用或关闭windows功能,旧版组件。然后勾选上directx组件就行了。

  • oracle linux 设置ip[通俗易懂]

    oracle linux 设置ip[通俗易懂]1.ifconfig查看网卡是否启动(两个一个127.0.0.1)2.若只是一个查看所有网卡 ifconfig-a 获取未启动的网卡名3.启动网卡 ifconfigeht0up 注: eht0;未启动的网卡名4.修改网卡配置文件eth0 1.修改/etc/sysconfig/network-scripts/etho文件 参数详解 …

  • linux系统中如何进入退出vim编辑器,方法及区别

    linux系统中如何进入退出vim编辑器,方法及区别随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)在linux家族中,vim编辑器是系统自带的文本编辑器,其功能强大自不必说了。偶有小白,刚接触linux,要修改某个文本文件,不可能像WINDOWS那样操作,更有甚者,进入VI编辑器后,无法退出以…

  • excel怎么赋值0和1_如何用excel自动赋值

    excel怎么赋值0和1_如何用excel自动赋值getCell 获取列 需要用 createCell获取即可。导出报表时,明明是有数据的可就是报空指针异常。排查后发下报表表格没内容时不能用。

发表回复

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

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