我想知道是否可以使用Map Kit在地图上仅显示特定区域而不是整个世界地图。 就像我想在我的应用程序中显示亚洲地图一样,地图套件隐藏了地图的剩余部分。
答案 0 :(得分:10)
要处理“地图套件隐藏地图的剩余部分”要求,您可以做的一件事是创建一个黑色多边形覆盖图,覆盖整个世界,在亚洲(或您喜欢的任何地方)切口。
例如,初始化地图的位置(例如,在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;
}
这看起来像这样:
如果您还想限制用户滚动到亚洲以外或缩放太远,那么您也需要手动执行此操作。 Restrict MKMapView scrolling中描述了一种可能的方法。用theOverlay
替换该答案中的asiaOverlay
。
答案 1 :(得分:0)
您可以将区域指定为MKCoordinateRegion,然后告诉MKMapView实例仅使用setRegion和regionThatFits消息显示该区域。
或者,您可以使用visibleMapRect属性而不是区域。这可能更适合您的需求。
简而言之,请阅读Apple的MKMapView Class Reference文档。
从我过去做过的一些代码中提取,假定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];
}