Как использовать класс CLLocation в iPhone, чтобы назначать широту и долготу переменным? - PullRequest
1 голос
/ 04 ноября 2010

Я пытаюсь узнать, как использовать класс 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 в десятичном формате, а НЕ в формате градуса?

Ответы [ 2 ]

0 голосов
/ 04 ноября 2010

Местоположение отличается, потому что данные GPS не точны.Если вам нужны достаточно точные данные, игнорируйте 3-4 первых местоположения путем фильтрации на основе newLocation.horizontAccuracy.

0 голосов
/ 04 ноября 2010

%i для печати значений int.В вашем коде lat и lng являются NSStrings (объектами), поэтому используйте %@:

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

См. Спецификаторы формата строки .

...