Действительно ли возможно использовать собственного менеджера местоположения MKMapView для возврата пользователей текущее местоположение для передачи в веб-сервис?
Я имею mapView.showsUserLocation=YES;
и это действительно возвращает допустимую синюю точку в моем местоположении, но в средстве моделирования, его Купертино - который прекрасен, но когда я смотрю на
mapView.userLocation.coordinate.latitude
, его равное 180, тогда как CLLocationManager возвращает корректный, 37.3317.
Я не хочу иметь несколько менеджеров местоположения для своих трех вкладок, таким образом, использовать собственный mapViews было бы полезно.
Спасибо.
Вы могут получить местоположение пользователя от MkmapView. Вы просто пропустите свойство в своем поисе. Это должно быть:
mapView.userLocation.location.coordinate.latitude;
userLocation хранит только атрибут локализации Cllocation и атрибут обновления BOOL. Вы должны перейти к атрибуту местоположения, чтобы получить координаты.
- Сделайте
Редактирование: UserLocation Mkmapview не обновляется, пока карта не завершит загрузку, и проверка слишком рано, вернет нули. Чтобы избежать этого, я предлагаю использовать метод MkmapviewDelegate
- (void) mapview: (mkmapview *) mapview didupdateuserlocation: (mkuserlocation *) userlocation
.
Итак, чтобы использовать уникальный 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