كيفية استخدام فئة cllocation الخاصة بـ iPhone لتعيين خط العرض وخط الطول للمتغيرات؟

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

سؤال

أحاول أن أتعلم كيفية استخدام فئة Cllocation لغرض إنشاء تطبيق iPhone الذي يأخذ موقع المستخدم الحالي ، ثم يستخدمه لاسترداد النتائج من قاعدة بيانات SQLite. للقيام بذلك ، أحتاج إلى الحصول على الموقع الحالي للمستخدم في البداية باستخدام فئة CLLOCATION ، وعلى وجه التحديد ، الطريقة:

(void)locationManager: (CLLocationManager *)manager didUpdateToLocation: (CLLocation *)newLocation fromLocation: (CLLocation *)oldLocation {}

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

- (void) locationManager:(CLLocationManager *)manager 
 didUpdateToLocation:(CLLocation *)newLocation
        fromLocation:(CLLocation *)oldLocation {

numUpdates++;

NSString *lat = [[NSString alloc] initWithFormat:@"%g", newLocation.coordinate.latitude];
latitudeTextField.text = lat;

NSString *lng = [[NSString alloc] initWithFormat:@"%g", newLocation.coordinate.longitude];
longitudeTextField.text = lng;

NSString *acc = [[NSString alloc] initWithFormat:@"%g", newLocation.horizontalAccuracy];
accuracyTextField.text = acc;

if (numUpdates == 1) {

    [lm stopUpdatingLocation];
    NSLog(@"latitude: %i longitude: %i", lat, lng);

}

ومع ذلك ، بدلاً من أن يظهر المنظورات في وحدة التحكم (أي 37.3317 لضمان خط العرض ، و -122.031 من أجل خط الطول) ، أحصل على الإخراج التالي ، والذي يختلف للأسف في كل مرة أقوم فيها بتشغيل الكود الخاص بي:

[Session started at 2010-11-03 01:43:36 -0400.]
2010-11-03 01:43:41.208 GPS[4702:207] latitude: 65138096 longitude: 65023248
Terminating in response to SpringBoard's termination.

[Session started at 2010-11-03 21:38:45 -0400.]
2010-11-03 21:39:37.072 GPS[5880:207] latitude: 65030208 longitude: 65070336
Terminating in response to SpringBoard's termination.

[Session started at 2010-11-03 21:53:12 -0400.]
2010-11-03 21:53:21.824 GPS[5899:207] latitude: 65042624 longitude: 65086352

هل يمكن لأي شخص أن يرى ما الذي أفعله خطأ ، ويريني كيفية تعيين قيمة خط عرض المستخدم بشكل صحيح ، ووضع خط الطول إلى متغير ، ثم طباعته على وحدة التحكم في NSLOG بتنسيقه العشري ، وليس في الدرجة صيغة؟

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

المحلول

%i هو لطباعة قيم int. في الكود الخاص بك ، LAT و LNG هما NSStrings (الكائنات) لذا استخدم %@:

NSLog(@"latitude: %@ longitude: %@", lat, lng);

نرى مواصفات تنسيق السلسلة.

نصائح أخرى

الموقع مختلف لأن بيانات GPS ليست دقيقة. إذا كنت بحاجة إلى بيانات دقيقة بما يكفي ، فتجاهل 3-4 المواقع الأولى عن طريق التصفية بناءً على newLocation.horizontalAccuracy.

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