为什么80%的码农都做不了架构师?>>>
经纬度与距离米的计算:
地球半径R=6371km,2πR/360=111km,
也就是说经线上,纬度1°约为111km,
纬线上,赤道上,经度1°约为111km,
越往两级走,纬线圈越小,纬线圈半径为r=Rcos(α),α为当前纬线的纬度
纬线圈上经度1°对应的距离为:2πr/360=111cos(α)km
现在可以大致计算出radius距离对应该纬线上的经度到底增加多少,纬度增加了多少
△lat/radius=1°/111km
△lng/radius=1°/(111cos(α))km
eg:已知所有目标点的经纬度,根据中心中心点位置:lng,lat,找出范围在radius 内的所有点。
方案:
根据经纬度与距离的比值,计算出radius距离对应的经纬度△lng,△lat,
第一步,矩形过滤:选出在范围内的经纬度的地点:
lng-△lng 第二步,圆形过滤: 计算所有矩形内的党支部到中心点的距离,筛选出距离小于radius的点,已知两点经纬度,求距离。函数如下(网上找的): public static double getDistance(double longitude1, double latitude1, double longitude2, double latitude2) {
// 维度
double lat1 = (Math.PI / 180) * latitude1;
double lat2 = (Math.PI / 180) * latitude2;
// 经度
double lon1 = (Math.PI / 180) * longitude1;
double lon2 = (Math.PI / 180) * longitude2;
// 地球半径
double R = 6371;
// 两点间距离 km,如果想要米的话,结果*1000就可以了
double d = Math.acos(Math.sin(lat1) * Math.sin(lat2) + Math.cos(lat1) * Math.cos(lat2) * Math.cos(lon2 - lon1)) * R;
return d * 1000;
}