2013-06-28 8 views
5

Ho un GMSMapView caricata correttamente e di lavoro dentro la mia viewcontrollerGMSMapView miaPosizione non dando posizione attuale

quello che non sono in grado di fare è impostare il GMSCameraPosition intorno alla mia posizione

questo è il mio codice:

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

GPS è abilitato e l'applicazione dispone di tutte le autorizzazioni necessarie, ma miaPosizione restituisce una CLLocation nullo, di conseguenza cameraWithLatitude:longitude:zoom: ottenere 0 0 coordinate e visualizza l'Africa, invece della mia posizione attuale (che non è in AFR ica :))

risposta

-4

Prova ad usare MapKit, sotto la VieDidLoad o ViewWillApper utilizzando:

myMapView.showsUserLocation = YES; 

è possibile aggiungere questo semplice codice sotto l'IBAction se si vuole, come un:

- (IBAction)getLocation:(id)sender{ 

     myMapView.showsUserLocation = YES; 

} 

Spero che questo aiuto si

+0

ho bisogno di usare le mappe di Google, e MapKit e GMS sono in alcun modo lavorare insieme – Zerho

+0

ma MapKit utilizzando una mappa di google e penso ma non è sicuro avere lo stesso metodo come un 'showUserLocation' o 'getUserLocation' poi puoi aggiungere zoom e 'coordinate.latitudine' e 'longitudine' – BlackSheep

12

da documenta ufficiale di Google Maps per iOS SDK zione:

  • (BOOL) myLocationEnabled [leggere, scrivere, assegnare] Controlla se il cerchio La mia posizione punto e la precisione è attivata.

Il valore predefinito è NO.

  • (CLLocation *) miaPosizione [sola lettura, assegnare] Se mia posizione è attivato, rivela dove è in corso di elaborazione il punto posizione dell'utente.

Se è disabilitato o è abilitato ma non sono disponibili dati di posizione, questo sarà nullo. Questa proprietà è osservabile usando KVO.

Quindi, quando si imposta mapView_.myLocationEnabled = YES;, si dice solo la mapView per rivelare il punto blu solo se si dispone di un valore posizione indicata alla proprietà myLocation. Il codice di esempio di Google mostra come osservare la posizione dell'utente utilizzando il metodo KVO. (Consigliato) È anche possibile implementare il metodo CLLocationManagerDelegate per aggiornare mapView.

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

Ecco il codice del codice di esempio di google maps su come utilizzare KVO per aggiornare la posizione dell'utente.

// 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

la variabile firstLocationUpdate_ è solo una proprietà booleana? – kevinl

+0

@kevinl sì, in realtà, i secondi snippet di codice vengono copiati dal codice di esempio di google ... – Jing

+2

non riesco a credere che Google non includesse un metodo in GMSMapViewDelegate, utilizzando KVO è un po 'come l'hacking in questo caso ... –