You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
2.6 KiB
77 lines
2.6 KiB
#if !defined(__has_feature) || !__has_feature(objc_arc) |
|
#error "This file requires ARC support." |
|
#endif |
|
|
|
#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
|
|
|