基于经纬度的空间距离计算--空间统计

小灰灰 2022-05-23 06:28 279阅读 0赞

空间统计–基于经纬度的空间距离计算

设空间划分为若干区块,每个区块给一个标号z ,如 1,2,…,Z 1 , 2 , . . . , Z ,其区号可根据邮政编码、医院ID号划分。设空间区块 i,j i , j 的坐标或经纬度为(xi,yi)(xj,yj) ( x i , y i ) ( x j , y j ) 之间的距离为 Lij L i j ,则在平面坐标 系下可用两点间距离公式计算,若是较大区域,则应使用地图的经纬度球面距离公式来计算。
计算具体分析:
已知两点经纬度,求取两点距离,当距离不远时,可用平面近似算法。设经度 为a度,纬度为b度,A 点经纬度为A=(a1,b1 a 1 , b 1 ),B点经纬度为A=(a2,b2 a 2 , b 2 ),则AB两点沿东西方向上的距离为:
这里写图片描述
AB两点沿南北方向上的距离:这里写图片描述
这里写图片描述
其中R为地球半径,可取6371.004千米或 6371km (地球赤道半径 6378.140 千米地球极地半径 6356.755 千米)。 AB 两点的直线距离可估算为 :
这里写图片描述

以下为JAVA实现已知两点经纬度求地理直线距离:

  1. //已知两点经纬度求地理直线距离
  2. public static void main(String[] args) {
  3. //地球半径
  4. double R=6378137.0;
  5. //模拟数据
  6. double lat1=109.99309;
  7. double log1=39.81625;
  8. double lat2=109.99456;
  9. double log2= 39.81595;
  10. //将角度转化为弧度
  11. double radLat1=(lat1*Math.PI/180.0);
  12. double radLat2=(lat2*Math.PI/180.0);
  13. double radLog1=(log1*Math.PI/180.0);
  14. double radLog2=(log2*Math.PI/180.0);
  15. //纬度的差值
  16. double a=radLat1-radLat2;
  17. //经度差值
  18. double b=radLog1-radLog2;
  19. //弧度长度
  20. double s=2*Math.asin(Math.sqrt(Math.pow(Math.sin(a/2), 2)+Math.cos(radLat1)*Math.cos(radLat2)*Math.pow(Math.sin(b/2), 2)));
  21. //获取长度
  22. s=s*R;
  23. //返回最接近参数的 long。结果将舍入为整数:加上 1/2
  24. s=Math.round(s*10000)/10000;
  25. System.out.println(s);
  26. }

结果为:
这里写图片描述

发表评论

表情:
评论列表 (有 0 条评论,279人围观)

还没有评论,来说两句吧...

相关阅读