1. 개요
ARCore는 스마트폰에서 증강 현실 환경을 구축하기 위한 Google의 프레임워크입니다. 새로운 ARCore Geospatial API는 증강 현실에 새로운 측면을 부여하여 실제 랜드마크 주변에 위치별 증강 현실 웨이포인트를 배치할 수 있도록 지원합니다.
빌드할 항목
이 Codelab에서는 ARCore Geospatial API를 시작합니다. Geospatial API가 전반적인 AR 환경에 제공할 수 있는 정보와 이 데이터를 사용하여 간단한 AR 길찾기 환경을 지원하는 방법을 알아봅니다.

학습할 내용
- Geospatial API를 사용하는 ARCore 프로젝트를 설정하는 방법
- Geospatial API에서 지리 데이터를 요청하고 Google 지도를 사용하여 표시하는 방법
- 실제 위치에 연결된 앵커를 배치하는 방법
필요한 항목
- USB 디버깅을 통해 구성되고 USB 케이블을 사용하여 개발 머신에 연결된 ARCore가 지원되는 Android 기기
- Android 앱을 빌드하기 위해 설치, 구성된 Android 스튜디오
- Android 개발 기기에 설치된 Google Play AR 서비스 1.31 이상
2. 개발 환경 설정
Android 스튜디오 설정
Geospatial API를 시작할 수 있도록 Google Maps SDK와 통합된 ARCore 프로젝트의 기본사항이 포함된 시작 프로젝트가 제공됩니다. 이렇게 하면 Geospatial API를 빠르게 시작할 수 있습니다.
- Android 스튜디오를 시작하고 VCS에서 프로젝트를 가져옵니다.
- 이미 프로젝트가 열려 있다면 File > New > Project from Version Control...을 사용합니다.
- Welcome to Android Studio 창이 표시되면 Get from VCS를 사용합니다.

- Git을 선택하고 URL
https://github.com/google-ar/codelab-geospatial.git을 사용하여 프로젝트를 가져옵니다.
Google Cloud 프로젝트 설정
Geospatial API는 스트리트 뷰 이미지와 기기의 자기계 및 카메라 센서 정보를 결합하여 방향 값을 개선합니다. 이 서비스를 사용하려면 Google Cloud 프로젝트를 설정해야 합니다.
- Google Cloud 콘솔에서 프로젝트를 만듭니다.
- Google Cloud Platform에서 프로젝트 만들기를 참고하세요.

- 적절한 프로젝트 이름 (예: 'ARCore Geospatial API 프로젝트')을 입력하고 위치를 선택합니다.
- 만들기를 클릭합니다.
- Google Cloud Platform에서 프로젝트 만들기를 참고하세요.
- 필요한 API를 사용 설정합니다.
- API 키 사용자 인증 정보 만들기:
이 단계를 통해 API 키 승인으로 Google Cloud 프로젝트를 만들었고 Geospatial API를 사용할 준비가 되었습니다.
API 키를 Android 스튜디오 프로젝트에 통합
Google Cloud의 API 키를 프로젝트와 연결하려면 Android 스튜디오에서 만든 프로젝트를 열고 API 키를 수정하세요.
- app > src > AndroidManifest.xml을 엽니다.
- 다음
meta-data항목을 찾습니다.<meta-data android:name="com.google.android.ar.API_KEY" android:value="PLACEHOLDER_API_KEY" /> <meta-data android:name="com.google.android.geo.API_KEY" android:value="PLACEHOLDER_API_KEY" /> PLACEHOLDER_API_KEY를 Google Cloud 프로젝트에서 만든 API 키로 바꿉니다.
com.google.android.ar.API_KEY에 저장된 값이 이 앱에서 Geospatial API를 사용하도록 승인하고 com.google.android.geo.API_KEY에 저장된 값이 이 앱에서 Google Maps SDK를 사용하도록 승인합니다.
프로젝트 확인
프로젝트가 모두 준비되었는지 확인합니다. Android 스튜디오에서 앱을 실행합니다. 화면 하단에 카메라 뷰와 작동하는 지도가 표시됩니다.

3. 사용자의 위치 확인
이 단계에서는 샘플 프로젝트에 코드를 추가하여 Geospatial API를 시작합니다.
Geospatial API를 사용하도록 ARCore 세션 구성
지리 공간 데이터를 가져오려면 Geospatial API를 사용 설정해야 합니다. 세션 구성에서 GeospatialMode을 ENABLED로 변경합니다. HelloGeoActivity.kt에서 configureSession 함수를 수정하세요.
fun configureSession(session: Session) {
session.configure(
session.config.apply {
// Enable Geospatial Mode.
geospatialMode = Config.GeospatialMode.ENABLED
}
)
}
지리 공간 모드가 ENABLED인 동안 애플리케이션은 지리 공간 정보를 가져올 수 있습니다.
Geospatial API에서 데이터 요청
HelloGeoRenderer.kt에서 다음 줄을 찾습니다.
// TODO: Obtain Geospatial information and display it on the map.
아래에서 Earth 객체를 사용할 수 있는지 확인합니다. 이때 trackingState TrackingState.ENABLED이 있습니다.
val earth = session.earth
if (earth?.trackingState == TrackingState.TRACKING) {
// TODO: the Earth object may be used here.
}
TODO 아래에서 ARCore에 지리정보를 요청합니다. 다음 줄을 추가합니다.
val cameraGeospatialPose = earth.cameraGeospatialPose
그러면 다음 정보가 포함된 GeospatialPose이 제공됩니다.
- 위도와 경도로 표현된 위치입니다. 위치 정확도 추정치도 제공됩니다.
- 고도 및 고도 정확도 추정치입니다.
- 방향(기기가 향하는 방향의 근사치) 및 방향 정확도 추정치
지도에 위치 정보 표시
cameraGeospatialPose에 저장된 GeospatialPose를 사용하여 사용자의 위치를 보여주는 지도에서 마커를 이동할 수 있습니다. 이전 단계에서 중단한 부분부터 시작하여 다음을 추가하세요.
activity.view.mapView?.updateMapPosition(
latitude = cameraGeospatialPose.latitude,
longitude = cameraGeospatialPose.longitude,
heading = cameraGeospatialPose.heading
)
이렇게 하면 Geospatial API에서 가져온 값을 사용하여 지도의 위치가 지속적으로 업데이트됩니다.
사용해 보기
Android 스튜디오에서 Play를 클릭합니다. ARCore가 추적을 설정할 수 있도록 기기를 위로 들고 움직입니다. 잠시 후 지도에 녹색 마커가 표시됩니다. 이 마커는 주변을 볼 때 회전합니다. 또한 올바른 방향을 가리켜야 합니다. 사용자가 북쪽을 향하고 있으면 화살표도 북쪽을 가리킵니다.

4. 어스 좌표를 사용하여 앵커 배치
Geospatial API는 실제 세계의 모든 좌표 쌍과 회전에 앵커를 배치할 수 있습니다. 이렇게 하면 특정 위치를 방문할 때 고정된 콘텐츠가 사용자에게 표시됩니다.
이 단계에서는 지도를 탭하여 앵커를 배치하는 방법을 추가합니다.
지도를 탭할 때의 작업 설정
프로젝트에는 onMapClick 함수가 함께 제공되며, 이 함수는 지도 프래그먼트를 클릭할 때 위도와 경도와 함께 호출됩니다. HelloGeoRenderer.kt에서 onMapClick 함수를 찾습니다.
어스 객체를 사용할 수 있는지 확인
지구에 앵커를 만들기 전에 지구 객체의 TrackingState가 TRACKING인지 확인합니다. 이는 지구의 위치를 알고 있다는 의미입니다. 또한 EarthState가 ENABLED인지 확인합니다. 이는 Geospatial API에 문제가 발생하지 않았음을 의미합니다. onMapClick 내에 다음 줄을 추가합니다.
val earth = session?.earth ?: return
if (earth.trackingState != TrackingState.TRACKING) {
return
}
새 앵커의 위치 결정
지구 객체가 추적 중인지 확인한 후 이전 earthAnchor가 있는 경우 분리합니다. 다음 단계에서 earthAnchor을 새 앵커로 바꿉니다.
earthAnchor?.detach()
그런 다음 cameraGeospatialPose를 사용하여 새 앵커의 고도를 결정합니다. 지도를 탭할 때의 좌표 쌍을 앵커의 위치로 사용합니다.
// Place the earth anchor at the same altitude as that of the camera to make it easier to view.
val altitude = earth.cameraGeospatialPose.altitude - 1
// The rotation quaternion of the anchor in the East-Up-South (EUS) coordinate system.
val qx = 0f
val qy = 0f
val qz = 0f
val qw = 1f
earthAnchor =
earth.createAnchor(latLng.latitude, latLng.longitude, altitude, qx, qy, qz, qw)
createAnchor는 지정된 회전으로 측지 좌표에 고정된 Anchor을 만듭니다. 이 앵커는 안정적으로 유지되고 지정된 좌표와 고도에 고정되려고 시도합니다.
지도에 배치된 마커 표시
마지막으로 마커가 배치된 위치를 나타내는 새 마커를 이동합니다.
activity.view.mapView?.earthMarker?.apply {
position = latLng
isVisible = true
}
사용해 보기
Android 스튜디오에서 Play를 클릭합니다. 기기를 위로 들고 움직여 ARCore가 추적을 설정하도록 지원합니다. 잠시 후 지도에 현재 위치를 나타내는 녹색 마커가 표시됩니다.
지도를 탭하면 지리 공간 API를 사용하여 실제 위치에 고정된 앵커가 배치됩니다. AR 뷰에서 앵커를 볼 수 있도록 현재 위치에 가까이 배치해 보세요. 환경을 탐색할 때 안정적으로 유지되어야 합니다.

5. 결론
이 Codelab에서는 공간 API를 사용하여 실제 세계와 연결된 간단한 AR 환경을 만드는 방법을 알아봤습니다.

학습한 내용
- Geospatial API가 사용 설정된 Google Cloud 프로젝트를 설정하는 방법
- ARCore 프로젝트에서 지리 공간 정보를 가져와 지도에 표시하는 방법
- 지리적 위치를 사용하여 실제 위치에 배치된 앵커를 배치하는 방법
추가 리소스
이 Codelab에서 사용된 지리적 개념과 SDK에 관한 자세한 내용은 다음 추가 리소스를 참고하세요.