좌표 표시하기 링크 복사

현재 위치의 카텍(KATEC) 좌표를 표시합니다.

예시 코드 좌표 표시하기
-(void)showWGS84 {
    // 현재 위치의 카텍 좌표
    FloatPoint currentPos = self->mapView.coordinate;
     
    // wgs84 좌표 변환
    DoublePoint wgs84Pos = [[KNSDK sharedInstance] convertKATECToWGS84WithX:currentPos.x y:currentPos.y];

    // 메시지 출력
    NSString* msg = [NSString stringWithFormat:@"latitude(%f), longitude(%f)", wgs84Pos.y, wgs84Pos.x];
    [self->listener alertView:msg];
}
-(void)showWGS84 {
    // 현재 위치의 카텍 좌표
    FloatPoint currentPos = self->mapView.coordinate;
     
    // wgs84 좌표 변환
    DoublePoint wgs84Pos = [[KNSDK sharedInstance] convertKATECToWGS84WithX:currentPos.x y:currentPos.y];

    // 메시지 출력
    NSString* msg = [NSString stringWithFormat:@"latitude(%f), longitude(%f)", wgs84Pos.y, wgs84Pos.x];
    [self->listener alertView:msg];
}
코드가 숨겨졌습니다.

마커 추가하기 링크 복사

KNMapMarker 클래스의 함수를 이용하여 마커를 설정할 수 있습니다. 마커는 사용자가 직접 이미지를 변경하여 사용할 수도 있으며 별도의 설정을 하지 않는 경우 기본 핀 이미지로 표시됩니다.

예시 코드 마커 추가하기
-(void)addMarker {
    // 현재 지도의 위치
    FloatPoint pos = FloatPointMake(self->mapView.coordinate.x, self->mapView.coordinate.y);

    // 기본 핀 마커로 생성 및 지도에 추가
    KNMapMarker* marker = [KNMapMarker markerWithCoordinate:pos];
    marker.priority = PRIORITY;
    marker.tag = MARKER_01;
    marker.info = nil;
     
    // 지도에서 마커를 표시할 줌 레벨 범위 설정
    [marker setVisibleRangeWithMinZoom:0.1 maxZoom:30.0];
     
    [self->mapView addMarker:marker];
}
-(void)addMarker {
    // 현재 지도의 위치
    FloatPoint pos = FloatPointMake(self->mapView.coordinate.x, self->mapView.coordinate.y);

    // 기본 핀 마커로 생성 및 지도에 추가
    KNMapMarker* marker = [KNMapMarker markerWithCoordinate:pos];
    marker.priority = PRIORITY;
    marker.tag = MARKER_01;
    marker.info = nil;
     
    // 지도에서 마커를 표시할 줌 레벨 범위 설정
    [marker setVisibleRangeWithMinZoom:0.1 maxZoom:30.0];
     
    [self->mapView addMarker:marker];
}
코드가 숨겨졌습니다.

마커 제거하기 링크 복사

KNMapView 클래스의 removeMarkersAll 함수를 이용하여 추가한 마커를 삭제할 수 있습니다.

예시 코드 마커 제거하기
-(void)removeMarker {
    [self->mapView removeMarkersAll];
}
-(void)removeMarker {
    [self->mapView removeMarkersAll];
}
코드가 숨겨졌습니다.

마커 이동하기 링크 복사

KNMapMarker 클래스의 함수를 이용하여 애니메이션 효과와 함께 마커의 위치를 이동할 수 있습니다.

예시 코드 마커 이동하기
static int flagMoveCoordinateMarker = 0;
-(void)moveCoordinateMarker {
    IntPoint mapPos = [[KNSDK sharedInstance] convertWGS84ToKATECWithLongitude:127.110226 latitude:37.394259];
    FloatPoint katecPos = FloatPointMakeWithIntPoint(mapPos);
    // 마커 불러오기
    NSArray* markers = [self->mapView getMarkers];
     
    int movingCase = flagMoveCoordinateMarker % 2;
    // 위치 이동
    for (KNMapMarker* marker in markers) {
        if (movingCase == 0) {
            // 기본 이동
            marker.coordinate = katecPos;
        } else if (movingCase == 1) {
            // 500 ms 동안 애니메이션 효과와 함께 마커의 위치 이동
            [marker animateWithCoordinate:katecPos duration:500.0];
        }
    }
    flagMoveCoordinateMarker++;
}
static int flagMoveCoordinateMarker = 0;
-(void)moveCoordinateMarker {
    IntPoint mapPos = [[KNSDK sharedInstance] convertWGS84ToKATECWithLongitude:127.110226 latitude:37.394259];
    FloatPoint katecPos = FloatPointMakeWithIntPoint(mapPos);
    // 마커 불러오기
    NSArray* markers = [self->mapView getMarkers];
     
    int movingCase = flagMoveCoordinateMarker % 2;
    // 위치 이동
    for (KNMapMarker* marker in markers) {
        if (movingCase == 0) {
            // 기본 이동
            marker.coordinate = katecPos;
        } else if (movingCase == 1) {
            // 500 ms 동안 애니메이션 효과와 함께 마커의 위치 이동
            [marker animateWithCoordinate:katecPos duration:500.0];
        }
    }
    flagMoveCoordinateMarker++;
}
코드가 숨겨졌습니다.

마커 숨기기/보이기 링크 복사

KNMapMarker 클래스의 함수를 이용하여 마커를 숨기거나 다시 나타낼 수 있습니다.

예시 코드 마커 숨기기/보이기
-(void)showOrHideMarker {
    // 마커 가져오기
    NSArray* markers = [self->mapView getMarkers];
     
    // 마커 숨기기/보이기
    for (KNMapMarker* marker in markers) {
        marker.isVisible = !marker.isVisible;
    }
}
-(void)showOrHideMarker {
    // 마커 가져오기
    NSArray* markers = [self->mapView getMarkers];
     
    // 마커 숨기기/보이기
    for (KNMapMarker* marker in markers) {
        marker.isVisible = !marker.isVisible;
    }
}
코드가 숨겨졌습니다.

커스텀 마커 추가하기 링크 복사

KNMapMarker 클래스의 함수를 이용하여 사용자가 직접 마커의 이미지를 변경하여 사용할 수 있습니다.

예시 코드 커스텀 마커 추가하기
-(void)addCustomMarker {
    IntPoint mapPos = [[KNSDK sharedInstance] convertWGS84ToKATECWithLongitude:127.110226 latitude:37.394259];
    // 마커 아이콘
    UIImage* icPin = [UIImage imageNamed:@"icPin00@3x.png"];
 
    // 마커 생성 및 지도에 추가
    KNMapMarker* customMarker = [KNMapMarker markerWithCoordinate:FloatPointMakeWithIntPoint(mapPos)];
    customMarker.priority = PRIORITY;
    customMarker.tag = MARKER_02;
    customMarker.icon = icPin;
     
    // 원 모양의 아이콘인 icPin의 원점은 하단 중앙이기 때문에 픽셀 오프셋을 조정하여 원점이 원의 중심에 오도록 설정
    customMarker.pixelOffset = IntPointMake(0, icPin.size.height*0.5);
 
    [self->mapView addMarker:customMarker];
}
-(void)addCustomMarker {
    IntPoint mapPos = [[KNSDK sharedInstance] convertWGS84ToKATECWithLongitude:127.110226 latitude:37.394259];
    // 마커 아이콘
    UIImage* icPin = [UIImage imageNamed:@"icPin00@3x.png"];
 
    // 마커 생성 및 지도에 추가
    KNMapMarker* customMarker = [KNMapMarker markerWithCoordinate:FloatPointMakeWithIntPoint(mapPos)];
    customMarker.priority = PRIORITY;
    customMarker.tag = MARKER_02;
    customMarker.icon = icPin;
     
    // 원 모양의 아이콘인 icPin의 원점은 하단 중앙이기 때문에 픽셀 오프셋을 조정하여 원점이 원의 중심에 오도록 설정
    customMarker.pixelOffset = IntPointMake(0, icPin.size.height*0.5);
 
    [self->mapView addMarker:customMarker];
}
코드가 숨겨졌습니다.

마커를 기준으로 화면 맞추기 링크 복사

설정한 마커들을 기준으로 화면을 맞춥니다. 아래는 fitInMarkers() 함수를 생성하여 지도에 표시되는 마커들을 화면에 맞추는 예시 코드입니다. 현재의 좌표 주변으로 난수를 사용하여 여러 개의 마커를 생성하고 KNMapCameraUpdate.fitToRegion() 함수를 사용하여 애니메이션화된 카메라를 사용하여 초기화된 영역에 맞춥니다.

예시 코드 마커를 기준으로 화면 맞추기
-(void)fitInMarkers {
    CGPoint screenPos = [self->mapView katecToScreen:self->mapView.coordinate];
     
    for (int i = 0; i < 4; i++){
    // 임의의 화면 위치 생성
        CGPoint screenPoint = CGPointMake(screenPos.x + (float)(rand()%100), screenPos.y + (float)(rand()%100));
         
        FloatPoint katecPoint = [self->mapView screenToKatec:screenPoint];
        KNMapMarker* marker = [KNMapMarker markerWithCoordinate:katecPoint];
        marker.priority = PRIORITY;
        marker.tag = MARKER_03;
        [self->mapView addMarker:marker];
    }
     
    // 모든 마커 불러 오기
    NSArray* markers = [mapView getMarkers];
     
    // 마커 영역 생성
    KNMapCoordinateRegion* region = [KNMapCoordinateRegion regionWithMarkers:markers];
     
    // 0.5초 동안 애니메이션 카메라 화면 맞춤
    [mapView animateCamera:[KNMapCameraUpdate fitToRegion:region] duration:500 withUserLocation:FALSE];
}
-(void)fitInMarkers {
    CGPoint screenPos = [self->mapView katecToScreen:self->mapView.coordinate];
     
    for (int i = 0; i < 4; i++){
    // 임의의 화면 위치 생성
        CGPoint screenPoint = CGPointMake(screenPos.x + (float)(rand()%100), screenPos.y + (float)(rand()%100));
         
        FloatPoint katecPoint = [self->mapView screenToKatec:screenPoint];
        KNMapMarker* marker = [KNMapMarker markerWithCoordinate:katecPoint];
        marker.priority = PRIORITY;
        marker.tag = MARKER_03;
        [self->mapView addMarker:marker];
    }
     
    // 모든 마커 불러 오기
    NSArray* markers = [mapView getMarkers];
     
    // 마커 영역 생성
    KNMapCoordinateRegion* region = [KNMapCoordinateRegion regionWithMarkers:markers];
     
    // 0.5초 동안 애니메이션 카메라 화면 맞춤
    [mapView animateCamera:[KNMapCameraUpdate fitToRegion:region] duration:500 withUserLocation:FALSE];
}
코드가 숨겨졌습니다.

사용자 위치 이동하기 링크 복사

현재 사용자의 위치를 임의의 장소로 옮겨 표시합니다.

아래는 moveUserLocation() 함수를 생성하여 사용자 위치 마커의 이동 방식을 설정하는 예시 코드입니다. flagMoveUserLocation의 값을 기준으로 기본 이동, 애니메이션 이동, 카메라와 동기화된 이동 중 하나를 선택하여 사용자 위치를 변경합니다. 함수가 호출될 때마다 flagMoveUserLocation 값은 1씩 증가됩니다.

예시 코드 사용자 위치 이동하기
static int flagMoveUserLocation = 0;
-(void)moveUserLocation {
    self->mapView.userLocation.isVisible = TRUE;
     
    CGPoint screenPos = [self->mapView katecToScreen:self->mapView.coordinate];
    // 랜덤 스크린 위치 생성
    CGPoint screenPoint = CGPointMake(screenPos.x + (float)(rand()%150), screenPos.y + (float)(rand()%150));
    // 랜덤 카텍 좌표
    FloatPoint katecPoint = [self->mapView screenToKatec:screenPoint];
     
    int movingCase = flagMoveUserLocation%3;
    if (movingCase == 0) {
        // 기본 이동
        self->mapView.userLocation.coordinate = katecPoint;
    } else if (movingCase == 1) {
        // 애니메이션 이동. 45도 회전, 500 ms 동안 이동
        [self->mapView.userLocation animateWithCoordinate:katecPoint angle:45.0 duration:500.0];
    } else if (movingCase == 2) {
        // 카메라와 동기화된 이동. 사용자의 위치가 현 위치(KNMapView.coordinate)로 이동
        [self->mapView animateCamera:[KNMapCameraUpdate targetTo:katecPoint] duration:500.0 withUserLocation:true];
    }
    flagMoveUserLocation++;
}
static int flagMoveUserLocation = 0;
-(void)moveUserLocation {
    self->mapView.userLocation.isVisible = TRUE;
     
    CGPoint screenPos = [self->mapView katecToScreen:self->mapView.coordinate];
    // 랜덤 스크린 위치 생성
    CGPoint screenPoint = CGPointMake(screenPos.x + (float)(rand()%150), screenPos.y + (float)(rand()%150));
    // 랜덤 카텍 좌표
    FloatPoint katecPoint = [self->mapView screenToKatec:screenPoint];
     
    int movingCase = flagMoveUserLocation%3;
    if (movingCase == 0) {
        // 기본 이동
        self->mapView.userLocation.coordinate = katecPoint;
    } else if (movingCase == 1) {
        // 애니메이션 이동. 45도 회전, 500 ms 동안 이동
        [self->mapView.userLocation animateWithCoordinate:katecPoint angle:45.0 duration:500.0];
    } else if (movingCase == 2) {
        // 카메라와 동기화된 이동. 사용자의 위치가 현 위치(KNMapView.coordinate)로 이동
        [self->mapView animateCamera:[KNMapCameraUpdate targetTo:katecPoint] duration:500.0 withUserLocation:true];
    }
    flagMoveUserLocation++;
}
코드가 숨겨졌습니다.

마커에 말풍선 표시하기 링크 복사

KNMapCalloutBubbleUpdate 클래스를 사용하여 마커에 표시될 말풍선을 생성할 수 있습니다. 말풍선의 제목, 부제목을 입력하고 글자 폰트, 글자 크기, 글자 색상 등을 설정할 수도 있습니다.

예시 코드 말풍선 표시하기
// 마커 말풍선 표시
-(void)showMarkerCalloutBubble {
    KNMapCalloutBubbleUpdate* update = [KNMapCalloutBubbleUpdate calloutBubbleUpdate];
    update = [[[[[[update
        setTitle:@"주된 텍스트를 \n 표시합니다."]
        setSubTitle:@"보조 텍스트를 표시합니다."]
        setTitleFont: [UIFont boldSystemFontOfSize:32]]
        setSubTitleFont: [UIFont systemFontOfSize:18]]
        setTitleFontColor: [UIColor blackColor]]
        setSubTitleFontColor: [UIColor grayColor]];
   [marker updateCalloutBubble:update];
}
// 마커 말풍선 표시
-(void)showMarkerCalloutBubble {
    KNMapCalloutBubbleUpdate* update = [KNMapCalloutBubbleUpdate calloutBubbleUpdate];
    update = [[[[[[update
        setTitle:@"주된 텍스트를 \n 표시합니다."]
        setSubTitle:@"보조 텍스트를 표시합니다."]
        setTitleFont: [UIFont boldSystemFontOfSize:32]]
        setSubTitleFont: [UIFont systemFontOfSize:18]]
        setTitleFontColor: [UIColor blackColor]]
        setSubTitleFontColor: [UIColor grayColor]];
   [marker updateCalloutBubble:update];
}
코드가 숨겨졌습니다.