iPhone текущее местоположение пользователя координаты показывает, как (0,0)

голоса
8

Я пытаюсь получить пользователь текущей широту и долготу с помощью этого метода viewDidLoad. Результате карта правильно указывает на текущее местоположение, однако NSLog последовательно показывает:

2009-09-19 16:45:29.765 Mapper[671:207] user latitude = 0.000000
2009-09-19 16:45:29.772 Mapper[671:207] user longitude = 0.000000

Кто-нибудь знает, что я здесь отсутствует? Заранее спасибо за вашу помощь!

- (void)viewDidLoad {
    [super viewDidLoad];
    [mapView setMapType:MKMapTypeStandard];
    [mapView setZoomEnabled:YES];
    [mapView setScrollEnabled:YES];
    [mapView setShowsUserLocation:YES];

    CLLocation *userLoc = mapView.userLocation.location;
    CLLocationCoordinate2D userCoordinate = userLoc.coordinate;

    NSLog(@user latitude = %f,userCoordinate.latitude);
    NSLog(@user longitude = %f,userCoordinate.longitude);
}
Задан 19/09/2009 в 21:50
источник пользователем
На других языках...                            


8 ответов

голоса
9

Карта не будет пытаться получить расположение пользователей до тех пор, пока на самом деле отображается, насколько я знаю. Хороший тест, который, когда вы получите диалоговое окно с просьбой вас, если это нормально для приложения, чтобы получить расположение пользователей? По моему опыту, что всегда прийти только после того, как карта показывает на экране.

Лучший способ подойти к этой проблеме, если вы должны иметь место при запуске, является реализация классического кода ядра Расположение обработчика и получить расположение от этого изначально. Вы можете перестать получать обновления оттуда после того, как карты и получить дальнейшие изменения оттуда (хотя, если вам нужны постоянные обновления вы лучше просто держать со стандартными обновлениями Core Location. Если вы думаете об этом, когда у вас есть «показывает пользователь расположение»включен в карте дальнейшего использовании Core Location по вашему приложению по существу свободно, так как GPS будет разжег все время так или иначе.

Ответил 20/09/2009 в 03:05
источник пользователем

голоса
4

Если вы пытаетесь получить пользовательские координаты в viewDidLoad () метод, он всегда будет давать результат 0,0, потому что он еще не инициализирован.

Вы должны смотреть на «Где я» образец формы кода Apple , сайт. Это объясняет то , что вам нужно. Вы должны использовать CLLocationManager класс. Вам также понадобится метод

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

Этот метод будет вызываться автоматически каждый раз, когда местоположение пользователя обновляется. Если вы используете симулятор, то этот метод будет вызываться только один раз, и он будет возвращать некоторые стандартные координаты.

Надеюсь, поможет.

Ответил 21/09/2009 в 06:36
источник пользователем

голоса
2

Из документа на CLLocation , если горизонтальная точность или точность по вертикали имеет отрицательное значение , это означает , что он не может найти значение. Я подозреваю , что это то , что здесь происходит. Имейте в виду , что если вы только посмотрите один раз, он может дать вам приблизительное последнее известное местоположение прежде , чем когда - либо улучшения результата точности.

Горизонтальная Точность координат широты и долготы определить центр окружности, и это значение указывает на радиус этой окружности. Отрицательное значение указывает на то, что широту и долготу, являются недействительными.

Ответил 19/09/2009 в 21:55
источник пользователем

голоса
1

Как Кендалл словам, MKMapView не имеет местоположение пользователя , пока он не закончит загрузку, и метод viewDidLoad обычно слишком рано , чтобы просить его. Более простой способ , чем использование CoreLocation заключается в реализации метода MKMapViewDelegate -(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation. Это даст вам местоположение пользователя , как только он находится, без необходимости иметь дело с CLLocationManager.

Ответил 08/01/2013 в 18:33
источник пользователем

голоса
1

Вы должны получить координаты от CoreLocation вместо MapKit. MapView будет отображать местоположение пользователя после того, как он на самом деле получил текущее местоположение. Перед тем как местоположение определено, широта и долгота и устанавливается в 0. 3

Вы должны создать instace CLLocationManager, набор делегата. Вы будете уведомлены, когда местоположение определено.

Ответил 20/09/2009 в 06:17
источник пользователем

голоса
0

Попробуйте это

CLLocation *userLoc = mapView.userLocation.location;
CLLocationCoordinate2D userCoordinate = userLoc.coordinate;

NSLog(@"user latitude = %f",userCoordinate.latitude);
NSLog(@"user longitude = %f",userCoordinate.longitude);

ViewdidAppear: или вызвать выполнение seletor после задержки

Ответил 05/05/2014 в 12:32
источник пользователем

голоса
0

Этот ответ объясняет, как установить вид карты с местоположением пользователя:

HowTo инициализирует MKMapView с заданным местоположением пользователя?

Ответил 09/03/2010 в 16:52
источник пользователем

голоса
-1

Добавьте это в разделе viewDidLoad

mapView.showsUserLocation = YES;
Ответил 02/05/2010 в 05:56
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more