0

我需要在地图视图中显示多个注释并缩放以显示所有这些注释。我有代码

MKMapRect zoomRect = MKMapRectNull;

int i = 0;
for (Post *post in _allPostsToList) {
    if (((post.location2D.latitude == 0.0f)&&(post.location2D.longitude == 0.0f))||(!CLLocationCoordinate2DIsValid(post.location2D))) {
        i++;
        continue;
    }
    MyAnnotation *annotation = [[MyAnnotation alloc] initWithpost:post];
    annotation.tag = i++;
    [mapView addAnnotation:annotation];

    MKMapPoint annotationPoint = MKMapPointForCoordinate(annotation.coordinate);
    MKMapRect pointRect = MKMapRectMake(annotationPoint.x, annotationPoint.y, 0, 0);
    zoomRect = (MKMapRectIsNull(zoomRect))?pointRect:MKMapRectUnion(zoomRect, pointRect);
}
[mapView setVisibleMapRect:zoomRect animated:YES];

它工作正常,但我还需要一件事,需要地图中心的用户位置蓝色气泡,并显示上述所有注释。这个怎么做。我试过这个

-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{
        MKMapRect zoomRect = mapView.visibleMapRect;
        MKMapPoint annotationPoint = MKMapPointForCoordinate(newLocation.coordinate);
        MKMapRect pointRect = MKMapRectMake(annotationPoint.x, annotationPoint.y, 0, 0);
        zoomRect = (MKMapRectIsNull(zoomRect))?pointRect:MKMapRectUnion(zoomRect, pointRect);
        [mapView setVisibleMapRect:zoomRect animated:YES];
        [manager stopUpdatingLocation];

   }

它的工作但它没有以用户位置为中心如何做到这一点。谁能解决这个问题

4

2 回答 2

1

didUpdateToLocation您获得当前可见的 Rect (zoomRect) 时,如果它不为空,则将其与 pointRect 连接并对其进行缩放/平移。这将如何以 pointRect 为中心?只有当他们两个拥有完全相同的中心时才会发生这种情况。

如果您想以用户位置为中心但显示所有点,您可以获得点与用户位置的最大距离,并创建一个具有中心和跨度以匹配的 maprect。但是如果这些点都在一个方向上并且用户位置在屏幕的中间,那么屏幕的另一侧就被浪费了。

于 2013-01-22T00:23:30.210 回答
0

只是一个赌注;如何访问您的 mapView 的区域并尝试设置新中心:

MKCoordinateRegion region = mapView.region;
region.center = newLocation.coordinates;
[mapView setRegion:region animated:YES];
于 2013-01-21T22:55:20.370 回答