CllocationManager قائلاً إنني نقلت 1200 قدمًا عندما ما زلت جالسًا على كرسي

StackOverflow https://stackoverflow.com/questions/2189484

سؤال

أحصل على قراءات غريبة عند استخدام CllocationManager. تم الإبلاغ عن LAT/LONG على الفور ، ولكن المسافة المقطوعة هي طريق الطريق. لقد قمت بتنفيذ طريقة المندوب التالية على النحو التالي:

.h:
    CLLocationManager *mLocationManager;
    CLLocation *mStartDistance;

و

.m:
    - (void) locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation
    fromLocation:(CLLocation *)oldLocation
    {
        NSLog(@"%g", newLocation.coordinate.latitude);
        NSLog(@"%g", newLocation.coordinate.longitude);
        NSLog(@"%g", newLocation.altitude);
        NSLog(@"%g", newLocation.verticalAccuracy);

    if (mStartDistance == nil)
    { mStartDistance = newLocation; }

    CLLocationDistance dist = [newLocation getDistanceFrom:mStartDistance];
    NSLog(@"%gm", dist);
}

وعندما أقوم بتشغيل هذا على جهازي ، أحصل على ما يلي (Lat/Long ملثمين لحماية Heh المذنب):

] xx.xxxx
] -yy.yyyy
] 0
] -1
] 0m

] xx.xxxx
] -yy.yyyy
] 0
] -1
] 0m

] xx.xxxx
] -yy.yyyy
] 0
] -1
] 376.133m <-- wat?

لا أفهم لماذا قول لقد تحركت +376 مترًا .. هذا مثل +1200 قدم!

هل كانت مفيدة؟

المحلول

إذا قمت أيضًا بتسجيل الدخول الخاص بك newLocation.horizontalAccuracy, ، من المحتمل أن ترى ذلك في التحديثين الأولين ، فهو أكثر من 400 متر. لا يستخدم GPS (أنت في الداخل ويعطيك -1 لدقة الارتفاع الرأسية) ، ويمكن أن يكون التثليث للهاتف الخلوي سيئًا للغاية في البداية. في بعض الأحيان يكون موقعي الأولي دقيقًا فقط إلى 10 أميال ، لكنه لا يزال يضع أفضل تخمينه. بمجرد أن تحصل على قفل أفضل ، يمكن أن تتحرك هذه النقطة بسرعة كبيرة.

جزء من الخداع في استخدام Corelocation هو تحديد الاستدلال الخاص بك لقبول أو رفض التحديث. بعض الأشياء التي يجب مراعاتها هي الدقة الأفقية ، والوقت الذي يقضيه التحديث ، وعدد التحديثات السابقة التي تلقيتها. لقد رأيت عددًا لا بأس به من المخططات قد تمت مناقشتها على هذا الموقع سابقًا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top