사용자의 실시간 위치가 카카오맵에 보이지 않는 문제 해결하기

Juhee Kim·2025년 2월 24일
0
해결 전해결 후

이슈

👉 사용자의 실시간 위치를 지도에 띄울 때, 위치 좌표값은 정상적으로 받지만 카카오맵이 보이지 않음

원인

👉 실제 위치를 사용할 때에는 viewModel.userLatitude와 viewModel.userLongitude가 초기값 0으로 시작하고, 위치 업데이트를 받은 후에야 실제 값으로 변경됨. MapPinView에는 위치가 업데이트될 때 지도를 새로 그리는 로직이 없음

해결

👉 위치를 보여주는 FriendsLocationView, 카카오맵 보여주는 컨테이너인 MapPinView에 위치 업데이트 로직 생성
MapPinView.swift:

class KakaoMapCoordinator: NSObject, MapControllerDelegate {
				...
		
				// location 값이 변경될 때 지도 업데이트를 위한 메서드 추가
        func updateLocation(_ newLocation: Location) {
            self.location = newLocation
            
            guard let view = controller?.getView("mapview") as? KakaoMap else {
                print("view is nil in updateLocation")
                return
            }
            
            // 기존 POI 삭제
            let manager = view.getLabelManager()
            if let layer = manager.getLabelLayer(layerID: "PoiLayer") {
                layer.clearAllItems() // TODO: 맞는 메서드인지 확인 필요
            }
            
            // 새로운 POI 생성
            createPois()
            
            // 카메라 이동
            let cameraUpdate = CameraUpdate.make(
                target: MapPoint(longitude: newLocation.x, latitude: newLocation.y),
                mapView: view
            )
            view.moveCamera(cameraUpdate)
        }
}

FriendsLocationView.swift:

var body: some View {
	ZStack {
				...
	}
	.onChange(of: viewModel.userLatitude) { _, _ in
    	updateLocation()
    }
    .onChange(of: viewModel.userLongitude) { _, _ in
    	updateLocation()
    }
}

짧은 지식💡 x:0, y: 0 좌표는 널 아일랜드라고 한다. 하핫.

카카오맵은 좌표가 이상하면 스카이블루 스크린을 띄워주는 듯. 다음에 같은 화면이 보이면 가장 먼저 좌표 동기화 문제를 의심해봐야겠다.

profile
개: 개롭지만 발: 발전하는중

0개의 댓글

관련 채용 정보