我正在做一个项目(iOS 7平台),在这个项目中,我需要5公里左右的商店的当前位置,所以如何计算跨度/区域值以在地图上显示所有当前位置的商店。
MKMapRect zoomRect = MKMapRectNull;
double inset;
for (id <MKAnnotation> annotation in mapVW.annotations)
{
MKMapPoint annotationPoint = MKMapPointForCoordinate(annotation.coordinate);
MKMapRect pointRect = MKMapRectMake(annotationPoint.x, annotationPoint.y, 0.1, 0.1);
zoomRect = MKMapRectUnion(zoomRect, pointRect);
inset = -zoomRect.size.width * 20;
}
[mapVW setVisibleMapRect:MKMapRectInset(zoomRect, inset, inset) animated:YES];
这就是我正在尝试的
感谢
目前尚不清楚您的确切问题是什么,但以下内容可能会有所帮助:
-
inset
的计算看起来是错误的。它将inset
(侧面的填充)设置为整个缩放区域宽度的20倍。您可能想要的是将inset
设置为整个宽度的一小部分。也许你指的是0.20
而不是20.0
:inset = -zoomRect.size.width * 0.20;
您也不需要在
for
循环中重复设置inset
,因为它只取决于最终的width
。您可以在调用setVisibleMapRect
之前,将上述行移动到for
循环之后。 - 你提到了当前位置的一些问题。目前还不清楚问题是什么,但也许你的意思是这个缩放代码不包括当前位置?如果是这样的话,那么当调用此代码时,可能还没有确定当前位置。尝试将此代码移动到
didUpdateUserLocation
委托方法(或从中调用它)。确保showsUserLocation
是YES
,并且已设置地图视图的delegate
顺便说一句:iOS 7包括新方法showAnnotations:animated:
,它可以自动确定某些给定注释的边界矩形,并为您设置地图的可见区域。它不允许您像现在这样指定自定义插入(尽管默认值还不错)。因此,您可以执行以下操作,而不是上述循环:
[mapVW showAnnotations:mapVW.annotations animated:YES];
NSArray *anno_Arrr = mapview.annotations;
[mapview showAnnotations:anno_Arrr animated:YES];