检查两个半径范围内的地理位置是否在彼此的半径范围内

时间:2020-01-17 09:25:23

标签: c#

我正在尝试确定跟踪器是否在距目的地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;
    }

但这表示它总是在:(

与坐标系相比,我认为范围格式是错误的,但是我似乎找不到如何正确转换

提琴:https://dotnetfiddle.net/FEGC2B

2 个答案:

答案 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);