
Maps SDK для iOS позволяет добавлять на карты различные фигуры. Поддерживаются следующие фигуры:
- Ломаная линия – это серия соединенных отрезков, из которых можно составить любую фигуру. С их помощью можно отмечать пути и маршруты на карте.
- Многоугольник – это замкнутая фигура, используемая для обозначения областей на карте.
- Круг – это географически точная проекция круга на земную поверхность.
Внешний вид любой фигуры можно изменить разными способами.
Ломаные линии
Ломаные линии позволяют прорисовывать линии на карте. Объект GMSPolyline представляет собой упорядоченную последовательность точек, отображаемую в виде набора отрезков. Цвет ломаной линии можно задать с помощью GMSStrokeStyle.
Чтобы создать ломаную линию, необходимо указать ее контур, создав соответствующий объект GMSMutablePath с двумя или более точками.
Каждый объект CLLocationCoordinate2D представляет собой точку на земной поверхности. Точки соединяются прямыми линиями в том порядке, в каком они были добавлены в маршрут. Добавить точки в контур можно с помощью методов addCoordinate: или addLatitude:longitude:.
Swift
let path = GMSMutablePath() path.add(CLLocationCoordinate2D(latitude: -33.85, longitude: 151.20)) path.add(CLLocationCoordinate2D(latitude: -33.70, longitude: 151.40)) path.add(CLLocationCoordinate2D(latitude: -33.73, longitude: 151.41)) let polyline = GMSPolyline(path: path)
Objective-C
GMSMutablePath *path = [GMSMutablePath path]; [path addCoordinate:CLLocationCoordinate2DMake(-33.85, 151.20)]; [path addCoordinate:CLLocationCoordinate2DMake(-33.70, 151.40)]; [path addCoordinate:CLLocationCoordinate2DMake(-33.73, 151.41)]; GMSPolyline *polyline = [GMSPolyline polylineWithPath:path];
Добавление ломаной линии
- Создайте объект
GMSMutablePath. - Задайте точки на пути с помощью методов
addCoordinate:илиaddLatitude:longitude:. - Создайте новый экземпляр объекта
GMSPolyline, используя путь в качестве аргумента. - При необходимости задайте другие свойства, например
strokeWidthиstrokeColor. - Задайте свойство
mapдляGMSPolyline. - Фигура появится на карте.
В следующем фрагменте кода показано, как добавлять на карту прямоугольник.
Swift
let rectanglePath = GMSMutablePath() rectanglePath.add(CLLocationCoordinate2D(latitude: 37.36, longitude: -122.0)) rectanglePath.add(CLLocationCoordinate2D(latitude: 37.45, longitude: -122.0)) rectanglePath.add(CLLocationCoordinate2D(latitude: 37.45, longitude: -122.2)) rectanglePath.add(CLLocationCoordinate2D(latitude: 37.36, longitude: -122.2)) rectanglePath.add(CLLocationCoordinate2D(latitude: 37.36, longitude: -122.0)) let rectangle = GMSPolyline(path: path) rectangle.map = mapView
Objective-C
GMSMutablePath *rectanglePath = [GMSMutablePath path]; [rectanglePath addCoordinate:CLLocationCoordinate2DMake(37.36, -122.0)]; [rectanglePath addCoordinate:CLLocationCoordinate2DMake(37.45, -122.0)]; [rectanglePath addCoordinate:CLLocationCoordinate2DMake(37.45, -122.2)]; [rectanglePath addCoordinate:CLLocationCoordinate2DMake(37.36, -122.2)]; [rectanglePath addCoordinate:CLLocationCoordinate2DMake(37.36, -122.0)]; GMSPolyline *rectangle = [GMSPolyline polylineWithPath:path]; rectangle.map = mapView;

Как удалить ломаную линию
Чтобы удалить ломаную линию с карты, установите для свойства map объекта GMSPolyline значение nil. Вы также можете удалить с карты все наложения (включая ломаные линии и другие фигуры), вызвав метод GMSMapView
clear.
Swift
mapView.clear()
Objective-C
[mapView clear];
Настройка ломаной линии
Объект GMSPolyline предоставляет несколько свойств, позволяющих управлять внешним видом линии. Поддерживаются следующие параметры.
strokeWidth- Ширина всей линии в экранных точках. (значение по умолчанию – 1). Она не масштабируется, т. е. остается одинакова на всех уровнях масштаба карты.
geodesic-
Если задано значение
YES, рендерить край этой ломаной линии как геодезический. Геодезическая линия представляет собой наиболее краткий путь вдоль земной поверхности. На карте с проекцией Меркатора такая линия имеет форму кривой. Негеодезическая линия рисуется на карте как прямая. Значение по умолчанию –NO. spans- Используется для указания цвета одного или нескольких сегментов ломаной линии. Свойство spans – это массив объектов
GMSStyleSpan. Свойствоspans– это предпочтительный способ изменить цвет ломаной линии. strokeColor- Объект
UIColor, определяющий цвет ломаной линии. Значение по умолчанию –blueColor. Если задано свойствоspans, то свойствоstrokeColorигнорируется.
Показанный ниже код соединяет Мельбурн и Перт толстой ломаной линией с геодезической интерполяцией.
Swift
let path = GMSMutablePath() path.addLatitude(-37.81319, longitude: 144.96298) path.addLatitude(-31.95285, longitude: 115.85734) let polyline = GMSPolyline(path: path) polyline.strokeWidth = 10.0 polyline.geodesic = true polyline.map = mapView
Objective-C
GMSMutablePath *path = [GMSMutablePath path]; [path addLatitude:-37.81319 longitude:144.96298]; [path addLatitude:-31.95285 longitude:115.85734]; GMSPolyline *polyline = [GMSPolyline polylineWithPath:path]; polyline.strokeWidth = 10.f; polyline.geodesic = YES; polyline.map = mapView;
Чтобы изменить ломаную линию после ее добавления на карту, сохраните возможность обращаться к объекту GMSPolyline.
Swift
polyline.strokeColor = .blue
Objective-C
polyline.strokeColor = [UIColor blueColor];
Как изменить цвет ломаной линии
Ломаные линии отображаются на карте в виде серии сегментов. Вы можете изменить цвет отдельных сегментов или всей линии с помощью свойства spans. Это свойство позволяет точно настраивать цвет ломаной линии, но есть и более простые способы применить один стиль ко всей линии.
В приведенном ниже фрагменте кода с помощью метода spanWithColor: цвет всей линии меняется на красный.
Swift
polyline.spans = [GMSStyleSpan(color: .red)]
Objective-C
polyline.spans = @[[GMSStyleSpan spanWithColor:[UIColor redColor]]];
Если у вас уже есть доступ к объекту GMSStrokeStyle, вы можете использовать метод spanWithStyle:.
Swift
let solidRed = GMSStrokeStyle.solidColor(.red) polyline.spans = [GMSStyleSpan(style: solidRed)]
Objective-C
GMSStrokeStyle *solidRed = [GMSStrokeStyle solidColor:[UIColor redColor]]; polyline.spans = @[[GMSStyleSpan spanWithStyle:solidRed]];
До версии 1.7 Maps SDK для iOS для настройки цвета GMSPolyline использовалось одно свойство – strokeColor. Свойство spans имеет приоритет над свойством strokeColor.
Swift
polyline.strokeColor = .red
Objective-C
polyline.strokeColor = [UIColor redColor];
Стили
Если в приложении один и тот же цвет обводки применяется несколько раз, может быть полезно определить стиль, который можно использовать повторно. Стили ломаных линий задаются с помощью объекта GMSStrokeStyle. Стиль обводки может быть сплошным цветом или градиентом от одного цвета к другому. Созданный стиль можно применить к объекту GMSStyleSpan с помощью метода spanWithStyle:.
Swift
// Create two styles: one that is solid blue, and one that is a gradient from red to yellow let solidBlue = GMSStrokeStyle.solidColor(.blue) let solidBlueSpan = GMSStyleSpan(style: solidBlue) let redYellow = GMSStrokeStyle.gradient(from: .red, to: .yellow) let redYellowSpan = GMSStyleSpan(style: redYellow)
Objective-C
// Create two styles: one that is solid blue, and one that is a gradient from red to yellow GMSStrokeStyle *solidBlue = [GMSStrokeStyle solidColor:[UIColor blueColor]]; GMSStyleSpan *solidBlueSpan = [GMSStyleSpan spanWithStyle:solidBlue]; GMSStrokeStyle *redYellow = [GMSStrokeStyle gradientFromColor:[UIColor redColor] toColor:[UIColor yellowColor]]; GMSStyleSpan *redYellowSpan = [GMSStyleSpan spanWithStyle:redYellow];
Стиль span будет применяться до конца ломаной линии или до тех пор, пока не будет задан новый стиль. Вы можете изменить цвет всей линии, задав для свойства spans ломаной линии одно значение GMSStyleSpan. В примере показано, как применить градиент по всей длине ломаной линии.
Swift
polyline.spans = [GMSStyleSpan(style: redYellow)]
Objective-C
polyline.spans = @[[GMSStyleSpan spanWithStyle:redYellow]];
Изменение цвета отдельных сегментов линий
Чтобы настроить стиль каждого сегмента ломаной линии по отдельности, создайте массив объектов GMSStyleSpan и передайте его свойству spans. По умолчанию каждый элемент массива задает цвет соответствующего сегмента линии. Если элементов в массиве больше, чем сегментов в строке, лишние элементы будут игнорироваться. Если в массиве меньше элементов, последний элемент GMSStyleSpan описывает цвет оставшейся части строки.
Вы можете использовать цветные блоки и/или градиентные ломаные линии, чтобы указать изменения вдоль ломаной линии, например высоту или скорость. В приведенном ниже фрагменте кода для первых двух сегментов ломаной линии задан красный цвет, а для остальных – градиент от красного к желтому.
Swift
polyline.spans = [ GMSStyleSpan(style: solidRed), GMSStyleSpan(style: solidRed), GMSStyleSpan(style: redYellow) ]
Objective-C
polyline.spans = @[[GMSStyleSpan spanWithStyle:solidRed], [GMSStyleSpan spanWithStyle:solidRed], [GMSStyleSpan spanWithStyle:redYellow]];
Чтобы задать стиль сразу для нескольких сегментов, используйте метод spanWithStyle:segments:. Например, следующий код равнозначен приведенному выше.
Длина последнего сегмента GMSStyleSpan всегда игнорируется, поскольку стиль используется для описания остатка строки.
Swift
polyline.spans = [ GMSStyleSpan(style: solidRed, segments:2), GMSStyleSpan(style: redYellow, segments:10) ]
Objective-C
polyline.spans = @[[GMSStyleSpan spanWithStyle:solidRed segments:2], [GMSStyleSpan spanWithStyle:redYellow segments:10]];
Дробные сегменты
Сегменты также могут быть указаны в виде дробного значения. В результате стиль будет применен к дробному числу сегментов, что может привести к разделению одного сегмента. Каждый GMSStyleSpan начинается сразу после предыдущего. В примере ниже серый цвет начинается с середины второго сегмента и продолжается до середины третьего.
Swift
polyline.spans = [ GMSStyleSpan(style: solidRed, segments: 2.5), GMSStyleSpan(color: .gray), GMSStyleSpan(color: .purple, segments: 0.75), GMSStyleSpan(style: redYellow) ]
Objective-C
polyline.spans = @[[GMSStyleSpan spanWithStyle:solidRed segments:2.5], [GMSStyleSpan spanWithColor:[UIColor grayColor]], [GMSStyleSpan spanWithColor:[UIColor purpleColor] segments:0.75], [GMSStyleSpan spanWithStyle:redYellow]];
Как добавить повторяющийся цветовой узор к ломаной линии
Если вы хотите добавить узор к ломаной линии, используйте метод GMSStyleSpans в GMSGeometryUtils. Метод GMSStyleSpans принимает два массива, которые определяют повторяющийся шаблон. Один массив задает стили, которые должны повторяться, а другой определяет интервал повторения. Используя их вместе, можно создать шаблон, который можно применить к любой ломаной линии, независимо от ее длины или количества доступных сегментов.
Например, в приведенном ниже фрагменте кода определяется ломаная линия с чередующимся черно-белым узором. Длина отрезков измеряется в метрах вдоль локсодромии (в проекции Меркатора это прямая линия), поскольку тип задан как kGMSLengthRhumb.
Swift
let styles = [ GMSStrokeStyle.solidColor(.white), GMSStrokeStyle.solidColor(.black) ] let lengths: [NSNumber] = [100000, 50000] polyline.spans = GMSStyleSpans( polyline.path!, styles, lengths, GMSLengthKind.rhumb )
Objective-C
NSArray *styles = @[[GMSStrokeStyle solidColor:[UIColor whiteColor]], [GMSStrokeStyle solidColor:[UIColor blackColor]]]; NSArray *lengths = @[@100000, @50000]; polyline.spans = GMSStyleSpans(polyline.path, styles, lengths, kGMSLengthRhumb);
Текстурированные ломаные линии со спрайтами
Текстурированные ломаные линии позволяют создавать ломаные линии с использованием повторяющегося растрового изображения по вашему выбору. Фигуры отображаются с четким фоновым штрихом, но штамп не усекается по углам линий, что делает их полезными в таких ситуациях, как точки для иллюстрации пешеходных маршрутов.

Чтобы использовать эту функцию, создайте объект GMSSpriteStyle и задайте его в качестве штампа с помощью свойства stampStyle объекта GMSStrokeStyle.
Swift
let path = GMSMutablePath() path.addLatitude(-37.81319, longitude: 144.96298) path.addLatitude(-31.95285, longitude: 115.85734) let polyline = GMSPolyline(path: path) polyline.strokeWidth = 20 let image = UIImage(named: "imageFromBundleOrAsset")! // Image could be from anywhere let stampStyle = GMSSpriteStyle(image: image) let transparentStampStroke = GMSStrokeStyle.transparentStroke(withStamp: stampStyle) let span = GMSStyleSpan(style: transparentStampStroke) polyline.spans = [span] polyline.map = mapView
Objective-C
GMSMutablePath *path = [GMSMutablePath path]; [path addLatitude:-37.81319 longitude:144.96298]; [path addLatitude:-31.95285 longitude:115.85734]; GMSPolyline *polyline = [GMSPolyline polylineWithPath:path]; polyline.strokeWidth = 20; UIImage *image = [UIImage imageNamed:@"imageFromBundleOrAsset"]; GMSStrokeStyle *transparentStampStroke = [GMSStrokeStyle transparentStrokeWithStampStyle:[GMSSpriteStyle spriteStyleWithImage:image]]; GMSStyleSpan *span = [GMSStyleSpan spanWithStyle:transparentStampStroke]; polyline.spans = @[span]; polyline.map = mapView;
Текстурированные ломаные линии
Текстурированные ломаные линии позволяют создавать ломаные линии с использованием повторяющейся текстуры по вашему выбору. Фигуры могут быть показаны с прозрачным, сплошным или градиентным фоновым штрихом. Размер текстуры меняется в зависимости от уровня масштабирования. Изображения в начале или конце маршрутов или точек маршрута усекаются при определенных уровнях масштабирования.

Для этого используется класс GMSTextureStyle, который задается в качестве штампа с помощью свойства stampStyle класса GMSStrokeStyle.
Swift
let path = GMSMutablePath() path.addLatitude(-37.81319, longitude: 144.96298) path.addLatitude(-31.95285, longitude: 115.85734) let polyline = GMSPolyline(path: path) polyline.strokeWidth = 20 let redWithStamp = GMSStrokeStyle.solidColor(.red) let image = UIImage(named: "imageFromBundleOrAsset")! // Image could be from anywhere redWithStamp.stampStyle = GMSTextureStyle(image: image) let span = GMSStyleSpan(style: redWithStamp) polyline.spans = [span] polyline.map = mapView
Objective-C
GMSMutablePath *path = [GMSMutablePath path]; [path addLatitude:-37.81319 longitude:144.96298]; [path addLatitude:-31.95285 longitude:115.85734]; GMSPolyline *polyline = [GMSPolyline polylineWithPath:path]; polyline.strokeWidth = 20; GMSStrokeStyle *redWithStamp = [GMSStrokeStyle solidColor:[UIColor redColor]]; UIImage *image = [UIImage imageNamed:@"imageFromBundleOrAsset"]; // Image could be from anywhere redWithStamp.stampStyle = [GMSTextureStyle textureStyleWithImage:image]; GMSStyleSpan *span = [GMSStyleSpan spanWithStyle:redWithStamp]; polyline.spans = @[span]; polyline.map = mapView;
Функции карты
Свойство mapCapabilities в GMSMapView добавляет программную проверку функций, связанных с картой. Это полезно, когда нужно узнать, доступны ли определенные capabilities карты, прежде чем вызывать определенные API. Этот запрос определяет, поддерживаются ли ломаные линии со спрайтами в режиме просмотра карты.
Swift
let path = GMSMutablePath() path.addLatitude(-37.81319, longitude: 144.96298) path.addLatitude(-31.95285, longitude: 115.85734) let polyline = GMSPolyline(path: path) polyline.strokeWidth = 20 let image = UIImage(named: "imageFromBundleOrAsset")! // Image could be from anywhere let spans: [GMSStyleSpan] if (mapView.mapCapabilities.contains(.spritePolylines)) { let spriteStyle = GMSSpriteStyle(image: image) let stroke = GMSStrokeStyle.transparentStroke(withStamp: spriteStyle) spans = [ GMSStyleSpan(style: stroke) ] } else { let stroke = GMSStrokeStyle.solidColor(.clear) stroke.stampStyle = GMSTextureStyle(image: image) spans = [ GMSStyleSpan(style: stroke) ] } polyline.spans = spans polyline.map = mapView
Objective-C
GMSMutablePath *path = [GMSMutablePath path]; [path addLatitude:-37.81319 longitude:144.96298]; [path addLatitude:-31.95285 longitude:115.85734]; UIImage *_Nonnull image = [UIImage imageNamed:@"imageFromBundleOrAsset"]; // Image could be from anywhere NSArray<GMSStyleSpan *> * spans; if (mapView.mapCapabilities & GMSMapCapabilityFlagsSpritePolylines) { GMSSpriteStyle *spriteStyle = [GMSSpriteStyle spriteStyleWithImage:image]; GMSStrokeStyle *stroke = [GMSStrokeStyle transparentStrokeWithStampStyle:spriteStyle]; spans = @[ [GMSStyleSpan spanWithStyle:stroke] ]; } else { GMSStrokeStyle *stroke = [GMSStrokeStyle solidColor:UIColor.clearColor]; stroke.stampStyle = [GMSTextureStyle textureStyleWithImage:image]; spans = @[ [GMSStyleSpan spanWithStyle:stroke] ]; } GMSPolyline *polyline = [GMSPolyline polylineWithPath:path]; polyline.strokeWidth = 20; polyline.spans = spans; polyline.map = mapView;
Этот шаблон позволяет подписаться на изменения и реагировать на обновления состояния просмотра карты. Вы также можете реализовать didChangeMapCapabilities на GMSMapViewDelegate, чтобы получать обновления о доступности функций.
Многоугольники
Многоугольники похожи на ломаные линии тем, что состоят из заданной последовательности координат. Многоугольники отличаются тем, что являются замкнутыми фигурами и могут иметь заливку. В Maps SDK для iOS многоугольники определяются классом GMSPolygon.
Добавить на карту многоугольник (GMSPolygon) можно тем же способом, что и ломаную линию (GMSPolyline). Сначала укажите путь, создав соответствующий объект GMSMutablePath и добавив в него точки.
формирующие контур многоугольника. Каждый объект CLLocationCoordinate2D представляет собой точку на земной поверхности. Точки соединяются прямыми линиями в том порядке, в каком они были добавлены в путь.
Как добавить многоугольник
- Создайте объект
GMSMutablePath. - Задайте точки на пути с помощью методов
addCoordinate:илиaddLatitude:longitude:. формирующие контур многоугольника. - Создайте новый экземпляр объекта
GMSPolygon, используя путь в качестве аргумента. - При необходимости задайте другие свойства, такие как
strokeWidth,strokeColorиfillColor. - Назначьте многоугольник объекту
GMSMapView, задав свойствоGMSPolygon.map. - Многоугольник появится на карте.
В следующем фрагменте кода показано, как добавлять прямоугольник на карту.
Swift
// Create a rectangular path let rect = GMSMutablePath() rect.add(CLLocationCoordinate2D(latitude: 37.36, longitude: -122.0)) rect.add(CLLocationCoordinate2D(latitude: 37.45, longitude: -122.0)) rect.add(CLLocationCoordinate2D(latitude: 37.45, longitude: -122.2)) rect.add(CLLocationCoordinate2D(latitude: 37.36, longitude: -122.2)) // Create the polygon, and assign it to the map. let polygon = GMSPolygon(path: rect) polygon.fillColor = UIColor(red: 0.25, green: 0, blue: 0, alpha: 0.05); polygon.strokeColor = .black polygon.strokeWidth = 2 polygon.map = mapView
Objective-C
// Create a rectangular path GMSMutablePath *rect = [GMSMutablePath path]; [rect addCoordinate:CLLocationCoordinate2DMake(37.36, -122.0)]; [rect addCoordinate:CLLocationCoordinate2DMake(37.45, -122.0)]; [rect addCoordinate:CLLocationCoordinate2DMake(37.45, -122.2)]; [rect addCoordinate:CLLocationCoordinate2DMake(37.36, -122.2)]; // Create the polygon, and assign it to the map. GMSPolygon *polygon = [GMSPolygon polygonWithPath:rect]; polygon.fillColor = [UIColor colorWithRed:0.25 green:0 blue:0 alpha:0.05]; polygon.strokeColor = [UIColor blackColor]; polygon.strokeWidth = 2; polygon.map = mapView;
Внешний вид многоугольника можно настроить как до его добавления на карту, так и после.
Удаление многоугольника
Чтобы удалить многоугольник, задайте для его свойства GMSPolygon.map значение nil и отсоедините layer от родительского элемента.
Swift
polygon.map = nil polygon.layer.removeFromSuperLayer()
Objective-C
polygon.map = nil; [polygon.layer removeFromSuperlayer];
Круги
Помимо общего класса GMSPolygon, в Maps SDK для iOS также есть класс GMSCircle, позволяющий рисовать круги на поверхности Земли.
Чтобы создать круг, необходимо указать следующие два свойства:
position(объектCLLocationCoordinate2D, содержащий координаты центра);radius(радиус в метрах).
Круг затем определяется как набор всех точек на земной поверхности, которые удалены от координат center на расстояние radius. В силу особенностей проекции Меркатора, используемой в Maps API, сфера выглядит на карте, как почти идеальный круг, если располагается в районе экватора, и стремится к эллипсу по мере удаления от экватора.
Добавление круга
В приведенном ниже фрагменте кода показано, как добавлять круг на карту:
Swift
let circleCenter = CLLocationCoordinate2D(latitude: 37.35, longitude: -122.0) let circle = GMSCircle(position: circleCenter, radius: 1000) circle.map = mapView
Objective-C
CLLocationCoordinate2D circleCenter = CLLocationCoordinate2DMake(37.35, -122.0); GMSCircle *circle = [GMSCircle circleWithPosition:circleCenter radius:1000]; circle.map = mapView;
Изменить внешний вид круга можно как до, так и после его добавления на карту.
Как настроить круг
Вы можете задать пользовательские цвета и толщину линий, изменив свойства объекта GMSCircle. Поддерживаются следующие параметры.
fillColor- Объект
UIColor, определяющий цвет заливки круга. (по умолчанию она прозрачна). strokeColor- Объект
UIColor, определяющий цвет контура окружности. Значение по умолчанию –blackColor. strokeWidth- Толщина контура круга в экранных точках. (значение по умолчанию – 1). Толщина не меняется при масштабировании.
Показанный ниже код добавляет на карту толстый красный круг с полупрозрачной красной заливкой.
Swift
circle.fillColor = UIColor(red: 0.35, green: 0, blue: 0, alpha: 0.05) circle.strokeColor = .red circle.strokeWidth = 5
Objective-C
circle.fillColor = [UIColor colorWithRed:0.25 green:0 blue:0 alpha:0.05]; circle.strokeColor = [UIColor redColor]; circle.strokeWidth = 5;
Как создать полый многоугольник
В одном объекте GMSPolygon можно объединить несколько контуров. Это позволяет создавать сложные фигуры, в которых одни многоугольники располагаются внутри других подобно островкам (например, кольца с заливкой). Сложные фигуры состоят из нескольких контуров.
Создайте многоугольник с контуром, который определяет наибольшую площадь, покрываемую многоугольником. Затем укажите свойство holes многоугольника в виде массива из одного или нескольких объектов GMSPath, которые определяют отверстия в многоугольнике.
Если меньший контур располагается внутри большего, он будет виден как вырезанный сегмент.
Следующий пример кода демонстрирует создание многоугольника с двумя отверстиями:
Swift
let hydeParkLocation = CLLocationCoordinate2D(latitude: -33.87344, longitude: 151.21135) let camera = GMSCameraPosition.camera(withTarget: hydeParkLocation, zoom: 16) let options = GMSMapViewOptions() options.camera = camera let mapView = GMSMapView(options: options) mapView.animate(to: camera) let hydePark = "tpwmEkd|y[QVe@Pk@BsHe@mGc@iNaAKMaBIYIq@qAMo@Eo@@[Fe@DoALu@HUb@c@XUZS^ELGxOhAd@@ZB`@J^BhFRlBN\\BZ@`AFrATAJAR?rAE\\C~BIpD" let archibaldFountain = "tlvmEqq|y[NNCXSJQOB[TI" let reflectionPool = "bewmEwk|y[Dm@zAPEj@{AO" let hollowPolygon = GMSPolygon() hollowPolygon.path = GMSPath(fromEncodedPath: hydePark) hollowPolygon.holes = [GMSPath(fromEncodedPath: archibaldFountain)!, GMSPath(fromEncodedPath: reflectionPool)!] hollowPolygon.fillColor = UIColor(red: 1.0, green: 0.0, blue: 0.0, alpha: 0.2) hollowPolygon.strokeColor = UIColor(red: 1.0, green: 0.0, blue: 0.0, alpha: 1.0) hollowPolygon.strokeWidth = 2 hollowPolygon.map = mapView
Objective-C
CLLocationCoordinate2D hydeParkLocation = CLLocationCoordinate2DMake(-33.87344, 151.21135); GMSCameraPosition *camera = [GMSCameraPosition cameraWithTarget:hydeParkLocation zoom:16]; GMSMapViewOptions *options = [[GMSMapViewOptions alloc] init]; options.camera = camera; mapView = [[GMSMapView alloc] initWithOptions:options]; NSString *hydePark = @"tpwmEkd|y[QVe@Pk@BsHe@mGc@iNaAKMaBIYIq@qAMo@Eo@@[Fe@DoALu@HUb@c@XUZS^ELGxOhAd@@ZB`@J^BhFRlBN\\BZ@`AFrATAJAR?rAE\\C~BIpD"; NSString *archibaldFountain = @"tlvmEqq|y[NNCXSJQOB[TI"; NSString *reflectionPool = @"bewmEwk|y[Dm@zAPEj@{AO"; GMSPolygon *hollowPolygon = [[GMSPolygon alloc] init]; hollowPolygon.path = [GMSPath pathFromEncodedPath:hydePark]; hollowPolygon.holes = @[[GMSPath pathFromEncodedPath:archibaldFountain], [GMSPath pathFromEncodedPath:reflectionPool]]; hollowPolygon.fillColor = [UIColor colorWithRed:1.0 green:0.0 blue:0.0 alpha:0.2]; hollowPolygon.strokeColor = [UIColor colorWithRed:1.0 green:0.0 blue:0.0 alpha:1.0]; hollowPolygon.strokeWidth = 2; hollowPolygon.map = mapView;