使用MapKit显示特定的区域

我想知道是否有可能只显示地图上的特定区域,而不是使用Map Kit的完整世界地图。 如果我想在我的应用程序中显示亚洲地图,那么映射工具包将隐藏地图的其余部分。

要处理“地图套件隐藏地图剩余部分”的要求,您可以做的一件事就是创build一个覆盖整个世界的黑色多边形覆盖图,并在亚洲(或任何您喜欢的地方)进行切割。

例如,在初始化地图的地方(例如,在viewDidLoad中):

CLLocationCoordinate2D asiaCoords[4] = { {55,60}, {55,150}, {0,150}, {0,60} }; //change or add coordinates (and update count below) as needed self.asiaOverlay = [MKPolygon polygonWithCoordinates:asiaCoords count:4]; CLLocationCoordinate2D worldCoords[4] = { {90,-180}, {90,180}, {-90,180}, {-90,-180} }; MKPolygon *worldOverlay = [MKPolygon polygonWithCoordinates:worldCoords count:4 interiorPolygons:[NSArray arrayWithObject:asiaOverlay]]; //the array can have more than one "cutout" if needed [myMapView addOverlay:worldOverlay]; 

并实现viewForOverlay委托方法:

 -(MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id<MKOverlay>)overlay { if ([overlay isKindOfClass:[MKPolygon class]]) { MKPolygonView *pv = [[[MKPolygonView alloc] initWithPolygon:overlay] autorelease]; pv.fillColor = [UIColor blackColor]; pv.alpha = 1.0; return pv; } return nil; } 

这看起来像这样:

在这里输入图像说明

如果您还想限制用户滚动到亚洲以外或缩小太远,那么您还需要手动执行此操作。 限制MKMapView滚动中描述了一种可能的方法。 用theOverlayreplace该答案中的asiaOverlay

您可以将区域指定为MKCoordinateRegion,然后告诉MKMapView实例仅使用setRegion和regionThatFits消息显示该区域。

或者,您可以使用visibleMapRect属性而不是区域。 这可能会更好地满足您的需求。

简而言之,请阅读Apple的MKMapView类参考文档。

从过去的一些代码中取消,假定一个mapView和一个名为locationToShow的给定位置,我使用了一个MKCoordinateRegion。

 - (void) goToLocation { MKCoordinateRegion region; MKCoordinateSpan span; span.latitudeDelta=0.01; span.longitudeDelta=0.01; region.span=span; region.center=locationToShow; [mapView setRegion:region animated:TRUE]; [mapView regionThatFits:region]; }