| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- /*
- * Copyright 2016 Google Inc. All rights reserved.
- *
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
- * file except in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under
- * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
- * ANY KIND, either express or implied. See the License for the specific language governing
- * permissions and limitations under the License.
- */
- #import "GoogleMapsDemos/Samples/GradientPolylinesViewController.h"
- #import <GoogleMaps/GoogleMaps.h>
- @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
|