Установка уровня масштабирования в MapKit Xcode

Как установить уровень масштабирования моего Google MapKit в SDK? Например, я живу в Нью-Йорке, и я установил 4 позиции координат в моем ProjectName-info.plist (Типы URL> Элемент 0> Схемы URL> Элемент 0), затем я установил свой код в своем Файл подкласса UIViewController:

#import "GoogleMap.h"
#import "MyAnnotation.h"

@implementation GoogleMap

        - (void)viewDidLoad {
        [super viewDidLoad];

        variable1 = [[NSArray alloc] initWithContentsOfFile:[[NSBundle mainBundle] 
                                                             pathForResource:@"NewYorkAreas" 
                                                             ofType:@"plist"]];

        double minLat = [[variable1 valueForKeyPath:@"@min.latitude"] doubleValue];
        double maxLat = [[variable1 valueForKeyPath:@"@max.latitude"] doubleValue];
        double minLon = [[variable1 valueForKeyPath:@"@min.longitude"] doubleValue];
        double maxLon = [[variable1 valueForKeyPath:@"@max.longitude"] doubleValue];

        MKCoordinateRegion region;
        region.center.latitude = (maxLat + minLat) / 2.0;
        region.center.longitude = (maxLon + minLon) / 2.0;
        region.span.latitudeDelta = (maxLat - minLat) * 1.05;
        region.span.longitudeDelta = (maxLon - minLon) * 1.05;
        map.region = region;

        for (NSDictionary *newYorkAreasDict in variable1){
            MyAnnotation *annotation = [[MyAnnotation alloc] initWithDictionary:newYorkAreasDict];
            [map addAnnotation:annotation];
            [annotation release];
        }
    }

    - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation{

        if (map.userLocation == annotation){
            return nil;
        }

        NSString *identifier = @"MY_IDENTIFIER";

        MKAnnotationView *annotationView = [map dequeueReusableAnnotationViewWithIdentifier:identifier];
        if (annotationView == nil){
            annotationView = [[[MKAnnotationView alloc] initWithAnnotation:annotation 
                                                           reuseIdentifier:identifier] 
                              autorelease];
            annotationView.image = [UIImage imageNamed:@"logo.png"];
            annotationView.canShowCallout = YES;

            annotationView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
        }
        return annotationView;
    }

Итак, это все, что у меня есть на данный момент в моем коде, который отлично работает, когда я запускаю и отлаживаю приложение, и показывает мне расположение всех 4 областей, которые я установил на хорошем уровне масштабирования, но теперь я хочу установить только 1 область , поэтому, когда я стер остальные 3 области и запустил их и дал мне только одну область, уровень масштабирования кажется очень близким к карте:

введите здесь описание изображения

Итак, я, когда код исправлен (при условии, что кто-то помог мне исправить код для уровня масштабирования), в следующий раз, когда я его запущу, когда я нажму «Найти нас на карте Google», мой уровень масштабирования страницы открытия карты Google должен выглядеть так: это: введите здесь описание изображения

Так что да, надеюсь, кто-нибудь поможет мне исправить этот уровень масштабирования, когда я начну открывать Карту Google, спасибо!

(Насчет имен переменных в Нью-Йорке забудьте, я не живу в Нью-Йорке, лол)


person PatrickGamboa    schedule 22.03.2011    source источник


Ответы (1)


Установите минимальное значение для latitudeDelta и longitudeDelta. Я бы сделал это примерно так:

MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(CLLocationCoordinate2DMake((maxLat + minLat) / 2.0, (maxLon + minLon) / 2.0), 1000.0, 1000.0);
region.span.latitudeDelta = MAX(region.span.latitudeDelta, (maxLat - minLat) * 1.05);
region.span.longitudeDelta = MAX(region.span.longitudeDelta, (maxLon - minLon) * 1.05);

Первая строка создает область с прямоугольником 1 км на 1 км, а следующие строки увеличивают прямоугольник, если точки разнесены дальше.

person Anomie    schedule 23.03.2011
comment
эй, спасибо за вашу помощь, когда я запустил его, он дал мне _CLLocationCoordinate2DMake, на который ссылается: -[GoogleMap viewDidLoad] в GoogleMap.o символ (ы) не найден. collect2: ld вернул 1 статус выхода. Может быть, вы могли бы помочь мне с этой ошибкой. ? Благодарность - person PatrickGamboa; 23.03.2011
comment
Для этой функции вам понадобится структура Core Location. Если вы не хотите включать фреймворк только для этого, попробуйте заменить CLLocationCoordinate2DMake((maxLat + minLat) / 2.0, (maxLon + minLon) / 2.0) на (CLLocationCoordinate2D){ (maxLat + minLat) / 2.0, (maxLon + minLon) / 2.0 }. - person Anomie; 23.03.2011
comment
Вау, спасибо большое! это действительно работает! Теперь я могу добавить немного больше материала сейчас! Кстати, у меня есть еще один вопрос: когда пользователи находятся где-то еще в определенной области, и когда они нажимают мою кнопку Google, чтобы открыть мою страницу Google, я хочу построить маршрут между текущим местоположением пользователя и моим рабочим местоположением, это возможно, если вы можете помочь мне с этим? Еще раз спасибо! - person PatrickGamboa; 23.03.2011
comment
Это было бы предметом отдельного вопроса. - person Anomie; 23.03.2011
comment
Сначала это работало на вашем примере, но теперь регион меняется, но он не увеличивает масштаб этого региона. - person ; 05.07.2011