# Google Maps on iOS: markers and route playback

Language: en
Canonical: [Google Maps on iOS: markers and route playback](<https://allluckly.cn/en/journal/2015-06-21-google-maps-on-ios-markers-and-route-playback/>)
中文：[中文 HTML](<https://allluckly.cn/%E5%9C%B0%E5%9B%BE/iOS%E8%B0%83%E7%94%A8Google-%E5%9C%B0%E5%9B%BE>)
English: [English HTML](<https://allluckly.cn/en/journal/2015-06-21-google-maps-on-ios-markers-and-route-playback/>)
Published: 2015-06-21T00:00:00+08:00
Modified: 2026-10-23T10:34:09+08:00
Author: [Bison](<https://allluckly.cn/about/>)

Records a Google Maps integration intended to make map presentation consistent across iOS and Android. It includes the main code for map initialisation, markers and route lines, along with the setup entry point for obtaining a maps API key.

Originally credited to Bison. Content is retained as published.

English translation of the [Chinese original](<https://allluckly.cn/%E5%9C%B0%E5%9B%BE/iOS%E8%B0%83%E7%94%A8Google-%E5%9C%B0%E5%9B%BE>), translated on 2026-10-23. The article body uses automated translation; app descriptions, historical reading notes and video subtitles receive separate editorial checks. Original publication dates, attribution, code and version notes are retained.

**Before you read** This technical note dates from 2015–2017. The examples have not been rerun as part of this archive update. Read API, dependency and tool details in the context of the original publication date.

> “iOS development is like moving things around; once you become skilled enough, you can start taking shortcuts.” Bison

The project I recently worked on needed its maps to match the Android client, which used Google Map rather than Baidu Maps.  
 To be honest, it was a bit troublesome. Before working alongside an Android client, I usually used Apple's built-in maps, Amap, or Baidu.  
 I had hardly worked with Google Maps before. The main code is below.

.h file

`@property (strong, nonatomic) GMSMapView *_mapView;`

.m file

// Create the map

```css
- (void)creatMap{

    _mapView = [[GMSMapView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
    [self.view addSubview:_mapView];
    [_mapView clear];
    [self initMapView];
}
```

It consists of the following three parts.

```css
- (void)initMapView
{

    GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-6.13631
    longitude:106.789352
    zoom:ZOOM_LEVEL];
    _mapView.mapType = kGMSTypeNormal;
    _mapView.camera = camera;
    _mapView.delegate = self;
    _geocoder = [[GMSGeocoder alloc] init];

    polyline = [[GMSPolyline alloc] init];
    linepath = [GMSMutablePath path];


    CLLocationCoordinate2D coords;
    coords.latitude = -6.136271;
    coords.longitude = 106.789216;


    _mapView.camera = [GMSCameraPosition cameraWithTarget:coords
    zoom:ZOOM_LEVEL];

    //显示标注
    GMSReverseGeocodeCallback handler = ^(GMSReverseGeocodeResponse *response,
    NSError *error) {
    if (response && response.firstResult) {

        GMSMarker *marker = [[GMSMarker alloc] init];
        marker.position = coords;
        marker.title = response.firstResult.addressLine1;
        marker.snippet = response.firstResult.addressLine2;
        _addressData = response.firstResult.addressLine2;
        [self refreshGpsInfo];
        marker.appearAnimation = kGMSMarkerAnimationNone;
        marker.icon = SETIMAGE(@"deviceannotation.png");
        marker.map = _mapView;
    } else {
        NSLog(@"Could not reverse geocode point (%f,%f): %@",
        coords.latitude, coords.longitude, error);
    }
    };

    [_geocoder reverseGeocodeCoordinate:coords
    completionHandler:handler];
    //画线，轨迹回放
    [linepath removeAllCoordinates];
    [self drawLineWithLocationArray:trackArray];


    /*
    注，trackArray里面的数据格式
    CLLocation *nowLocation = [[CLLocation alloc] initWithLatitude:coords.latitude longitude:coords.longitude];
    [trackArray addObject:nowLocation];

    */

}
```

// Draw a line for route playback

```css
- (void)drawLineWithLocationArray:(NSArray *)locationArray
{

    if(current_type == _CURRENT_TRACK)
    polyline.strokeColor = [UIColor blueColor];
    else
    polyline.strokeColor = [UIColor redColor];
    polyline.strokeWidth = 6.f;

    // for(int idx = 0; idx < pointStrings.count; idx++)
    for(int idx = 0; idx < locationArray.count; idx++)
    {
    CLLocation *location = [locationArray objectAtIndex:idx];
    CLLocationDegrees latitude  = location.coordinate.latitude;
    CLLocationDegrees longitude = location.coordinate.longitude;

    // create our coordinate and add it to the correct spot in the array
    CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(latitude, longitude);
    [linepath addCoordinate:coordinate];
    }
    polyline.path = linepath;
    polyline.map = _mapView;
}
```

For the Google Api, register on Google's developer website and enter the relevant information about your own app to obtain an apikey.

