2014-05-22 131 views
2

我有一個iOS應用程序,它使用Google Maps SDK在我的應用程序中顯示地圖。在Google地圖上顯示當前位置

我設法讓地圖顯示,但我不知道如何設置相機或標記到用戶當前位置。

我硬編碼的座標只是測試是地圖工作,但我現在堅持如何顯示用戶的當前位置。

這裏是我的代碼到中心相機座標

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:47.995602 longitude:-78.902153 zoom:6]; 

    self.mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera]; 

    self.mapView.myLocationEnabled = YES; 
    self.mapView.mapType = kGMSTypeNormal; 
    self.mapView.accessibilityElementsHidden = NO; 
    self.mapView.settings.scrollGestures = YES; 
    self.mapView.settings.zoomGestures = YES; 
    self.mapView.settings.compassButton = YES; 
    self.mapView.settings.myLocationButton = YES; 
    self.mapView.delegate = self; 
    self.view = self.mapView; 

    [self placeMarkers]; 
} 

這裏是顯示在我試圖獲取當前位置如下座標

-(void)placeMarkers 
{ 
    GMSMarker *marker = [[GMSMarker alloc] init]; 

    marker.position = CLLocationCoordinate2DMake(47.995602, -78.902153); 
    marker.title = @"PopUp HQ"; 
    marker.snippet = @"Durham, NC"; 
    marker.icon = [GMSMarker markerImageWithColor:[UIColor blueColor]]; 
    marker.opacity = 0.9; 
    marker.map = self.mapView; 
} 

標記代碼:

CLLocationCoordinate2D *myLocation = self.mapView.myLocation.coordinate; 

但我得到的錯誤:

Initializing 'CLLocationCoordinate2D' with an expression of incompatible type 'CLLocationCoordinate2D'

如何獲取當前位置傳遞給相機以及標記?

回答

4

CLLocationCoordinate2D只是包含經度和緯度結構,所以你可以簡單地使用

CLLocationCoordinate2D myLocation = self.mapView.myLocation.coordinate; 

這也是值得使用志願觀察變化myLocation,因爲它有可能的MapView還不會有一個有效的位置。

爲了進一步解釋有關志願:

[self.mapView addObserver:self 
      forKeyPath:@"myLocation" 
      options:(NSKeyValueObservingOptionNew | 
         NSKeyValueObservingOptionOld) 
      context:NULL]; 

然後您應該實現以下方法:

- (void)observeValueForKeyPath:(NSString *)keyPath 
        ofObject:(id)object 
        change:(NSDictionary *)change 
        context:(void *)context { 
    if ([keyPath isEqualToString:@"myLocation"]) { 
//   NSLog(@"My position changed"); 
    } 
} 

您可以

可以爲myLocation屬性添加如下觀察員然後安全地訪問self.mapView.myLocation.coordinate,知道該位置是有效的。

不要忘了當的MapView被釋放刪除自己的觀察員:

[self.mapView removeObserver:self forKeyPath:@"myLocation"]; 

正如撒克遜已經提到,的MapView將顯示它自己的當前位置指示器。除此之外,還會顯示您添加的標記,但是當您創建標記時,mapview可能還沒有有效的位置,因此它將添加到位於中間的緯度/經度0,0處的海洋。

+1

好吧,似乎是從硬編碼的位置移動標記。但它現在將標記放置在海洋中央 - 就在非洲西海岸(我不在這裏)。如果我縮小,我可以看到屏幕上的另一個標記與我的正確位置,但我不知道這是從哪裏來的?我已將相機和標記設置爲myLocation.latitude和myLocation.longitude,應用程序似乎認爲這是在海洋中間?還有什麼我需要檢查,另一個標記從哪裏來? – heyred

1

當您將myLocationEnabled設置爲YES時,地圖會自動在當前位置添加一個標記。所以你可能不需要添加你自己的?

設備和您的應用需要花時間來確定您的位置。當它啓動時,它可能還不知道你的位置,所以它默認爲緯度/經度爲零,非洲非洲。

正如NigelG所說,您可以使用myLocation屬性上的KVO來查找位置更新的時間。

相關問題