/**
* 根据经纬度,计算两点间的距离
*
* @param longitude1 第一个点的经度
* @param latitude1 第一个点的纬度
* @param longitude2 第二个点的经度
* @param latitude2 第二个点的纬度
* @return 返回距离 单位千米
*/
public List<LatAndLog> getDistances(double longitude1, double latitude1, double longitude2, double latitude2,Integer d) {
// 纬度
double lat1 = Math.toRadians(latitude1);
double lat2 = Math.toRadians(latitude2);
/* BigDecimal lat1 = new BigDecimal( Math.toRadians(latitude1));
BigDecimal lat2 = new BigDecimal( Math.toRadians(latitude2));*/
// 经度
double lng1 = Math.toRadians(longitude1);
double lng2 = Math.toRadians(longitude2);
/*BigDecimal lng1 = new BigDecimal( Math.toRadians(longitude1));
BigDecimal lng2 = new BigDecimal( Math.toRadians(longitude2));*/
// 纬度之差
//BigDecimal a = lat2.subtract(lat1);
double a=lat2-lat1;
// 经度之差
//BigDecimal b = lng2.subtract(lng1);
double b=lng2-lng1;
// 计算两点距离的公式
BigDecimal ss=new BigDecimal("0.000000");
BigDecimal yy=new BigDecimal("0.000000");
double m=a/d;
double n=b/d;
List<LatAndLog> objects = new ArrayList<>();
/* int q=a.compareTo(BigDecimal.ZERO);
int w=b.compareTo(BigDecimal.ZERO);*/
for(int i=1;i<d;i++){
if(a>=0){
yy=new BigDecimal(Math.toDegrees(lat1+i*m)).setScale(6,BigDecimal.ROUND_DOWN);
}else {
yy=new BigDecimal(Math.toDegrees(lat1-i*m)).setScale(6,BigDecimal.ROUND_DOWN);
}
if(b>=0){
ss= new BigDecimal(Math.toDegrees(lng1+i*n)).setScale(6,BigDecimal.ROUND_DOWN);
}else {
ss= new BigDecimal(Math.toDegrees(lng1-i*n)).setScale(6,BigDecimal.ROUND_DOWN);
}
LatAndLog latAndLog = new LatAndLog();
latAndLog.setLat(ss);
latAndLog.setLng(yy);
objects.add(latAndLog);
System.out.println(ss+","+yy);
}
System.out.println(objects);
return objects;
}
根据经纬度计算两点之间的距离,把计算的距离等分,并计算每等份的经纬度
最新推荐文章于 2023-06-21 09:58:59 发布