Google地图折线不完美

我使用iOS的最新谷歌地图API绘制折线。 我正在逐点构build多段线,但它不能正确渲染,因为当我缩小折线从地图上消失(不按照字面意思),当我放大它只是显示线。

放大视图 这是放大时如何显示折线

缩小视图 缩小时就是这样

这里是我绘制折线的function

RCPolyline *polyline = [[RCPolyline alloc] init]; [polyline drawPolylineFromPoint:self.selectedEmployee.location toPoint:location]; 

我已经覆盖init:对于RCPolyline是这样的

 - (instancetype)init { self = [super init]; if (self) { self.strokeWidth = 5.0f; self.strokeColor = UIColor.redColor; self.geodesic = YES; self.map = [RCMapView sharedMapView]; } return self;} 

drawPolylineFromPoint:toPoint:这样做

  - (void)drawPolylineFromPoint:(CLLocation *)pointX toPoint:(CLLocation *)pointY { GMSMutablePath *path = [GMSMutablePath path]; [path addCoordinate:pointX.coordinate]; [path addCoordinate:pointY.coordinate]; self.path = path;} 

我发现这个故障,我做了RCPolyline类的本地实例,并调用了构build折线的方法,我想要的是为RCPolyline实例创build一个全局对象,并更新RCPolyline类实例的RCPolyline

像这样的东西:

 - (instancetype)initWithMap:(GMSMapView *)mapView { self = [super init]; if (self) { self.strokeWidth = 4.0f; self.strokeColor = [UIColor redColor]; self.geodesic = YES; self.map = mapView; self.mutablePath = [GMSMutablePath path]; } return self;} 

现在我从同一个实例调用这个方法。

 - (void)appendPolylineWithCoordinate:(CLLocation *)location { [self.mutablePath addCoordinate:location.coordinate]; self.path = self.mutablePath;} 

PS: RCPolylineRCPolyline的子类

试试这个代码。

 - (void)fetchPolylineWithOrigin:(CLLocation *)origin destination:(CLLocation *)destination { GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:lat longitude:longg zoom:12]; GMSMapView *mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera]; mapView.myLocationEnabled = YES; self.view = mapView; GMSMarker *marker = [[GMSMarker alloc] init]; marker.position = CLLocationCoordinate2DMake(-33.86, 151.20); marker.map = mapView; NSString *originString = [NSString stringWithFormat:@"%f,%f", origin.coordinate.latitude, origin.coordinate.longitude]; NSString *destinationString = [NSString stringWithFormat:@"%f,%f", destination.coordinate.latitude, destination.coordinate.longitude]; NSString *directionsAPI = @"https://maps.googleapis.com/maps/api/directions/json?"; NSString *directionsUrlString = [NSString stringWithFormat:@"%@&origin=%@&destination=%@&mode=driving&key=%@&alternatives=true", directionsAPI, originString, destinationString,@"YOUR API KEY"]; NSURL *directionsUrl = [NSURL URLWithString:directionsUrlString]; NSURLSessionDataTask *fetchDirectionsTask = [[NSURLSession sharedSession] dataTaskWithURL:directionsUrl completionHandler: ^(NSData *data, NSURLResponse *response, NSError *error) { NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error]; if(error) { return; } NSArray *routesArray = [json objectForKey:@"routes"]; GMSPolyline *polyline = nil; int i=1; for (id route in routesArray) { NSDictionary *routeDict = [route valueForKey:@"overview_polyline"]; NSString *points = [routeDict objectForKey:@"points"]; GMSCoordinateBounds *bounds = [[GMSCoordinateBounds alloc] init]; GMSPath *path = [GMSPath pathFromEncodedPath:points]; polyline = [GMSPolyline polylineWithPath:path]; polyline.strokeWidth = 3; if(i==1) { polyline.strokeColor = [UIColor greenColor]; }else if(i==2) { polyline.strokeColor = [UIColor redColor]; }else{ polyline.strokeColor = [UIColor blueColor]; } i = i+1; bounds = [bounds includingCoordinate:marker.position]; polyline.map=mapView; } }]; [fetchDirectionsTask resume]; }