#if !defined(__has_feature) || !__has_feature(objc_arc) #error "This file requires ARC support." #endif #import "GoogleMapsDemos/Samples/GradientPolylinesViewController.h" #import @implementation GradientPolylinesViewController { GMSMapView *_mapView; GMSPolyline *_polyline; NSMutableArray *_trackData; } - (void)viewDidLoad { [super viewDidLoad]; GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:44.1314 longitude:9.6921 zoom:14.059f bearing:328.f viewingAngle:40.f]; _mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera]; self.view = _mapView; [self parseTrackFile]; [_polyline setSpans:[self gradientSpans]]; } - (NSArray *)gradientSpans { NSMutableArray *colorSpans = [NSMutableArray array]; NSUInteger count = [_trackData count]; UIColor *prevColor; for (NSUInteger i = 0; i < count; i++) { NSDictionary *dict = [_trackData objectAtIndex:i]; double elevation = [[dict objectForKey:@"elevation"] doubleValue]; UIColor *toColor = [UIColor colorWithHue:(float)elevation/700 saturation:1.f brightness:.9f alpha:1.f]; if (prevColor == nil) { prevColor = toColor; } GMSStrokeStyle *style = [GMSStrokeStyle gradientFromColor:prevColor toColor:toColor]; [colorSpans addObject:[GMSStyleSpan spanWithStyle:style]]; prevColor = toColor; } return colorSpans; } - (void)parseTrackFile { NSString *filePath = [[NSBundle mainBundle] pathForResource:@"track" ofType:@"json"]; NSData *data = [NSData dataWithContentsOfFile:filePath]; NSArray *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil]; _trackData = [[NSMutableArray alloc] init]; GMSMutablePath *path = [GMSMutablePath path]; for (NSUInteger i = 0; i < [json count]; i++) { NSDictionary *info = [json objectAtIndex:i]; NSNumber *elevation = [info objectForKey:@"elevation"]; CLLocationDegrees lat = [[info objectForKey:@"lat"] doubleValue]; CLLocationDegrees lng = [[info objectForKey:@"lng"] doubleValue]; CLLocation *loc = [[CLLocation alloc] initWithLatitude:lat longitude:lng]; [_trackData addObject:@{@"loc": loc, @"elevation": elevation}]; [path addLatitude:lat longitude:lng]; } _polyline = [GMSPolyline polylineWithPath:path]; _polyline.strokeWidth = 6; _polyline.map = _mapView; } @end