Android에서 Google Map을 사용하는 방법 요약

개요



요 전날 Yahoo!Japan의 해커슨 에서 GoogleMap을 사용한 Android 앱을 만들었으므로, 그 때 조사한 Map의 사용법을 정리했습니다.

화면에 지도 표시



지도를 표시하기만 하면 AndroidStudio의 New Project를 선택할 때 Google Maps Activity를 선택하면 표시할 수 있으므로 하나하나 포인트만 설명합니다.

GoogleMap Api 키 가져오기



Map을 사용하려면 Api 키가 필요하므로 여기에서 키를 만들고 res/values/google_maps_api.xml (별로 google_maps_api.xml이라는 이름이 필요하지 않음)에 씁니다.

google_maps_api.xml
<resources>
    <string name="google_maps_key" templateMergeStrategy="preserve" translatable="false">取得したキー</string>
</resources>

AndroidManifest에 Permission 및 키 meta-data 추가



AndroidManifest.xml에 아래의 Permission과 이전 키를 추가하여 Map을 사용할 수 있도록하십시오.

AndroidManifest.xml
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

<application (略)>
    <meta-data 
        android:name="com.google.android.geo.API_KEY" 
        android:value="@string/google_maps_key" />
    <!-- 中略 -->
</application>


build.gradle에 gms에 dependency 추가



build.gradle
    compile 'com.google.android.gms:play-services:10.0.1'

레이아웃에 지도 추가



매우 간단. SupportMapFragment를 추가하기만 하면 됩니다.

activity_main.xml
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:map="http://schemas.android.com/apk/res-au
      xmlns:tools="http://schemas.android.com/tools"
      android:id="@+id/map"
      android="com.google.android.gms.maps.SupportMapFragment
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      map:cameraZoom="15"/>

여기까지 하면, 화면에 맵이 표시될 것.
덧붙여서 이런 느낌으로 표시될 것 (map:cameraZoom="15"의 경우).


지도 사용법



Map은 GoogleMap 인스턴스를 통해 작업할 수 있습니다.
GoogleMap 인스턴스는 SupportMapFragment의 getMapAsync에서 onMapReadyCallback을 통해 다음과 같이 얻을 수 있습니다.
private void createMap() {
    // Obtain the SupportMapFragment and get fied when the map is ready to be used.
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);
}

@Override
public void onMapReady(GoogleMap googleMap) {
    Log.i(TAG, "Map created!");
    mMap = googleMap;
    (以下略)
}

섬세한 사용법은 공식 문서

내 위치를 지도에 표시



표준으로 제공되는 방법과 마커를 직접 설정하는 방법의 두 가지가 있습니다.

표준으로 제공되는 방법



일행 하기를 추기한다. 이 방법의 문제점은 표시가 표준의 푸른 원으로, 아이콘의 커스터마이즈를 할 수 없다는 것.
mMap.setMyLocationEnabled(true);

스스로 마커를 놓다



자신의 위치에 마커를 놓고 수시로 업데이트하여 표시합니다. 이 방법을 사용하면 마커 아이콘을 직접 결정할 수 있습니다.
@Override
public void onMapReady(GoogleMap googleMap) {
    (中略)
    mApiClient = new GoogleApiClient.Builder(this)
        .addApi(LocationServices.API)
        .addConnectionCallbacks(mConnectionCal
        .addOnConnectionFailedListener(mConnecedListener)
        .build();
    mApiClient.connect();
}

private GoogleApiClient.ConnectionCallbacks mConnectionCallback = new GoogleApiClient.ConnectionCallbacks() {
    @Override
    public void onConnected(@Nullable Bundle le) {
        final long INTERVAL_MILLIS = 1000;//更新の頻度。ここでは1秒おきに更新する
        LocationRequest request = new tionRequest();
        request.setInterval(INTERVAL_MILLIS);
        request.setPriority(LocationRequest.PRIORITY_HIGH_ACCU);
        LocationServices.FusedLocationApi.requestLocationUpdatApiClient, request, mLocationListener);
    }

    @Override
    public void onConnectionSuspended(int i) {

    }
};

private LocationListener mLocationListener = new LocationListener() {
    @Override
    public void onLocationChanged(Location location) {
        LatLng position = new LatLng(location.getLatitude(), location.getLongitude());
        MarkerOptions markerOptions = new MarkerOptions();
        //zoom to current position:
        if (mCurrentLocationMarker == null) {
            markerOptions.position(position);
            markerOptions.title("タイトル");
            markerOptions.icon(BitmapDescriptorFactory.fromResource(R.mipmap.好きなアイコン));

            mCurrentLocationMarker = mMap.addMarker(markerOptions);
        } else {
            mCurrentLocationMarker.setPosition(position);
        }
    }
};

또, 표시하고 있는 마커를 지우고 싶으면,
mCurrentLocationMarker.remove();

에서 한발. Map에 addMarker한 것을 기억해 두는 것이 포인트.
또한 addMarker는 자신의 위치뿐만 아니라 좌표 (위도 경도)를 알면 어디에나 설치할 수 있으므로 목적지에 마커를 설치하기도 쉽습니다.

지도에 선을 그립니다.



GoogleMapApi 등으로 검색한 경로를 지도상에 표시하고 싶을 때, 2점(혹은 그 이상)의 위도 경도를 알면 쉽게 선을 그릴 수 있습니다.
private void drawRoute(List<LatLng> route) {
    PolylineOptions options = new lineOptions();
    for (LatLng latLng : route) {
        options.add(latLng);
    }
    options.color();
    options.width();
    mMap.addPolyline(options);
}

이런 느낌


카메라 배율, 위치 변경



표시 배율, 위치를 변경하려면 CameraPosition을 다시 설정하면 OK.
아래에서는 북위 50도, 동경 50도 (카자흐스탄 서쪽 당), Zoom 레벨을 10으로 이동합니다.
CameraPosition cameraPosition = new CameraPosition.Builder().target(new LatLng(50.0, 50.0)).zoom(10).build();
mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));

사이고에게



많이 썼기 때문에 보충이 있으면 나중에 추가합니다.

좋은 웹페이지 즐겨찾기