首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言問答

C 語言計算球面兩點距離:經緯度轉球面距離

     編輯:C 語言問答

已知兩地經緯度(lon1, lat1)、(lon2, lat2),地球半徑 R ≈ 6371 km。球面距離公式(Haversine):

double dLon = (lon2 - lon1) * PI / 180.0;
double dLat = (lat2 - lat1) * PI / 180.0;
double a = sin(dLat/2)*sin(dLat/2) +
           cos(lat1*PI/180)*cos(lat2*PI/180)*sin(dLon/2)*sin(dLon/2);
double c = 2 * atan2(sqrt(a), sqrt(1-a));
double distance = R * c;

或用向量內積求夾角:

// 轉換為單位向量
x = cos(lat)*cos(lon), y = cos(lat)*sin(lon), z = sin(lat)
cosθ = x1*x2 + y1*y2 + z1*z2
distance = R * acos(cosθ)

需包含 <math.h>,角度轉弧度乘 PI/180。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved