본문 바로가기

프로그래밍/iOS

[ios] 주소->위, 경도로 위,경도 ->주소로

​지도 사용을 위해 구글맵, 네이버맵, 다음맵 등을 사용해 보았지만. 

위 3가지 맵들은 지오코드 혹은 역지오코드 사용시 횟수 제한이 있다.

아직 ios 애플맵이 완벽히 한국지도 적용이 되지는 않는것 같지만 좋아지길 바라면서

하는 방법을 적어본다.



1. 주소를 위도, 경도로

 

 CLGeocoder* geocoder = [[CLGeocoder alloc] init];

    [geocoder geocodeAddressString:_addressLabel.text completionHandler:^(NSArray *placemarks, NSError *error)

     {

         //        NSLog(@"%@",[placemarks description]);

         NSLog(@"plcaemarks count = %lu",(unsigned long)[placemarks count]);

         if ([placemarks count] == 0) //검색결과가 아무것도 없을 

         {

             NSLog(@"result = nil");

             //경고창

             UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"검색 실패" message:@"해당 지역을 검색할  없습니다." delegate:nil cancelButtonTitle:@"확인" otherButtonTitles:nil, nil];

             [alert show];

             [_resultDic setObject:[NSNumber numberWithDouble:0.0] forKey:@"lat"] ;

             [_resultDic setObject:[NSNumber numberWithDouble:0.0] forKey:@"lng"] ;

             return ;

         }

         else

         {

             CLPlacemark* p = [placemarks objectAtIndex:0]; //첫번째 검색결과 사용

             CLCircularRegion* region = (CLCircularRegion *)p.region;

         }

 

     }];

 

빨간색으로 설정한 부분이 주소가 들어갈 곳  NSString을 넣어도 된다.

 

파란색으로 설정한 곳이 위, 경도 좌표를 저장하는 클래스

위도(latitude) : region.center.latitude

경도(longitude) : region.center.longitude

위 경도 값은 double값이니 int로 저장하면 안된다.

 

2. 위도, 경도를 주소로

CLGeocoder* geocoder = [[CLGeocoder alloc] init];

    CLLocation* loc = [[CLLocation alloc] initWithLatitude:region.center.latitude longitude:region.center.longitude];

    [geocoder reverseGeocodeLocation:loc completionHandler:^(NSArray *placemarks, NSError *error) {

        

        if ([placemarks count] == 0) //검색결과가 아무것도 없을 

        {

            NSLog(@"result = nil");

            //경고창

            UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"검색 실패" message:@"현재위치를 검색할  없습니다." delegate:nil cancelButtonTitle:@"확인" otherButtonTitles:nil, nil];

            [alert show];

            return ;

        }

        else

        {

            CLPlacemark* p = [placemarks objectAtIndex:0]; //첫번째 검색결과 사용

            NSString* add = ABCreateStringWithAddressDictionary(p.addressDictionary, NO); //주소 dictionary 변환

            add = [add stringByReplacingOccurrencesOfString:@"\n" withString:@" "]; //엔터를 스페이스로 변환(한줄표시 위해)

       

            // 추가

            MKPointAnnotation* annotation = [[MKPointAnnotation alloc] init];

            annotation.coordinate = region.center;

            annotation.title = @"내위치";  //검색어 출력

            annotation.subtitle =add;  //주소출력

            [_mapView addAnnotation:annotation];

            

        }

 

    }];

빨간색으로 표시한 부분이 각각 위도, 경도가 들어가는 위치

파란색으로 표시한 부분이 주소를 NSString으로 저장하는 방법이다.

위를 사용하기 위해서는 AddressBookUI.framework를 추가한 뒤

#import <AddressBookUI/AddressBookUI.h> 를 추가해야한다.