经纬度与距离米的计算

为什么80%的码农都做不了架构师?>>>   hot3.png

经纬度与距离米的计算:

地球半径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;
	}

 

转载于:https://my.oschina.net/wtkid/blog/1540461

你可能感兴趣的:(经纬度与距离米的计算)