2013-06-28 30 views
5

Tôi có một GMSMapView nạp đúng cách và làm việc bên trong viewController tôiGMSMapView Vị trí của tôi không đưa ra vị trí thực tế

những gì tôi đang không thể làm là thiết lập các GMSCameraPosition xung quanh vị trí của tôi

đây là mã của tôi:

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

GPS được bật và ứng dụng có tất cả quyền cần thiết nhưng myLocation trả về một CLLocation nil, do đó cameraWithLatitude:longitude:zoom: nhận 0 0 tọa độ và hiển thị Châu Phi thay vì vị trí thực tế của tôi (không nằm trong afr) ICA :))

Trả lời

-4

Cố gắng sử dụng MapKit, dưới sự VieDidLoad hoặc ViewWillApper sử dụng:

myMapView.showsUserLocation = YES; 

Bạn có thể thêm mã đơn giản này dưới IBAction nếu bạn muốn, giống như một:

- (IBAction)getLocation:(id)sender{ 

     myMapView.showsUserLocation = YES; 

} 

Tôi hy vọng điều này sẽ giúp bạn

+0

tôi cần phải sử dụng bản đồ google, và MapKit và GMS là bằng mọi cách làm việc cùng nhau – Zerho

+0

nhưng mapKit sử dụng một bản đồ google và tôi nghĩ nhưng không chắc chắn có cùng một phương pháp giống như một 'showUserLocation' hoặc 'getUserLocation' rồi bạn có thể thêm zoom và 'coordinate.latitude' & 'longitude' – BlackSheep

12

Từ tài liệu chính thức của Google SDK iOS SDK tion:

  • (BOOL) myLocationEnabled [đọc, viết, gán] Controls dù My Location dấu chấm và chính xác vòng tròn được kích hoạt.

Mặc định là KHÔNG.

  • (CLLocation *) myLocation [đọc, gán] Nếu Vị trí của tôi được bật, cho biết vị trí điểm người dùng đang được vẽ.

Nếu bị tắt hoặc được bật nhưng không có sẵn dữ liệu vị trí thì sẽ không có. Tài sản này được quan sát bằng KVO.

Vì vậy, khi bạn thiết lập mapView_.myLocationEnabled = YES;, nó chỉ nói với các mapView để lộ dấu chấm màu xanh chỉ khi bạn có một giá trị vị trí trao cho các myLocation tài sản. Mã mẫu từ Google cho thấy cách quan sát vị trí của người dùng bằng phương pháp KVO (Khuyến nghị) Bạn cũng có thể triển khai phương thức CLLocationManagerDelegate, để cập nhật mapView.

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

Đây là mã từ mã mẫu bản đồ google về cách sử dụng KVO để cập nhật vị trí của người dùng.

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

là biến firstLocationUpdate_ của bạn chỉ là thuộc tính boolean? – kevinl

+0

@kevinl vâng, trên thực tế, đoạn mã thứ hai được sao chép từ mã mẫu của google ... – Jing

+2

không thể tin rằng Google không bao gồm một phương thức trong GMSMapViewDelegate, sử dụng KVO là loại hack trong trường hợp này ... –