मैं यह निर्धारित करने की कोशिश कर रहा हूं कि कोई ट्रैकर अपने गंतव्य के 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;
    }

लेकिन यह कहता है कि यह हमेशा सीमा के भीतर है :(

मुझे लगता है कि समन्वय प्रणाली की तुलना में रेंज प्रारूप गलत है, लेकिन मैं इसे सही तरीके से परिवर्तित करने के तरीके पर नहीं ढूंढ सकता

Fiddle: https://dotnetfiddle.net/FEGC2B

c#
1
Kiwi 17 जिंदा 2020, 12:25
2
कृपया <Lat> और <Lng> के बजाय कुछ वास्तविक उदाहरण डालें, ताकि हम किसी भी संभावित समाधान का परीक्षण कर सकें
 – 
canton7
17 जिंदा 2020, 12:26
3
ध्यान दें कि अक्षांश और देशांतर किलोमीटर की इकाइयों में नहीं होते हैं। लैट/एलएनजी और किमी की तुलना करने की कोशिश करने से काम नहीं चल रहा है
 – 
canton7
17 जिंदा 2020, 12:27
1
आप शायद Haversine फ़ॉर्मूला पर एक नज़र डालना चाहते हैं
 – 
canton7
17 जिंदा 2020, 12:28

2 जवाब

सबसे बढ़िया उत्तर

GeoCoordinate (System.Device.Location) पर एक नज़र डालें। इसमें एक GetDistanceTo() विधि है जो आपको मीटर में दूसरे जियोऑर्डिनेट की दूरी बताती है।

https://docs.microsoft.com/en-us/dotnet/api/system.device.location.geocoordinate

3
Daniel Stackenland 17 जिंदा 2020, 12:31

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);
3
nvoigt 17 जिंदा 2020, 12:31