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.
78 lines
2.6 KiB
78 lines
2.6 KiB
![]()
2 years ago
|
#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
|