如何获得地球上point1到point2的角度
How to get angle from point1 to point2 in earth
我花了很多时间在互联网上寻找一种方法来做到这一点。通过存在的文档我写了下面的代码,但它没有显示正确的角度。
什么问题?
private double angleFromCoordinate(double lat1, double long1, double lat2,
double long2) {
double dLon = (long2 - long1);
double y = Math.sin(dLon) * Math.cos(lat2);
double x = Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1)
* Math.cos(lat2) * Math.cos(dLon);
double brng = Math.atan2(y, x);
brng = Math.toDegrees(brng);
brng %= 360;
// brng = 360 - brng;
return brng;
}
已更新
以下代码的结果:
int angle = (int) angleFromCoordinate(36.288024, 59.615656
, 39.033659, 48.662504);
angle is '58'
方法 Math.cos
和 Math.sin
的参数采用弧度数。您正在将学位传递给此方法。您需要在方法开始时将度数转换为弧度。
private double angleFromCoordinate(double lat1, double long1, double lat2,
double long2) {
double lat1Rad = Math.toRadians(lat1);
double long1Rad = Math.toRadians(long1);
double lat2Rad = Math.toRadians(lat2);
double long2Rad = Math.toRadians(long2);
然后使用新变量lat1Rad
,以此类推剩下的数学运算。
我花了很多时间在互联网上寻找一种方法来做到这一点。通过存在的文档我写了下面的代码,但它没有显示正确的角度。
什么问题?
private double angleFromCoordinate(double lat1, double long1, double lat2,
double long2) {
double dLon = (long2 - long1);
double y = Math.sin(dLon) * Math.cos(lat2);
double x = Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1)
* Math.cos(lat2) * Math.cos(dLon);
double brng = Math.atan2(y, x);
brng = Math.toDegrees(brng);
brng %= 360;
// brng = 360 - brng;
return brng;
}
已更新 以下代码的结果:
int angle = (int) angleFromCoordinate(36.288024, 59.615656
, 39.033659, 48.662504);
angle is '58'
方法 Math.cos
和 Math.sin
的参数采用弧度数。您正在将学位传递给此方法。您需要在方法开始时将度数转换为弧度。
private double angleFromCoordinate(double lat1, double long1, double lat2,
double long2) {
double lat1Rad = Math.toRadians(lat1);
double long1Rad = Math.toRadians(long1);
double lat2Rad = Math.toRadians(lat2);
double long2Rad = Math.toRadians(long2);
然后使用新变量lat1Rad
,以此类推剩下的数学运算。