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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

发表回复

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

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