C# 根据经纬度计算旋转角
时间: 2023-07-12 15:10:54 浏览: 140
经纬度计算
根据经纬度计算旋转角需要明确两个点的经纬度坐标以及它们之间的距离。然后可以使用三角函数计算出旋转角度。以下是用 C# 实现的示例代码:
```csharp
using System;
public class RotationCalculator
{
// 计算两个经纬度点之间的距离(单位:米)
private static double CalculateDistance(double lat1, double lng1, double lat2, double lng2)
{
double radLat1 = lat1 * Math.PI / 180.0;
double radLat2 = lat2 * Math.PI / 180.0;
double a = radLat1 - radLat2;
double b = lng1 * Math.PI / 180.0 - lng2 * Math.PI / 180.0;
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)));
s = s * 6378137.0;
return s;
}
// 计算旋转角度
public static double CalculateRotationAngle(double lat1, double lng1, double lat2, double lng2)
{
double distance = CalculateDistance(lat1, lng1, lat2, lng2);
double angle = Math.Asin(Math.Abs(lng2 - lng1) / distance) * 180.0 / Math.PI;
if (lat2 >= lat1 && lng2 >= lng1)
{
angle = angle;
}
else if (lat2 < lat1 && lng2 >= lng1)
{
angle = 180 - angle;
}
else if (lat2 < lat1 && lng2 < lng1)
{
angle = 180 + angle;
}
else if (lat2 >= lat1 && lng2 < lng1)
{
angle = 360 - angle;
}
return angle;
}
}
```
使用示例:
```csharp
double lat1 = 39.9075;
double lng1 = 116.39723;
double lat2 = 39.9075;
double lng2 = 116.40723;
double rotationAngle = RotationCalculator.CalculateRotationAngle(lat1, lng1, lat2, lng2);
Console.WriteLine($"旋转角度:{rotationAngle}");
```
其中,`lat1` 和 `lng1` 表示第一个经纬度点的纬度和经度,`lat2` 和 `lng2` 表示第二个经纬度点的纬度和经度,`rotationAngle` 表示计算得到的旋转角度。
阅读全文