웹사이트 검색

Android Google 지도 예제 튜토리얼


이 튜토리얼에서는 애플리케이션에서 Android Google Maps API의 몇 가지 흥미로운 기능에 대해 논의하고 구현합니다. 토론에 들어가기 전에. Android Google 지도 설정을 완료했는지 확인하세요. 전제 조건입니다.

Android Google Maps API 개요

이 튜토리얼에서는 Android Google Maps API에서 제공하는 몇 가지 흥미로운 기능을 구현합니다. 기능에는 지도 마커, 지도 유형, 카메라 애니메이션 등이 포함됩니다. 이전 자습서에서 수행한 것처럼 content_main.xml 레이아웃에 지도 조각을 추가합니다. 이렇게 하면 MapFragment가 MainActivity에 연결됩니다. MainActivity 클래스에서 GoogleMap 개체를 확보하려면 OnMapReadyCallback 인터페이스를 구현하고 onMapReady 콜백 메서드를 재정의해야 합니다.

Google 지도 유형 설정

Google 지도 개체를 사용하여 지도 유형도 변경할 수 있습니다. 네 가지 유형의 맵이 있으며 각각 다른 맵 보기를 제공합니다. 이러한 유형은 일반, 하이브리드, 위성 및 지형입니다. 아래와 같이 사용할 수 있습니다.

googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
googleMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
googleMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN);

Google 지도 줌, 회전

다음 코드 줄을 사용하여 지도 확대/축소 및 회전을 활성화/비활성화할 수 있습니다.

googleMap.getUiSettings().setZoomGesturesEnabled(true);
googleMap.getUiSettings().setRotateGesturesEnabled(true);

GoogleMap 클래스에서 사용할 수 있는 다른 사용자 지정 방법은 다음과 같습니다.

  1. addCircle(CircleOptions options) : 이 메소드는 지도에 원을 추가합니다.
  2. addPolygon(PolygonOptions options) : 이 메소드는 지도에 폴리곤을 추가합니다.
  3. addTileOverlay(TileOverlayOptions options) : 이 메소드는 지도에 타일 오버레이를 추가합니다.
  4. animateCamera(CameraUpdate update) : 애니메이션으로 업데이트에 따라 지도를 이동하는 메소드
  5. clear() : 이 메소드는 지도에서 모든 것을 제거합니다.
  6. getMyLocation() : 이 메서드는 현재 표시된 사용자 위치를 반환합니다.
  7. moveCamera(CameraUpdate 업데이트) : 이 메서드는 업데이트에 정의된 지침에 따라 카메라 위치를 변경합니다.
  8. setTrafficEnabled(boolean enabled) : 이 메서드는 트래픽 레이어를 켜거나 끕니다.
  9. snapshot(GoogleMap.SnapshotReadyCallback callback) : 이 메소드는 지도의 스냅샷을 찍습니다.
  10. stopAnimation() : 이 메서드는 진행 중인 카메라 애니메이션이 있는 경우 카메라 애니메이션을 중지합니다.

Google 지도에 마커 추가

googleMap.addMarker(new MarkerOptions()
            .position(new LatLng(37.4233438,-122.0728817))
            .title("LinkedIn")
            .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN)));

googleMap.addMarker(new MarkerOptions()
        .position(new LatLng(37.4629101,-122.2449094))
        .title("Facebook")
        .snippet("Facebook HQ: Menlo Park"));

googleMap.addMarker(new MarkerOptions()
        .position(new LatLng(37.3092293,-122.1136845))
        .title("Apple"));

snippet()은 탭했을 때 마커 위에 더 많은 데이터를 표시하는 데 사용됩니다. 카메라를 특정 지점으로 애니메이션화하거나 이동하는 작업은 다음 스니펫을 사용하여 수행됩니다.

googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(37.4233438,-122.0728817),16));

위의 코드에서 16은 줌 레벨 번호입니다. 지도가 확대되고 정의된 LatLng 개체에 중심이 맞춰집니다. 참고: LatLng 객체는 인스턴스화되어 위도 및 경도 double 값과 함께 전달됩니다.

Android Google Maps 예제 프로젝트 구조

Android Google 지도 예제 코드

MainActivity.java는 아래와 같이 정의됩니다.

package com.journaldev.MapsInAction;

import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;


public class MainActivity extends AppCompatActivity implements OnMapReadyCallback {

    SupportMapFragment mapFragment;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);


        mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                mapFragment.getMapAsync(new OnMapReadyCallback() {
                    @Override
                    public void onMapReady(GoogleMap googleMap) {
                        googleMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN);

                        googleMap.addMarker(new MarkerOptions()
                                .position(new LatLng(37.4233438, -122.0728817))
                                .title("LinkedIn")
                                .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN)));

                        googleMap.addMarker(new MarkerOptions()
                                .position(new LatLng(37.4629101,-122.2449094))
                                .title("Facebook")
                                .snippet("Facebook HQ: Menlo Park"));

                        googleMap.addMarker(new MarkerOptions()
                                .position(new LatLng(37.3092293, -122.1136845))
                                .title("Apple"));

                        googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(37.4233438, -122.0728817), 10));
                    }
                });
            }
        });

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    @Override
    public void onMapReady(GoogleMap googleMap) {

      googleMap.addMarker(new MarkerOptions()
              .position(new LatLng(37.4233438, -122.0728817))
              .title("LinkedIn")
              .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN)));

        googleMap.addMarker(new MarkerOptions()
                .position(new LatLng(37.4629101,-122.2449094))
                .title("Facebook")
                .snippet("Facebook HQ: Menlo Park"));

        googleMap.addMarker(new MarkerOptions()
                .position(new LatLng(37.3092293, -122.1136845))
                .title("Apple"));

        googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(37.4233438, -122.0728817), 10));
    }
}

SupportMapFragment 개체에서 getMapAsync()를 호출하여 콜백을 등록합니다. FloatingActionButton은 다른 지도 유형으로 새 OnMapReadyCallBack 메서드를 호출합니다. content_main.xml에는 아래와 같이 MapFragment가 포함되어 있습니다.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:app="https://schemas.android.com/apk/res-auto"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="com.journaldev.MapsInAction.MainActivity"
    tools:showIn="@layout/activity_main">

    <fragment
        android:id="@+id/map"
        android:name="com.google.android.gms.maps.SupportMapFragment"
        android:layout_width="match_parent"
        android:layout_gravity="center"
        android:layout_height="match_parent"
        />

</RelativeLayout>

Google 지도 Android 애플리케이션 프로젝트 다운로드