java 经纬度 范围内_根据经纬度坐标获取一定范围内的用户

678b19c21364

百度的.png

在经过百度搜索得知 在经线上,相差一纬度约为111千米 ,因此100 米 对应纬度差 约为0.1/111=0.00900900900900900900900900900901度。

而在纬线上,经度每差1度,实际距离为 111cosθ(其中θ表示该纬线的纬度.在不同纬线上,经度每差1度的实际距离是不相等的)。所以可以得到100米在该纬线上对应经度差约为0.1/(111cos23.14)=0.0009797度。

//0.0045 lat 500米纬度转换成度数

//0.0048985 lng 500米经度转换成度数

//经纬度所有500米统一用0.0048

方法一:在mysql 数据库中 创建函数 :DistanceUtil

CREATE DEFINER=`root`@`localhost` FUNCTION `DistanceUtil`(`lng1` double,`lat1` double,`lng2` double,`lat2` double) RETURNS double

BEGIN

#根据二个点的经纬度计算距离

declare x double;

declare y double;

declare distance double;

declare PI double;

declare R double;

set PI = 3.14159265358979323;#圆周率

set R = 6371229; #地球的半径

set x = (lng2-lng1)*PI*R*cos(((lat1 + lat2) / 2) * PI / 180) / 180;

set y = (lat2 - lat1) * PI * R / 180;

set distance = sqrt(x*x+y*y);

RETURN distance;

END

方法二:先从数据库筛选范围

SELECT * from table

where (lat between lat1-0.0048 and lat1+0.0048) and (lng between lng1-0.0048 and lng1+0.0048)

java 根据二个点的经纬度计算距离工具类

DistanceUtil.java

public class DistanceUtil {

private final static double PI = 3.14159265358979323; // 圆周率

private final static double R = 6371229; // 地球的半径

public static double getDistance(double lng1, double lat1, double lng2,double lat2) {

double x, y, distance;

x = (lng2 - lng1) * PI * R

* Math.cos(((lat1 + lat2) / 2) * PI / 180) / 180;

y = (lat2 - lat1) * PI * R / 180;

distance = Math.hypot(x, y);

return distance;

}

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值