애플 맵 테스트할 때 같이 테스트해본 자료
애플 맵 테스트는 이쪽
2015/04/08 - [프로그래밍/iOS] - [ios] 주소->위, 경도로 위,경도 ->주소로
1. 주소를 위도, 경도로
- 요청
NSString* string = @"검색 할 주소";
//url변환
NSString* rawURL = [NSString stringWithFormat:@"http://openapi.map.naver.com/api/geocode.php?key=8ba22c62effbad53bf0795d0d44072c4&encoding=utf-8&coord=latlng&query=%@",string];
NSString* encodingString = [rawURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL* url = [NSURL URLWithString:encodingString];
//주소 변환 요청
NSURLRequest* request = [NSURLRequest requestWithURL:url];
NSError* error = nil;
NSData* response = nil;
response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:&error];
if (error) { //에러인경우
NSLog(@"%@",[error description]);
}
else //에러가 아닌 경우
{
//xml 파싱 요청
NSXMLParser* parser = [[NSXMLParser alloc] initWithData:response];
[parser setDelegate:self];
[parser parse];
}
- 델리게이트 함수들
// xml 파싱 함수들
- (void) parser:(NSXMLParser *)parser
didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
attributes:(NSDictionary *)attributeDict
{
if ([elementName isEqualToString:@"x"]) //x 좌표인 경우
{
isX = YES;
}
if ([elementName isEqualToString:@"y"]) //y 좌표인 경우
{
isY = YES;
}
if ([elementName isEqualToString:@"address"]) //주소 인 경우
{
isAddress = YES;
}
}
//위와 셋트 위 함수는 해당하는 엘리멘트를 찾은 경우, 아래는 찾기가 끝난경우
//여기선 BOOL변수로 해당 위치에 도달했음만을 알리기 위해 YES, NO 처리
- (void) parser:(NSXMLParser *)parser
didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
{
if ([elementName isEqualToString:@"x"])
{
isX = NO;
}
if ([elementName isEqualToString:@"y"])
{
isY = NO;
}
if ([elementName isEqualToString:@"address"])
{
isAddress = NO;
}
}
//해당 엘리먼트에서 내용을 찾은 경우 해당 array에 복사
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
if (isX) {
[xArray addObject:string];
isX = NO;
}
if (isY) {
[yArray addObject:string];
isY = NO;
}
if (isAddress)
{
[addressArray addObject:string];
}
}
//이번엔 사용하지 않음
- (void)parser:(NSXMLParser *)parser foundCDATA:(NSData *)CDATABlock
//<!CDATA> 형식의 자료를 넣는다.
{
// if (isAddress)
// {
// address = [[NSString alloc] initWithData:CDATABlock encoding:NSUTF8StringEncoding];
// }
}
- (void) parserDidEndDocument:(NSXMLParser *)parser
{
//파싱이 끝나면 불러오는 이벤트.
if ([xArray count] == 0 ||[yArray count] == 0||[addressArray count] == 0) //결과값이 없을 경우
{
NSLog(@"검색결과가 존재하지 않습니다.");
UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"검색결과" message:@"검색결과가 존재하지 않습니다." delegate:self cancelButtonTitle:@"확인" otherButtonTitles:nil, nil];
[alert show];
return ;
}
//결과값중 첫번째 결과 값 사용
float x = [[xArray objectAtIndex:0] floatValue]; //x좌표
float y = [[yArray objectAtIndex:0] floatValue]; //y좌표
NSArray* address = [addressArray objectAtIndex:0]; //주소
//결과 array 비움
[xArray removeAllObjects];
[yArray removeAllObjects];
[addressArray removeAllObjects];
//맵에 해당 위치 표시
[_mapView findPlacemarkAtLocation:NGeoPointMake(x, y)];
NMapOverlayManager *mapOverlayManager = [_mapView mapOverlayManager];
NMapPOIdataOverlay *poiDataOverlay = [mapOverlayManager createPOIdataOverlay];
[poiDataOverlay initPOIdata:1];
[poiDataOverlay addPOIitemAtLocation:NGeoPointMake(x, y) title:@"검색결과" type:NMapPOIflagTypePin iconIndex:0 withObject:nil];
[poiDataOverlay endPOIdata];
[poiDataOverlay showAllPOIdata];
}
빨간색으로 설정한 부분이 주소가 들어갈 곳 NSString을 넣어도 된다.
파란색으로 설정한 부분이 결과 위, 경도
2. 위도, 경도를 주소로
- 요청
float lat = -33.86;
float lng = 151.20;
[_mapView findPlacemarkAtLocation:NGeoPointMake(lat, lng)];
- 델리게이트 함수
//요청 시 결과물을 전달하는 delegate
#pragma mark - MMapReverseGeocoderDelegate
- (void) location:(NGeoPoint)location didFindPlacemark:(NMapPlacemark *)placemark
{
//지도에 표시
if (_mapPOIdataOverlay)
{
NMapPOIitem *poiItem = [[_mapPOIdataOverlay poiData] objectAtIndex:0];
if (NGeoPointIsEquals([poiItem location], location)) {
[poiItem setTitle:[placemark address]];
[_mapPOIdataOverlay selectPOIitemAtIndex:0 moveToCenter:NO];
}
}
}
빨간색으로 표시한 부분이 각각 위도, 경도가 들어가는 위치
파란색으로 표시한 부분이 주소를 NSString으로 저장하는 방법이다.
'프로그래밍 > iOS' 카테고리의 다른 글
[ios] 현재시간 가져오기, NSString 파일로 저장 (0) | 2015.04.09 |
---|---|
[ios] opencv Canny 사용 (0) | 2015.04.09 |
[ios] 구글맵 주소->위도,경도 / 위도경도->주소 (0) | 2015.04.09 |
[ios] Delegate사용 법 (0) | 2015.04.08 |
[ios] 기기의 가로, 세로 사이즈 가져오기(ios8 수정) (0) | 2015.04.08 |