Все готово!

Прежде чем приступить к разработке, ознакомьтесь с документацией для разработчиков.

Активация Google Maps Android API

Чтобы помочь вам освоиться, мы покажем, как выполнить некоторые необходимые действия в консоли разработчика Google:

  1. Создание или выбор проекта
  2. Активация Google Maps Android API
  3. Создание соответствующих ключей

Фигуры

Google Maps API for Android предлагает простые способы добавления фигур на карты для их настройки в соответствии с потребностями вашего приложения.

  • Polyline – последовательность соединенных сегментов линии, которые могут образовать любую нужную вам фигуру и используются для обозначения путей и маршрутов на карте.
  • Polygon – замкнутая фигура, которая может использоваться для обозначения областей на карте.
  • Circle – географически точная проекция круга на земной поверхности, нарисованная на карте.

Вы можете настроить внешний вид этих фигур, изменив некоторые их свойства.

Примеры кода

Репозиторий ApiDemos в GitHub содержит примеры, демонстрирующие использование фигур и их свойств:

Ломаные линии

Класс Polyline определяет набор соединенных сегментов линии на карте. Объект Polyline состоит из набора точек с координатами LatLng и создает серию сегментов линии, соединяющих эти точки в упорядоченной последовательности.

В этом видеоролике демонстрируются идеи, которые помогут пользователям вашего приложения понять, в каком направлении они движутся, используя ломаные линии для прорисовки маршрута на карте.

Чтобы построить ломаную линию, сначала необходимо создать объект PolylineOptions и добавить к нему точки. Точка представляет собой местоположение на поверхности земли и выражается в виде объекта LatLng. Сегменты линии рисуются между точками в порядке их добавления к объекту PolylineOptions. Чтобы добавить точки к объекту PolylineOptions, вызовите PolylineOptions.add(). Обратите внимание, что этот метод принимает переменное число параметров, поэтому вы можете добавлять несколько точек одновременно (вы можете также вызвать 'PolylineOptions.addAll(Iterable)', если точки уже указаны в списке).

Затем вы можете добавить ломаную линию на карту, вызвав GoogleMap.addPolyline(PolylineOptions). Этот метод возвращает объект Polyline, с помощью которого вы можете впоследствии изменить ломаную линию.

В следующем фрагменте кода показано, как добавить прямоугольник на карту.

// Instantiates a new Polyline object and adds points to define a rectangle
PolylineOptions rectOptions = new PolylineOptions()
        .add(new LatLng(37.35, -122.0))
        .add(new LatLng(37.45, -122.0))  // North of the previous point, but at the same longitude
        .add(new LatLng(37.45, -122.2))  // Same latitude, and 30km to the west
        .add(new LatLng(37.35, -122.2))  // Same longitude, and 16km to the south
        .add(new LatLng(37.35, -122.0)); // Closes the polyline.

// Get back the mutable Polyline
Polyline polyline = myMap.addPolyline(rectOptions);

Чтобы изменить форму ломаной линии после ее добавления, можно вызвать метод Polyline.setPoints() и передать в него новый список точек для ломаной линии.

Вы можете изменить внешний вид ломаной линии либо до, либо после ее добавления на карту. Дополнительные сведения см. ниже в разделе об изменении внешнего вида.

События ломаной линии

По умолчанию ломаные линии не реагируют на нажатия. Вы можете включить или отключить их реакцию на нажатия, вызвав Polyline.setClickable(boolean).

Используйте OnPolylineClickListener для отслеживания событий нажатия ломаной линии, которая на них реагирует. Чтобы установить этот блок прослушивания на карте, вызовите GoogleMap.setOnPolylineClickListener(OnPolylineClickListener). Когда пользователь нажмет ломаную линию, вы получите обратный вызов onPolylineClick(Polyline).

Многоугольники

Объекты Polygon похожи на объекты Polyline тем, что состоят из серии координат в упорядоченной последовательности. В отличие от незамкнутых фигур многоугольники обозначают области, ограниченные замкнутым контуром с заполненной внутренней частью.

Вы можете добавить объект Polygon на карту тем же способом, что и объект Polyline. Сначала создайте объект PolygonOptions и добавьте к нему несколько точек. Эти точки будут формировать контур многоугольника. После этого многоугольник можно добавить на карту, вызвав GoogleMap.addPolygon(PolygonOptions), который вернет объект Polygon.

Приведенный ниже фрагмент кода добавляет прямоугольник на карту (обратите внимание, что поскольку мы не указали цвет заливки, которая по умолчанию отсутствует, внешний вид прямоугольника будет полностью соответствовать ломаной линии из фрагмента в предыдущем разделе):

// Instantiates a new Polygon object and adds points to define a rectangle
PolygonOptions rectOptions = new PolygonOptions()
              .add(new LatLng(37.35, -122.0),
                   new LatLng(37.45, -122.0),
                   new LatLng(37.45, -122.2),
                   new LatLng(37.35, -122.2),
                   new LatLng(37.35, -122.0));

// Get back the mutable Polygon
Polygon polygon = myMap.addPolygon(rectOptions);

Чтобы изменить форму многоугольника после его добавления, можно вызвать методPolygon.setPoints() и передать в него новый список точек для многоугольника.

Вы можете изменить внешний вид многоугольника либо до, либо после его добавления на карту. Дополнительные сведения см. ниже в разделе об изменении внешнего вида.

Автозавершение многоугольников

В примере выше объект Polygon состоит из пяти пар координат, однако первая и последняя пара координат являются одним и тем же местоположением, которое замыкает контур. Однако на практике, поскольку многоугольники определяют замкнутые области, вы можете не определять последнюю пару координат. Если последняя координата отличается от первой, API автоматически замкнет многоугольник, добавив первую координату в конец последовательности координат.

Приведенные ниже два многоугольника являются одинаковыми, и при вызове polygon.getPoints() для каждого из них будут возвращены все 4 точки.

Polygon polygon = map.addPolygon(new PolygonOptions()
        .add(new LatLng(0, 0), new LatLng(0, 5), new LatLng(3, 5), new LatLng(0, 0))
        .strokeColor(Color.RED)
        .fillColor(Color.BLUE));

Polygon polygon = map.addPolygon(new PolygonOptions()
         .add(new LatLng(0, 0), new LatLng(0, 5), new LatLng(3, 5))
         .strokeColor(Color.RED)
         .fillColor(Color.BLUE));

Создание незаполненного многоугольника

Несколько путей можно объединять в один объект Polygon и создавать сложные фигуры, такие как кольца, в которых многоугольные области находятся внутри многоугольника в виде "островов". Сложные фигуры всегда являются сочетанием нескольких более простых путей.

Два пути должны быть определены в одной и той же области. Больший из этих двух регионов определяет область заполнения и представляет собой простой многоугольник без дополнительных параметров. Затем передайте второй путь в метод addHole(). Когда второй, меньший путь будет полностью заключен внутри большего пути, это будет выглядеть, как если бы часть многоугольника была удалена. Если отверстие пересекает контур многоугольника, этот многоугольник будет создан без какого-либо заполнения.

Приведенный ниже фрагмент кода создает прямоугольник с прямоугольным отверстием меньшего размера.

mMap.addPolygon(new PolygonOptions()
        .add(new LatLng(0, 0), new LatLng(0, 5), new LatLng(3, 5), new LatLng(3, 0), new LatLng(0, 0))
        .addHole(new LatLng(1, 1), new LatLng(1, 2), new LatLng(2, 2), new LatLng(2, 1), new LatLng(1, 1))
        .fillColor(Color.BLUE));

События многоугольника

По умолчанию многоугольники не реагируют на нажатия. Вы можете включить или отключить их реакцию на нажатия, вызвав Polygon.setClickable(boolean).

Используйте OnPolygonClickListener для отслеживания событий нажатия многоугольника, который на них реагирует. Чтобы установить этот блок прослушивания на карте, вызовите GoogleMap.setOnPolygonClickListener(OnPolygonClickListener). Когда пользователь нажмет на многоугольник, вы получите обратный вызов onPolygonClick(Polygon).

Круги

В дополнение к общему классу Polygon интерфейс Maps API включает отдельные классы для объектов Circle, упрощающие их создание.

Для создания круга необходимо указать следующие два свойства:

  • его центр (свойство center) в виде координат LatLng;
  • его радиус (свойство radius) в метрах.

Затем круг определяется как набор всех точек на земной поверхности, которые находятся на расстоянии, не превышающем заданное число метров (radius) от указанного центра круга (center). Поскольку проекция Меркатора, используемая Maps API, проецирует сферу на плоскую поверхность, на карте это будет отображаться в виде практически идеального круга в случае расположения возле экватора, и в виде объекта все менее круглой формы (на экране) по мере удаления от экватора.

Приведенный ниже фрагмент кода добавляет круг на карту путем создания объекта CircleOptions и вызова GoogleMap.addCircle(CircleOptions):

// Instantiates a new CircleOptions object and defines the center and radius
CircleOptions circleOptions = new CircleOptions()
    .center(new LatLng(37.4, -122.1))
    .radius(1000)); // In meters

// Get back the mutable Circle
Circle circle = myMap.addCircle(circleOptions);

Чтобы изменить форму круга после его добавления, можно вызвать Circle.setRadius() или Circle.setCenter() и указать новые значения.

Вы можете изменить внешний вид круга либо до, либо после его добавления на карту. Дополнительные сведения см. ниже в разделе об изменении внешнего вида.

События круга

По умолчанию круги не реагируют на нажатия. Вы можете включить или отключить их реакцию на нажатия, вызвав GoogleMap.addCircle() с параметром CircleOptions.clickable(boolean), или вызвав Circle.setClickable(boolean).

Используйте OnCircleClickListener для отслеживания событий нажатия круга, который реагирует на нажатия. Чтобы установить этот блок прослушивания на карте, вызовите GoogleMap.setOnCircleClickListener(OnCircleClickListener).

Когда пользователь нажмет круг, вы получите обратный вызов onCircleClick(Circle), как показано в следующем примере кода:

public class MyActivity extends FragmentActivity
        implements OnMapReadyCallback {

        private GoogleMap mMap;
        private Circle circle;

        @Override
        public void onMapReady(GoogleMap map) {
            mMap = map;

            circle = mMap.addCircle(new CircleOptions()
                .center(new LatLng(37.4, -122.1))
                .radius(1000)
                .strokeWidth(10)
                .strokeColor(Color.GREEN)
                .fillColor(Color.argb(128, 255, 0, 0))
                .clickable(true);

            map.setOnCircleClickListener(new OnCircleClickListener() {

                @Override
                public void onCircleClick(Circle circle) {
                    // Flip the r, g and b components of the circle's
                    // stroke color.
                    int strokeColor = circle.getStrokeColor() ^ 0x00ffffff;
                    circle.setStrokeColor(strokeColor);
                }
            });
        }
}

Изменение внешнего вида

Вы можете изменить внешний вид фигуры либо до ее добавления на карту (указав нужное свойство в объекте параметров), либо после того, как фигура добавлена на карту. Доступны методы получения всех свойств, поэтому вы можете легко изменить текущее состояние фигуры.

Следующий фрагмент кода добавляет жирную голубую ломаную линию с геодезическими сегментами, проходящую от города Мельбурн до города Перт. В приведенных ниже разделах эти свойства описываются более подробно.

Polyline line = map.addPolyline(new PolylineOptions()
    .add(new LatLng(-37.81319, 144.96298), new LatLng(-31.95285, 115.85734))
    .width(25)
    .color(Color.BLUE)
    .geodesic(true));

Примечание. Наряду с тем, что большинство из этих свойств могут применяться к любой из описанных фигур, некоторые из них могут не иметь смысла для определенных фигур (например, ломаная линия не может иметь цвет заливки, так как в ней отсутствует внутренняя часть).

Цвет линии

Цвет линии представляет собой 32-битовое целочисленное значение цветового пространства ARGB (альфа-красный-зеленый-синий), которое определяет прозрачность и цвет линии для фигуры. Чтобы установить это свойство для объекта параметров фигуры, вызовите *Options.strokeColor() (или PolylineOptions.color() для ломаной линии). Если это свойство не указано, по умолчанию используется черный цвет линии (Color.BLACK).

Чтобы получить цвет линии после добавления фигуры на карту, вызовите getStrokeColor() (или getColor() для ломаной линии), а чтобы изменить этот цвет, вызовите setStrokeColor() (setColor() for a polyline).

Цвет заливки

Цвет заливки применяется только к многоугольникам и кругам. Он не применяется к ломаным линиям, так как у них нет внутренней части. Для многоугольника области внутри имеющихся в нем отверстий не являются его внутренней частью, поэтому они не будут окрашены в случае установки цвета заливки.

Цвет заливки представляет собой 32-битовое целочисленное значение цветового пространства ARGB (альфа-красный-зеленый-синий), которое определяет прозрачность и цвет внутренней части фигуры. Чтобы установить это свойство для объекта параметров фигуры, вызовите *Options.fillColor(). Если это свойство не указано, по умолчанию используется прозрачный цвет (Color.TRANSPARENT).

Чтобы получить цвет заливки после добавления фигуры на карту, вызовите getFillColor(), а чтобы изменить этот цвет, вызовите setFillColor().

Ширина линии

Ширина линии в виде числа с плавающей запятой в pixels (пикс.). Эта ширина остается постоянной при изменении масштаба карты (то есть, ширина штриха фигуры будет одинаковой на всех уровнях масштабирования). Чтобы установить это свойство для объекта параметров фигуры, вызовите *Options.strokeWidth() (или PolylineOptions.width() для ломаной линии). Если это свойство не указано, ширина линии по умолчанию составляет 10 пикселей.

Чтобы получить ширину линии после добавления фигуры на карту, вызовите getStrokeWidth() (или getWidth() для ломаной линии), а чтобы изменить эту ширину, вызовите setStrokeWidth() (setWidth() for a polyline).

Геодезические сегменты

Геодезический параметр применяется только к ломаным линиям и многоугольникам. Он не применяется к кругам, поскольку они не определены, как набор сегментов.

Геодезический параметр определяет, каким образом рисуются сегменты линий между последовательными вершинами ломаной линии или многоугольника. Геодезические сегменты указывают самый короткий маршрут на земной поверхности (сфере) и часто выглядят в виде кривых линий на карте с проекцией Меркатора. Негеодезические сегменты рисуются на карте в виде прямых линий.

Чтобы установить это свойство для объекта параметров фигуры, вызовите *Options.geodesic(), где значение true указывает, что сегменты должны быть прорисованы как геодезические, а значение false указывает, что сегменты должны быть изображены как прямые линии. Если это свойство не указано, по умолчанию используются негеодезические сегменты (false).

Чтобы получить значение геодезического параметра после добавления фигуры на карту, вызовитеisGeodesic(), а чтобы изменить этот параметр, вызовите setGeodesic().

Параметр Z-index

Параметр z-index указывает порядок расположения фигуры относительно других наложений (других фигур, наземных наложений и мозаичных наложений) на карте. Наложение с большим значением свойства z-index прорисовывается над наложениями с меньшими значениями z-index. Два наложения с одинаковым значением свойства z-index изображаются в произвольном порядке.

Обратите внимание, что маркеры всегда рисуются поверх других наложений, вне зависимости от значения параметра z-index этих наложений.

Чтобы установить это свойство для объекта параметров фигуры, вызовите *Options.zIndex(). Если z-index не указан, по умолчанию для него используется значение 0. Чтобы получить значение z-index после добавления фигуры на карту, вызовитеgetZIndex(), а чтобы изменить его, вызовите setZIndex().

Видимость

Свойство видимости указывает, должна ли фигура прорисовываться на карте. Значение видимости true означает, что фигура должна отображаться, а значение false указывает на отсутствие изображения. Это свойство позволяет временно отключить отображение фигуры на карте. Чтобы совсем удалить фигуру с карты, вызовите для нее метод remove().

Это свойство устанавливается для объекта параметров фигуры вызовом *Options.visible(). Если видимость не указана, по умолчанию для нее используется значение true. Чтобы получить значение видимости, после добавления фигуры на карту, вызовитеisVisible(), а чтобы изменить его, вызовите setVisible().

Оставить отзыв о...

Текущей странице
Google Maps Android API
Google Maps Android API
Нужна помощь? Обратитесь в службу поддержки.