使用MapKit显示特定区域

时间:2011-12-30 12:36:26

标签: iphone objective-c ios mapkit

我想知道是否可以使用Map Kit在地图上仅显示特定区域而不是整个世界地图。 就像我想在我的应用程序中显示亚洲地图一样,地图套件隐藏了地图的剩余部分。

2 个答案:

答案 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;
}

这看起来像这样:

enter image description here

如果您还想限制用户滚动到亚洲以外或缩放太远,那么您也需要手动执行此操作。 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];
}