2

Google지도 SDK를 사용하여 내 앱에지도를 표시하는 iOS 앱이 있습니다.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는 위도와 경도를 포함하는 단지 구조체이다, 그래서 가능한 한 당신은 단순히, myLocation에 대한 변경 사항을 관찰 KVO를 사용 또한 가치가

CLLocationCoordinate2D myLocation = self.mapView.myLocation.coordinate; 

을 그지도보기하지 않습니다 아직 사용할 수 있습니다 유효한 위치에있다.

는 KVO에 대해 더 설명하기 :

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

당신은 할 수 있습니다

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

그런 다음 다음과 같은 방법을 구현해야합니다 다음과 같이

당신은 myLocation 속성에 대한 관찰자를 추가 할 수 있습니다 그 위치가 유효하다는 것을 알고 self.mapView.myLocation.coordinate에 안전하게 액세스하십시오.

는지도보기가 해제 될 때 관찰자로서 자신을 제거하는 것을 잊지 마십시오

색슨 이미 언급 한 바와 같이
[self.mapView removeObserver:self forKeyPath:@"myLocation"]; 

는지도보기은 자신의 현재 위치 표시 등의 표시됩니다. 추가하는 마커가 추가로 표시되지만, 마커를 만들 때 mapview가 유효한 위치를 아직 갖고 있지 않기 때문에 중간에있는 위도/경도 0,0에 추가됩니다 바다의.

+1

마커를 하드 코딩 된 위치에서 움직이는 것처럼 보이네요. 하지만 지금은 아프리카의 서부 해안가에있는 마커를 바다 중앙에 배치합니다 (나는 그렇지 않습니다). 축소하면 화면에 정확한 위치가있는 다른 마커가 표시 될 수 있지만 어디에서 오는지 알 수 없습니다. myLocation.latitude 및 myLocation.longitude에 카메라와 마커를 모두 설정했으며 앱이 이것이 바다의 한가운데 있다고 생각하는 것 같습니다. 내가 확인해야 할 다른 것이 있는가? 그리고 다른 마커는 어디에서 왔는가? – heyred

1

myLocationEnabled를 YES로 설정하면지도가 현재 위치에 마커를 자동으로 추가합니다. 따라서 직접 추가 할 필요는 없습니다.

기기와 앱이 내 위치를 결정하는 데 시간이 걸립니다. 처음 시작할 때 아직 위치를 알지 못하기 때문에 기본적으로 위도/경도는 0이됩니다. 이는 아프리카를 벗어납니다.

NigelG이 말했듯이 myVocation 속성에서 KVO를 사용하여 위치 업데이트시기를 확인할 수 있습니다.

관련 문제