2013-06-28 1 views
5

У меня есть GMSMapView правильно загружена и работает в моей ViewControllerGMSMapView MyLocation не дает фактическое местоположение

то, что я не в состоянии сделать это установка GMSCameraPosition вокруг моего места

это мой код:

mapView_.myLocationEnabled = YES; 
CLLocation* myLoc = [mapView_ myLocation]; 
GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:myLoc.coordinate.latitude 
                 longitude:myLoc.coordinate.longitude 
                  zoom:4]; 
[mapView_ setCamera:camera]; 

GPS включен, и приложение имеет все необходимые разрешения, но MyLocation возвращает ноль CLLocation, последовательно cameraWithLatitude:longitude:zoom: получить 0 0 координаты и отображает Африку вместо моего фактического местоположения (то есть не в АСО ические :))

ответ

-4

Попробуйте с помощью MapKit под VieDidLoad или ViewWillApper с помощью:

myMapView.showsUserLocation = YES; 

Вы можете добавить этот простой код под IBAction, если вы хотите, подобно:

- (IBAction)getLocation:(id)sender{ 

     myMapView.showsUserLocation = YES; 

} 

Я надеюсь, что это поможет вам

+0

мне нужно использовать карты Google и MapKit и GMS в любом случае работают вместе – Zerho

+0

но MapKit с помощью карты Google и я думаю, но не уверен, имеют один и тот же метод, как в «showUserLocation» или «getUserLocation», то вы можете добавить масштабирование и 'coord.llitude' & 'longitude' – BlackSheep

12

С официального Google Maps IOS SDK Документе Тион:

  • (BOOL) myLocationEnabled [чтение, запись, назначить] управления включена ли Мое расположение точек и точность круг.

По умолчанию NO.

  • (CLLocation *) MyLocation [читать назначьте] Если Мое местоположение включена, показывает, где местоположение пользователя точка втягивается.

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

Итак, когда вы установили mapView_.myLocationEnabled = YES;, он только говорит mapView раскрыть синюю точку, только если значение местоположения, предоставленный myLocation собственности. Пример кода из Google показывает, как наблюдать за местоположением пользователя с помощью метода KVO. (Рекомендуется) Вы также можете реализовать метод CLLocationManagerDelegate, чтобы обновить mapView.

-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation 
{ 
    [mapView animateToLocation:newLocation.coordinate]; 
    // some code... 
} 

Вот код из примера кода Google Maps о том, как использовать KVO для обновления местоположения пользователя.

// in viewDidLoad method... 
// Listen to the myLocation property of GMSMapView. 
    [mapView_ addObserver:self 
      forKeyPath:@"myLocation" 
       options:NSKeyValueObservingOptionNew 
       context:NULL]; 
// Ask for My Location data after the map has already been added to the UI. 
    dispatch_async(dispatch_get_main_queue(), ^{ 
    mapView_.myLocationEnabled = YES; 
    }); 

- (void)observeValueForKeyPath:(NSString *)keyPath 
         ofObject:(id)object 
         change:(NSDictionary *)change 
         context:(void *)context { 
    if (!firstLocationUpdate_) { 
    // If the first location update has not yet been recieved, then jump to that 
    // location. 
    firstLocationUpdate_ = YES; 
    CLLocation *location = [change objectForKey:NSKeyValueChangeNewKey]; 
    mapView_.camera = [GMSCameraPosition cameraWithTarget:location.coordinate 
                zoom:14]; 
    } 
} 
+0

- это ваша первая переменнаяLocationUpdate_, просто логическое свойство? – kevinl

+0

@kevinl да, на самом деле, второй фрагмент кода скопирован из кода образца Google ... – Jing

+2

не может поверить, что Google не включил метод в GMSMapViewDelegate, используя KVO, это просто взломать в этом случае ... –

Смежные вопросы