CllocationManager قائلاً إنني نقلت 1200 قدمًا عندما ما زلت جالسًا على كرسي
-
25-09-2019 - |
سؤال
أحصل على قراءات غريبة عند استخدام 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 هو تحديد الاستدلال الخاص بك لقبول أو رفض التحديث. بعض الأشياء التي يجب مراعاتها هي الدقة الأفقية ، والوقت الذي يقضيه التحديث ، وعدد التحديثات السابقة التي تلقيتها. لقد رأيت عددًا لا بأس به من المخططات قد تمت مناقشتها على هذا الموقع سابقًا.