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

百度的.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;
    }

}

你可能感兴趣的:(根据经纬度坐标获取一定范围内的用户)