Поиск по сайту:

Учебное пособие по примерам Google Maps для Android


В этом уроке мы обсудим и реализуем некоторые интересные функции Android Google Maps API в нашем приложении. Прежде чем мы перейдем к обсуждению. Пожалуйста, убедитесь, что вы прошли настройку Android Google Maps. Это обязательное условие.

Обзор API Карт Google для Android

В этом руководстве мы реализуем несколько интересных функций, предоставляемых Android Google Maps API. Особенности включают маркеры карты, типы карт, анимацию камеры и некоторые другие. Добавьте фрагмент карты в макет content_main.xml, как мы делали это в предыдущем уроке. Это прикрепляет MapFragment к нашему MainActivity. Чтобы получить объект GoogleMap в нашем классе MainActivity, нам нужно реализовать интерфейс 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) : этот метод добавляет круг на карту
  2. addPolygon(параметры PolygonOptions) : этот метод добавляет многоугольник на карту
  3. addTileOverlay(TileOverlayOptions options) : этот метод добавляет на карту наложение плитки.
  4. animateCamera(CameraUpdate update): этот метод перемещает карту в соответствии с обновлением с анимацией
  5. clear(): этот метод удаляет все с карты.
  6. getMyLocation(): этот метод возвращает текущее отображаемое местоположение пользователя.
  7. moveCamera(CameraUpdate update) : этот метод перемещает камеру в соответствии с инструкциями, указанными в обновлении.
  8. setTrafficEnabled(boolean enable) : этот метод включает или выключает уровень трафика
  9. snapshot(обратный вызов GoogleMap.SnapshotReadyCallback) : этот метод делает снимок карты
  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 создается и передается с двойными значениями широты и долготы.

Пример структуры проекта Google Maps для Android

Пример кода Google Maps для Android

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));
    }
}

Мы вызываем getMapAsync() для объекта SupportMapFragment, чтобы зарегистрировать обратный вызов. 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 Maps для Android