在经过百度搜索得知 在经线上,相差一纬度约为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;
}
}