我正在尝试确定跟踪器是否在距目的地5公里的范围内。 该追踪器具有纬度,经度和准确性
所以这会给我们
public static void Main()
{
// Current location
var trackerLat = <Lat>;
var trackerLng = <Lng>;
var trackerAcc = 150;
// Destination
var destinationLat = <Lat>;
var destinationLng = <Lng>;
var withingRange = 5000;
if (isWithingRange(trackerLat, trackerLng, trackerAcc, destinationLat, destinationLng, withingRange))
Console.WriteLine("Close");
else
Console.WriteLine("Not close");
}
private static bool isWithingRange(double c1x, double c1y, double r1, double c2x, double c2y, double r2) {
var dX = c1x - c2x;
var dY = c1y - c2y;
var radius = r1 + r2;
var distsqt = Math.Sqrt((dX * dX) + (dY * dY));
Console.WriteLine(String.Format("Val1: {0}, val2: {1}", distsqt, radius));
if (distsqt < radius)
return true;
else
return false;
}
但这表示它总是在:(
与坐标系相比,我认为范围格式是错误的,但是我似乎找不到如何正确转换
答案 0 :(得分:3)
看看GeoCoordinate
(System.Device.Location)。它具有一种GetDistanceTo()
方法,可为您提供到另一个GeoCoordinate的距离,以米为单位。
https://docs.microsoft.com/en-us/dotnet/api/system.device.location.geocoordinate
答案 1 :(得分:3)
使用System.Device
:
var location1 = new System.Device.Location.GeoCoordinate(latitude1, longitude1);
var location2 = new System.Device.Location.GeoCoordinate(latitude2, longitude2);
return location1.GetDistanceTo(location2) <= (radius1 + radius2);