2012-04-21 7 views
1

좌표 준수하지 않는 I (가) 버튼을 누르면 찾을 때 사용자의 현재 위치를 중심으로 다음 코드를 가지고 :아이폰 OS MKMapView setCenterCoordinate 정확한

- (void)locate 
{ 
    if (self.curLocation) { 
     [self.googleMapView setCenterCoordinate:self.curLocation.coordinate animated:YES]; 
     NSLog(@"setting center (%f,%f), but got (%f,%f)", self.curLocation.coordinate.latitude, self.curLocation.coordinate.longitude, self.googleMapView.centerCoordinate.latitude, self.googleMapView.centerCoordinate.longitude); 
    } 
} 

NSLog의 출력은 "센터 (37.785834을 설정하는 것입니다, (37.785826, -122.406406) "

이는 setCenterCoordinate가 지시 된 좌표 대신 대략적인 좌표로 이동했음을 의미합니다. 확대/축소 수준을 구현할 때 동일한 위치에서 축소 한 다음 다시 확대하면 (setRegion에서 중심 좌표도 변경되기 때문에) 이전 위치에서 멀리 이동하므로 매우 불편합니다. 이는 반 직관적이며 Android 플랫폼 API는 이러한 비정상적인 동작을 나타내지 않습니다. setCenterCoordinate가 이동하지 않는 이유

누군가 설명해 주시겠습니까 정확한 좌표, 가능하다면, 어떤 방법 확대 있는지 확인 아웃 및-에서 동일한 중심을해야합니다. 감사.

+0

MKMapView의 프레임을 변경 하시겠습니까? –

+0

나는 그렇게 생각하지 않는다 ... 나는 다른 모든 mapview 관련 코드를 제거했다. 그리고 이것은 남아있는 유일한 것이어야한다. –

답변

0

setCenterCoordinate의 마지막 파라미터는 "애니메이션"이다. YES로 설정하면 올바른 위치로 이동하는 데 1 초 정도 걸릴 수 있습니다. 다른 스레드에서 발생하므로 맵이 목표 좌표에 도달하기 전에 NSLog 행이 발생합니다. 센터를 읽으려면 잠시 기다려야합니다. 또는 화면의 버튼을 통해 NSLog 문을 활성화하면지도가 움직이지 않는 것을 확인한 후에 확인할 수 있습니다.

+0

귀하의 제안을 시도했습니다. 아직도 나를 준다 (37.785826, -122.406406). –

+0

나는이 두 좌표를 조사해 보았고 그것들은 2m 미만 떨어져있는 것처럼 보였다. 휴대 전화에 내장 된 GPS의 정확성을 감안할 때 운동이 앱과 관련이 없다는 것을 알 수 있습니다. – Craig

+0

안녕하세요 크레이그, GPS는 여기 내 문제와 관련이 없습니다. 명시 적으로 특정 지점 (37.785834, -122.406417)으로 설정되도록 센터에 요청하지만이를 준수하지는 않습니다. 이 동작을 방지해야하는 이유는 setCenterCoordinate가 흔들 리면 거리 X에서 축소 (setRegion) 한 다음 나중에 다시 확대하면 다른 거리 Y에 착륙하게되므로 중심 좌표를 변경하지 않았기 때문입니다. –

4

당신은 원래 "좋은"센터는 바르 좌표를 구할 수 후 사용이 확대 될 때마다 그. 항상 다시 시작 위치로 이동해야 그런 식으로. 단추로 확대하거나 메서드를 호출하여 확대한다고 가정합니다. 센터는 좌표

는 신뢰성이 될 것 같지 않습니다. 확대 할 때 더 안정적으로 표시되지만, 사용자가 묻는대로 정확하게 설정되지는 않습니다. regionThatFits:에 의해 반환 된 중심 좌표를 사용하더라도 정확하게 일치하는 것은 아닙니다. 을 사용하여 실험 해 볼 수 있습니다.

- (void)viewDidAppear:(BOOL)animated 
{ 
    MKCoordinateSpan span = MKCoordinateSpanMake(0.0001f, 0.0001f); 
    CLLocationCoordinate2D coordinate = {35.67106,139.764909}; 
    MKCoordinateRegion region = {coordinate, span}; 

    MKCoordinateRegion regionThatFits = [self.mapView regionThatFits:region]; 
    NSLog(@"Fit Region %f %f", regionThatFits.center.latitude, regionThatFits.center.longitude); 

    [self.mapView setRegion:regionThatFits animated:YES]; 
// [self.mapView setRegion:region animated:YES]; 
// [self.mapView setCenterCoordinate:coordinate animated:NO]; 
} 

- (void)mapView:(MKMapView *)myMapView regionDidChangeAnimated:(BOOL)animated 
{ 
    NSLog(@"Center: %f %f", myMapView.region.center.latitude,myMapView.region.center.longitude); 
} 
+0

그래서 (37.785826, -122.406406) 좌표 맵 뷰는 좌표를 묻는 대신 실제로 좌표가 시작되는 위치로 되돌아 가도록합니다. –

+0

그래,'CLLocationCoordinate2D centerCoordinate' 같은 맵이 확대 될 때마다 같은 것을 저장 (당신이지도를 축소해야 어떤 지역과 함께) 중심 좌표로 설정합니다. –