앱에 3D 지도 추가

플랫폼 선택: Android iOS JavaScript

뉴욕시를 보여주는 3D 지도

이 페이지에서는 Android용 지도 3D SDK를 사용하여 Android 앱에 기본 3D 지도를 추가하는 방법을 보여주는 예를 설명합니다. 이 페이지의 안내에서는 설정 페이지의 단계를 이미 완료했으며 다음이 있다고 가정합니다.

  • Android용 지도 3D SDK가 사용 설정된 Google Cloud 프로젝트
  • Android용 지도 3D SDK와 함께 사용하도록 구성된 API 키
  • Android용 지도 3D SDK와 함께 사용하도록 설정된 Android 스튜디오 프로젝트

이러한 기본 요건에 대한 자세한 내용은 설정을 참고하세요.

1부: 레이아웃 파일 (activity_main.xml)을 업데이트하여 Map3DView 구성요소 추가

Map3DView 구성요소는 앱 내에서 3D 지도를 렌더링하는 뷰입니다. 다음 단계에서는 구성요소를 추가하고 카메라 위치 및 관련 속성을 포함한 지도의 초기 상태를 구성합니다.

  1. 기본 활동의 레이아웃 파일을 엽니다. 일반적으로 app/src/main/res/layout/activity_main.xml에 있습니다.

  2. 루트 ConstraintLayout (또는 루트 레이아웃 요소)에 map3d XML 네임스페이스를 추가합니다.

    xmlns:map3d="http://schemas.android.com/apk/res-auto"
    
  3. 'Hello World!'를 표시하는 기본 <TextView>를 삭제합니다.

  4. 레이아웃에 Map3DView 구성요소를 추가합니다. 카메라 위치와 기타 속성을 맞춤설정할 수 있습니다.

    <?xml version="1.0" encoding="utf-8"?>
    <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto"
      xmlns:map3d="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools"
      android:id="@+id/main"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      tools:context=".MainActivity">
    
      <com.google.android.gms.maps3d.Map3DView
        android:id="@+id/map3dView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        map3d:mode="hybrid"
        map3d:centerLat="38.544012"
        map3d:centerLng="-107.670428"
        map3d:centerAlt="2427.6"
        map3d:heading="310"
        map3d:tilt="63"
        map3d:range="8266"
        map3d:roll="0"
        map3d:minAltitude="0"
        map3d:maxAltitude="1000000"
        map3d:minHeading="0"
        map3d:maxHeading="360"
        map3d:minTilt="0"
        map3d:maxTilt="90"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    </androidx.constraintlayout.widget.ConstraintLayout>
    

2부: MainActivity.kt 업데이트

다음 단계에서는 1부의 activity_main.xml 파일에 추가된 Map3DView 구성요소를 초기화하고 구성요소 수명 주기 이벤트를 관리합니다.

  1. MainActivity.kt 파일을 엽니다. 일반적으로 app/src/main/java/com/example/yourpackagename/MainActivity.kt에 있습니다.

  2. Android용 지도 3D SDK에 필요한 가져오기를 추가합니다.

    import com.google.android.gms.maps3d.GoogleMap3D
    import com.google.android.gms.maps3d.Map3DView
    import com.google.android.gms.maps3d.OnMap3DViewReadyCallback
    
  3. MainActivity 클래스를 수정하여 OnMap3DViewReadyCallback를 구현합니다.

    class MainActivity : AppCompatActivity(), OnMap3DViewReadyCallback {
    
  4. Map3DViewGoogleMap3D 변수를 선언합니다.

    private lateinit var map3DView: Map3DView
    private var googleMap3D: GoogleMap3D? = null
    
  5. onCreate 메서드에서 setContentView(...)ViewCompat.setOnApplyWindowInsetsListener 블록 후에 map3DView를 초기화하고 onCreate 수명 주기 메서드를 호출하고 비동기식으로 지도를 요청합니다.

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        setContentView(R.layout.activity_main)
        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
            val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
            insets
        }
    
        map3DView = findViewById(R.id.map3dView)
        map3DView.onCreate(savedInstanceState)
        map3DView.getMap3DViewAsync(this)
    }
    
  6. onMap3DViewReady 메서드를 재정의합니다. 이 콜백은 지도를 사용할 준비가 되면 트리거됩니다.

    override fun onMap3DViewReady(googleMap3D: GoogleMap3D) {
        // Interact with the googleMap3D object here
        this.googleMap3D = googleMap3D
        // You can now make calls to the googleMap3D object, e.g.,
        // googleMap3D.cameraController.flyTo(camera { ... })
    }
    
  7. 다음 재정의를 MainActivity에 추가하여 활동에서 Map3DView로 수명 주기 이벤트를 전달합니다.

    override fun onStart() {
        super.onStart()
        map3DView.onStart()
    }
    
    override fun onResume() {
        super.onResume()
        map3DView.onResume()
    }
    
    override fun onPause() {
        map3DView.onPause()
        super.onPause()
    }
    
    override fun onStop() {
        map3DView.onStop()
        super.onStop()
    }
    
    override fun onDestroy() {
        map3DView.onDestroy()
        super.onDestroy()
    }
    
    override fun onSaveInstanceState(outState: Bundle) {
        super.onSaveInstanceState(outState)
        map3DView.onSaveInstanceState(outState)
    }
    
    override fun onLowMemory() {
        super.onLowMemory()
        map3DView.onLowMemory()
    }
    

3부: Gradle 동기화 및 실행

이제 앱의 레이아웃과 활동을 업데이트했으므로 앱을 빌드하고 실행하여 3D 지도 뷰를 확인할 수 있습니다.

  1. Gradle과 프로젝트를 동기화하려면 File > Sync Project with Gradle Files를 선택합니다.

  2. 에뮬레이터나 실제 기기에서 앱을 빌드하고 실행하려면 Run > Run을 선택합니다.

모든 항목이 올바르게 구성되면 앱에 3D 지도가 표시되며, activity_main.xml에 지정된 좌표 근처에 중심이 맞춰집니다.

다음 단계

이제 앱에 기본 3D 지도를 추가했으므로 카메라 경로 애니메이션, 3D 마커, 다각형과 같은 Android용 Maps 3D SDK의 고급 기능을 살펴볼 수 있습니다.