Получите пользовательское местоположение из MKMapView

Действительно ли возможно использовать собственного менеджера местоположения MKMapView для возврата пользователей текущее местоположение для передачи в веб-сервис?

Я имею mapView.showsUserLocation=YES; и это действительно возвращает допустимую синюю точку в моем местоположении, но в средстве моделирования, его Купертино - который прекрасен, но когда я смотрю на

mapView.userLocation.coordinate.latitude, его равное 180, тогда как CLLocationManager возвращает корректный, 37.3317.

Я не хочу иметь несколько менеджеров местоположения для своих трех вкладок, таким образом, использовать собственный mapViews было бы полезно.

Спасибо.

27
задан gerry3 14 January 2010 в 02:39
поделиться

2 ответа

Вы могут получить местоположение пользователя от MkmapView. Вы просто пропустите свойство в своем поисе. Это должно быть:

mapView.userLocation.location.coordinate.latitude;

userLocation хранит только атрибут локализации Cllocation и атрибут обновления BOOL. Вы должны перейти к атрибуту местоположения, чтобы получить координаты.

- Сделайте

Редактирование: UserLocation Mkmapview не обновляется, пока карта не завершит загрузку, и проверка слишком рано, вернет нули. Чтобы избежать этого, я предлагаю использовать метод MkmapviewDelegate - (void) mapview: (mkmapview *) mapview didupdateuserlocation: (mkuserlocation *) userlocation .

44
ответ дан 28 November 2019 в 05:14
поделиться

Итак, чтобы использовать уникальный CllocateManager, вы можете создать класс, чтобы быть делегатом для всех ваших карт., Итак, вместо того, чтобы делать:

self.locationManager = [[CLLocationManager alloc] init];
    _locationManager.delegate = self;

сделать что-то вроде:

self.locationManager = [[CLLocationManager alloc] init];
    _locationManager.delegate = mySharedDelegate;

, где MySharedDelegate ваш класс со всеми Методы делегата CllocationManager.

Вы можете получить действительную координату для userLocation только после первого вызова

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

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

Используйте следующий метод на вашем делегателе CllocationManager для регистрации текущего местоположения, когда он найден:

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
    NSLog(@"---------- locationManager didUpdateToLocation");
    location=newLocation.coordinate;

    NSLog(@"Location after calibration, user location (%f, %f)", _mapView.userLocation.coordinate.latitude, _mapView.userLocation.coordinate.longitude);
}

У вас есть идея?

ура,
VFN

3
ответ дан 28 November 2019 в 05:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: