Отображение определенного региона с помощью MapKit - PullRequest
5 голосов
/ 30 декабря 2011

Я хочу знать, возможно ли показывать только конкретный регион на карте, а не полную карту мира, используя Map Kit.Например, если я хочу показать карту Азии в своем приложении, тогда набор карт скрывает оставшуюся часть карты.

Ответы [ 2 ]

10 голосов
/ 31 декабря 2011

Чтобы справиться с требованием «набор карт скрывает оставшуюся часть карты», вы можете создать черное многоугольное наложение, которое покрывает весь мир вырезом над Азией (или где угодно).

Например, когда вы инициализируете карту (например, в 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

Если вы также хотите ограничить пользователя от прокрутки за пределы Азии или слишком большого масштабирования, то вам нужно будет сделать это и вручную. Один из возможных способов описан в Ограничить прокрутку MKMapView . Замените theOverlay в этом ответе на asiaOverlay.

0 голосов
/ 30 декабря 2011

Вы можете указать регион как MKCoordinateRegion, а затем указать экземпляру MKMapView показывать только этот регион, используя сообщения setRegion и regionThatFits.

В качестве альтернативы вы можете использовать свойство visibleMapRect вместо региона.Это может лучше соответствовать вашим потребностям.

Вкратце прочитайте справочный документ класса MKMapView от Apple.

Извлечение некоторого кода, который я делал в прошлом, который предполагает 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];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...