본문 바로가기

iOS

apple mapKit 사용방(구글이 안해주는 길찾기기능 포함)

1. 사용되는 프레임워크

 - MapKit.framework

 - CoreLocation.framework


2. 위치정보 사용은 첫번째 글 참고하세요^^


3. 지도 사용하는 방법

MKMapView * mapView;

MKCoordinateRegion region;

CLLocationDegrees lat;

CLLocationDegrees lon;


if(_mapView ==nil){

        _mapView = [[MKMapView alloc]initWithFrame:self.mainContentView.bounds];

    }

    [_mapView setMapType:MKMapTypeStandard];

    [_mapView setZoomEnabled:YES];

    [_mapView setScrollEnabled:YES];

    _mapView.delegate = self;

    MKCoordinateSpan span;

    span.latitudeDelta = 0.1;

    span.longitudeDelta = 0.1;

    region.center =CLLocationCoordinate2DMake(lat,lon);   

    region.span = span;                                   

    [_mapView setRegion:region animated:YES];

    [_mapView setCenterCoordinate:region.center animated:YES];

    [_mapView regionThatFits:region];

    [_mapView setShowsUserLocation:YES];

    [self.mainContentView addSubview:_mapView];



위와 같이 mapType을 정해준다(3가지 방식이있다.) region에 span은 확대정도, center는 지도의 center를 정해줄수있다. 이렇게 하면 화면에 내위치가 표시된 지도를 볼수 있다.


4. 지도 원하는 위치에 핀 원하는 이미지로 바꾸기, 길찾기 사용하는 방법

  mapView Delegate Methods를 사용하면된다.


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

    if([annotation isKindOfClass:[MKUserLocation class]]) {

        return nil;

    }

    static NSString *identifier = @"myAnnotation";

    MKPinAnnotationView *annotationView = 

(MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:identifier];

        if (annotationView == nil) {

        annotationView = [[MKPinAnnotationView alloc]

                          initWithAnnotation:annotation

                          reuseIdentifier:identifier];

        annotationView.image = [UIImage imageNamed:PIN_IMAGE];

        annotationView.frame = CGRectMake(0, 0, 24, 37);

        

    } else {

        annotationView.annotation = annotation;

    }

    

    UIButton *pinButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];

    annotationView.rightCalloutAccessoryView = pinButton;

    annotationView.canShowCallout = YES;


    return annotationView;

}


이 Methods는 pin을 커스텀하는 방법이다. 위와같이 PIN_IMAGE랑 크기를 설정하면된다.


+ (CLLocationDistance)calculateDistanceWithMyLat:(double)mLat mLong:(double)mLong pinLat:(double)pLat pinLong:(double)pLong {

    CLLocation *LocationA = [[CLLocation alloc] initWithLatitude:mLat longitude:mLong];

    CLLocation *LocationB = [[CLLocation alloc] initWithLatitude:pLat longitude:pLong];

    CLLocationDistance distance = [LocationB distanceFromLocation:LocationA];


    return distance;

}


-(void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control {

    

      

       _distance = [Util calculateDistanceWithMyLat:현재위치 Lat mLong:현재위치 Lon  pinLat: 핀위치 lat  pinLong: 핀위치 lon];

 

        CLLocationCoordinate2D rdOfficeLocation = CLLocationCoordinate2DMake(lat, lon);

        MKPlacemark *placemark = [[MKPlacemark alloc] initWithCoordinate:rdOfficeLocation addressDictionary:nil];

        MKMapItem *item = [[MKMapItem alloc] initWithPlacemark:placemark];

        item.name = @"ReignDesign Office";

        NSDictionary *options;

        if(_distance < 3){

            options = @{

                        MKLaunchOptionsDirectionsModeKey:

                            MKLaunchOptionsDirectionsModeWalking

                        };

        }else{

            options = @{

                        MKLaunchOptionsDirectionsModeKey:

                            MKLaunchOptionsDirectionsModeDriving

                        };

        }

        [item openInMapsWithLaunchOptions:options];

    }

}


위에 메소드는 현재위치 location 정보와 핀을 찍을곳에 loaction정보를 가지고 거리를 구하는 것이다.

그 거리를 기준으로 3km이하이면 걷기모드 이상이면 자동차모드로 한것이다.




더궁금한점이나 이해안가는 부분있으면 댓글 남겨주세요

 







'iOS' 카테고리의 다른 글

[swift] iOS 주소 찾기  (0) 2017.11.15
앱스토어 버전 가져오기  (0) 2015.09.11
iOS AudioSession 공부중....  (0) 2015.05.28
NSDate 대해서  (0) 2015.05.06
iBeacon api 사용법  (0) 2015.04.30