본문 바로가기

프로그래밍/iOS

[ios] 구글맵 주소->위도,경도 / 위도경도->주소

애플 맵 테스트할 때 같이 테스트해본 자료 

애플 맵 테스트는 이쪽 

2015/04/08 - [프로그래밍/iOS] - [ios] 주소->위, 경도로 위,경도 ->주소로






1. 주소를 위도, 경도로

 

 NSString* string = @"검색 할 주소;

 

//주소를 url로 변환

NSString* rawURL = [NSString stringWithFormat:@"http://maps.google.com/maps/api/geocode/json?address=%@&sensor=true",string];

    NSString* encodingString = [rawURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

    NSURL* url = [NSURL URLWithString:encodingString];

    

//요청

NSURLRequest* request = [NSURLRequest requestWithURL:url];

NSData* response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

    

//json parser

NSError* jsonParsingError = nil;

NSMutableDictionary* receiveArray = [NSJSONSerialization JSONObjectWithData:response options: NSJSONReadingMutableContainers error:&jsonParsingError];

    //parser error

    if (jsonParsingError)

    {

        NSLog(@"error : %@",jsonParsingError);

    }

    else

    {

        //결과값 가져오기

        NSArray *result = receiveArray[@"results"];

        if ([result count]== 0) //결과값이 없을 때 

        {

            NSLog(@"result = nil");

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

            [alert show];

            return ;

        }

        NSMutableDictionary *resultFirst = [result objectAtIndex:0]; //첫번째 결과가 가장 검색어에 근접함

        NSString* address = resultFirst[@"formatted_address"]; //주소

        NSDictionary* geometry = resultFirst[@"geometry"]; //위경도를 가지고 있는 geometry 정보 가져오기

        NSDictionary* location = geometry[@"location"]; // geometry안의 location 정보 가져오기  경도 값을 가지고 있음

        

        float lat, lng;

        lat = [location[@"lat"] floatValue]; //위도

        lng = [location[@"lng"] floatValue]; //경도

        

       //지도에 해당위치 marker로 표시 후 확대

        GMSMarker *marker = [[GMSMarker alloc] init];

        marker.position = CLLocationCoordinate2DMake(lat, lng);

        marker.title = searchBar.text;

        marker.snippet = address;

        marker.map = mapView_;

        [mapView_ setCamera:[GMSCameraPosition cameraWithLatitude:lat longitude:lng zoom:15]];

    }

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

파란색으로 설정한 부분이 결과 위, 경도

 

 

2. 위도, 경도를 주소로

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

    float lat = -33.86;

    float lng = 151.20;

    [geocoder reverseGeocodeCoordinate:CLLocationCoordinate2DMake(lat, lng) completionHandler:^(GMSReverseGeocodeResponse *placeMarks, NSError *error) {

        if (!error)

        {

            GMSAddress* result = [placeMarks firstResult]; //첫번째 결과값

            

            NSMutableString* address = [[NSMutableString alloc] init]; //주소가 들어갈 string

            for (NSString* string in result.lines) //주소 정보를 받아오기

            {

                [address appendString:string]; //주소정보를 address 붙이기

            }

          //지도에 표시

            GMSMarker *marker = [[GMSMarker alloc] init];

            marker.position = CLLocationCoordinate2DMake(lat, lng);

            marker.title = [NSString stringWithFormat:@"%f, %f",lat,lng];

            marker.snippet = address;

            marker.map = mapView_;

            [mapView_ setCamera:               [GMSCameraPosition cameraWithLatitude:lat longitude:lng zoom:15]];

        }

        else

        {

            NSLog(@"error : %@",[error description]);

        }

 

    }];

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

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