ios Google SDK映射无法创建虚线多段线

ios Google SDK映射无法创建虚线多段线,ios,google-maps,google-maps-sdk-ios,google-polyline,Ios,Google Maps,Google Maps Sdk Ios,Google Polyline,我调用了下面的方法来绘制标记之间的虚线多段线。在执行时,它显示只绘制实线。你能告诉我如何在谷歌地图上画虚线吗 - (void) createDashedLine:(CLLocationCoordinate2D )thisPoint:(CLLocationCoordinate2D )nextPoint: (UIColor *)colour { NSLog(@"next pt latitude %ff" , nextPoint.latitude); NSLog(@"next pt l

我调用了下面的方法来绘制标记之间的虚线多段线。在执行时,它显示只绘制实线。你能告诉我如何在谷歌地图上画虚线吗

- (void) createDashedLine:(CLLocationCoordinate2D )thisPoint:(CLLocationCoordinate2D )nextPoint:
(UIColor *)colour
{
    NSLog(@"next pt latitude %ff" , nextPoint.latitude);
    NSLog(@"next pt longitude %ff" , nextPoint.longitude);
    NSLog(@"this pt laatitude %ff" , thisPoint.latitude);
    NSLog(@"this pt longitude %ff" , thisPoint.longitude);

    double difLat = nextPoint.latitude - thisPoint.latitude;
    double difLng = nextPoint.longitude - thisPoint.longitude;
    double scale = camera.zoom * 2;
    double divLat = difLat / scale;
    double divLng = difLng / scale;
    CLLocationCoordinate2D tmpOrig= thisPoint;
    GMSMutablePath *singleLinePath = [GMSMutablePath path];

    for(int i = 0 ; i < scale ; i ++){
        CLLocationCoordinate2D tmpOri = tmpOrig;
        if(i > 0){
            tmpOri = CLLocationCoordinate2DMake(tmpOrig.latitude + (divLat * 0.25f), tmpOrig.longitude + (divLng * 0.25f));
        }
        [singleLinePath addCoordinate:tmpOri];
        [singleLinePath addCoordinate:
         CLLocationCoordinate2DMake(tmpOrig.latitude + (divLat * 1.0f),
                                    tmpOrig.longitude + (divLng * 1.0f))];
        tmpOri = CLLocationCoordinate2DMake(tmpOrig.latitude + (divLat * 1.0f), tmpOrig.longitude + (divLng * 1.0f));
    }

    GMSPolyline *polyline ;
    polyline = [GMSPolyline polylineWithPath:singleLinePath];
    polyline.geodesic = NO;
    polyline.strokeWidth = 5.f;
    polyline.strokeColor = colour;
    polyline.map = mapView_;

    //Setup line style and draw
    _lengths = @[@([singleLinePath lengthOfKind:kGMSLengthGeodesic] / 50)];
    _polys = @[polyline];
    [self setupStyleWithColour:colour];
    [self tick];
}

- (void)tick {
    //Create steps for polyline(dotted polylines)
    for (GMSPolyline *poly in _polys) {
        poly.spans =
        GMSStyleSpans(poly.path, _styles, _lengths, kGMSLengthGeodesic, _pos);
    }
    _pos -= _step;
}

-(void)setupStyleWithColour:(UIColor *)color{

    GMSStrokeStyle *gradColor = [GMSStrokeStyle gradientFromColor:color toColor:color];

    _styles = @[gradColor,[GMSStrokeStyle solidColor:[UIColor colorWithWhite:0 alpha:0]],];
    _step = 50000;
}

- (void)addMarkers
{
    // NSMutableArray *polys = [NSMutableArray array];
    if([CarArray count] > 0){


        GMSMutablePath *path = [GMSMutablePath path];
        GMSMutablePath *currentPath = [GMSMutablePath path];
        GMSPolyline *polyline ;
        GMSPolyline *polylineC ;
        GMSMarker *marker;
        for (int i = 0; i < [CarArray count]; i++) {

            CheckPoints *cp = [CarArray objectAtIndex:i];
            CLLocationCoordinate2D position = CLLocationCoordinate2DMake(cp.getLatitude , cp.getLongitude);

            marker = [GMSMarker markerWithPosition:position];
            //  GMSMarker *marker = [[GMSMarker alloc] init];
            marker.position = position;
            NSLog( @"%d", cp.getState );
            NSLog( @"%f", cp.getLatitude);
            NSLog( @"%f", cp.getLongitude );
            NSLog( @"%@", cp.getDesp );
            marker.title = cp.getDesp;

            marker.zIndex = 1;
            NSString *tmpLat = [[NSString alloc] initWithFormat:@"%f", position.latitude];
            NSString *tmpLong = [[NSString alloc] initWithFormat:@"%f", position.longitude];
            marker.snippet = [NSString stringWithFormat:@"%@ %@", tmpLat,tmpLong];
            UIColor *color;
            if (cp.getState ==0) {
                color = [UIColor greenColor];
            } else {
                color = [UIColor redColor];
            }

            if([CarArray count] > 2){
                [path addLatitude:cp.getLatitude longitude:cp.getLongitude];
                if(i > [CarArray indexOfObject:CarArray.lastObject] -2){
                    [currentPath addLatitude:cp.getLatitude longitude:cp.getLongitude];
                }
            }else{
                [currentPath addLatitude:cp.getLatitude longitude:cp.getLongitude];
            }
            marker.icon = [GMSMarker markerImageWithColor:color];

            marker.map = mapView_;
            //  mapView_.selectedMarker = marker;
        }

        if([CarArray count] > 2) {

            polyline = [GMSPolyline polylineWithPath:currentPath];
            polyline.geodesic = YES;
            polyline.strokeWidth = 5.f;
            polyline.strokeColor = [UIColor greenColor];
            polyline.map = mapView_;



            _lengths = @[@([currentPath lengthOfKind:kGMSLengthGeodesic] / 50)];
            _polys = @[polyline];

            [self setupStyleWithColour:[UIColor greenColor]];
            [self tick];


            for(int i = 0 ; i < [currentPath count] -1 ; i++){
                CLLocationCoordinate2D thisPoint = [currentPath coordinateAtIndex:i];
                CLLocationCoordinate2D nextPoint = [currentPath coordinateAtIndex:i+1];


                NSLog(@"next pt s latitude %ff" , nextPoint.latitude);
                NSLog(@"next pt s longitude %ff" , nextPoint.longitude);
                NSLog(@"this pt s latitude %ff" , thisPoint.latitude);
                NSLog(@"this pt s longitude %ff" , thisPoint.longitude);

                [self drawArrowLines:mapView_ :thisPoint :nextPoint :[UIColor greenColor]:i+1: false];
                [self createDashedLine: thisPoint :nextPoint :[UIColor greenColor]];
            }

            GMSMutablePath *path2 = [GMSMutablePath path];
            GMSMutablePath *path3 = [GMSMutablePath path];
            path2 = path.mutableCopy;

            [path2 removeLastCoordinate];
            path3 = path2;
            polylineC = [GMSPolyline polylineWithPath:path3];
            polylineC.geodesic = YES;
            polylineC.strokeWidth = 5.f;
            polylineC.map = mapView_;



            _lengths = @[@([currentPath lengthOfKind:kGMSLengthGeodesic] / 50)];
            _polys = @[polylineC];

            [self setupStyleWithColour:[UIColor greenColor]];
            [self tick];


       //     polylineC.strokeColor = [UIColor redColor];

            for(int i = 0 ; i < [path count] -1 ; i++){
                CLLocationCoordinate2D thisPoint = [path coordinateAtIndex:i];
                CLLocationCoordinate2D nextPoint = [path coordinateAtIndex:i+1];

                NSLog(@"next pt s latitude %ff" , nextPoint.latitude);
                NSLog(@"next pt s longitude %ff" , nextPoint.longitude);
                NSLog(@"this pt s latitude %ff" , thisPoint.latitude);
                NSLog(@"this pt s longitude %ff" , thisPoint.longitude);

                [self drawArrowLines:mapView_ :thisPoint :nextPoint :[UIColor redColor]: i+1 : true];
                [self createDashedLine: thisPoint :nextPoint :[UIColor redColor]];
            }
        }else{
            polyline = [GMSPolyline polylineWithPath:currentPath];
            polyline.geodesic = NO;
            polyline.strokeWidth = 5.f;
            polyline.strokeColor = [UIColor greenColor];
            polyline.map = mapView_;


            _lengths = @[@([currentPath lengthOfKind:kGMSLengthGeodesic] / 50)];
            _polys = @[polyline];

            [self setupStyleWithColour:[UIColor greenColor]];
            [self tick];

            for(int i = 0 ; i < [currentPath count] -1 ; i++){
                CLLocationCoordinate2D thisPoint = [currentPath coordinateAtIndex:i];
                CLLocationCoordinate2D nextPoint = [currentPath coordinateAtIndex:i+1];


                NSLog(@"next pt s latitude %ff" , nextPoint.latitude);
                NSLog(@"next pt s longitude %ff" , nextPoint.longitude);
                NSLog(@"this pt s latitude %ff" , thisPoint.latitude);
                NSLog(@"this pt s longitude %ff" , thisPoint.longitude);

                [self drawArrowLines:mapView_ :thisPoint :nextPoint :[UIColor greenColor] : i+1 : false];
                [self createDashedLine: thisPoint :nextPoint :[UIColor greenColor]];
            }
        }
    }
}

-(void)CreatedDashedline:(CLLocationCoordinate2D)此点:(CLLocationCoordinate2D)下一点:
(UIColor*)颜色
{
NSLog(@“下一点纬度%ff”,下一点纬度);
NSLog(@“下一点经度%ff”,下一点经度);
NSLog(@“本点纬度%ff”,本点纬度);
NSLog(@“本点经度%ff”,本点经度);
双双双平面=下一个点。纬度-此点。纬度;
double difLng=nextPoint.longitude—thisPoint.longitude;
双刻度=摄影机.zoom*2;
双刻度=双平面/刻度;
双刻度=刻度/刻度;
CLLocationCoordinate2D tmpOrig=该点;
GMSMutablePath*单线路径=[GMSMutablePath];
对于(int i=0;i0){
tmpOri=CLLocationCoordinate2DMake(tmpOrig.latitude+(divLat*0.25f),tmpOrig.latitude+(divLng*0.25f));
}
[单线路径添加坐标:tmpOri];
[单线路径添加坐标:
ClLocationCoordination2Dmake(tmpOrig.latitude+(divLat*1.0f),
tmpOrig.longitude+(divLng*1.0f))];
tmpOri=CLLocationCoordinate2DMake(tmpOrig.latitude+(divLat*1.0f),tmpOrig.latitude+(divLng*1.0f));
}
GMSPolyline*多段线;
多段线=[GMSPolyline polylineWithPath:singleLinePath];
polyline.geodesic=否;
折线.strokeWidth=5.f;
polyline.strokeColor=颜色;
polyline.map=mapView;
//设置线条样式和绘制
_长度=@[@([singleLinePath lengthOfKind:kGMSLengthGeodesic]/50)];
_多边形=@[多段线];
[带颜色的自设置样式:颜色];
[自行勾选];
}
-(无效)勾选{
//为多段线(虚线多段线)创建步骤
用于(GMSPolyline*多边形中的多边形){
多边形跨度=
GMSStyleSpans(多边形路径、_样式、_长度、KGM长度测地线、_位置);
}
_pos-=\u步;
}
-(无效)SetupStyleWithColor:(UIColor*)颜色{
GMSStrokeStyle*gradColor=[GMSStrokeStyle GRADENTFROMCOLOR:color TO color:color];
_styles=@[gradColor[GMSStrokeStyle solidColor:[UIColor-WithWhite:0 alpha:0]],];
_阶跃=50000;
}
-(无效)添加标记
{
//NSMutableArray*polys=[NSMutableArray];
如果([CarArray count]>0){
GMSMutablePath*path=[GMSMutablePath];
GMSMutablePath*currentPath=[GMSMutablePath];
GMSPolyline*多段线;
GMSPolyline*多段线;
GMSMarker*标记;
对于(int i=0;i<[CarArray count];i++){
检查点*cp=[CarArray objectAtIndex:i];
CLLocationCoordinate2D位置=CLLocationCoordinate2DMake(cp.getLatitude,cp.getLength);
标记=[GMSMarker marker with position:position];
//GMSMarker*标记=[[GMSMarker alloc]init];
marker.position=位置;
NSLog(@“%d”,cp.getState);
NSLog(@“%f”,cp.getLatitude);
NSLog(@“%f”,cp.getLongitude);
NSLog(@“%@”,cp.getDesp);
marker.title=cp.getDesp;
marker.zIndex=1;
NSString*tmpLat=[[NSString alloc]initWithFormat:@“%f”,位置.纬度];
NSString*tmpLong=[[NSString alloc]initWithFormat:@“%f”,position.longitude];
marker.snippet=[NSString stringWithFormat:@“%@%@”,tmpLat,tmpLong];
UIColor*颜色;
如果(cp.getState==0){
颜色=[UIColor greenColor];
}否则{
颜色=[UIColor redColor];
}
如果([CarArray count]>2){
[路径添加纬度:cp.getLatitude经度:cp.getLatitude];
if(i>[CarArray indexOfObject:CarArray.lastObject]-2){
[currentPath addLatitude:cp.getLatitude经度:cp.getLatitude];
}
}否则{
[currentPath addLatitude:cp.getLatitude经度:cp.getLatitude];
}
marker.icon=[GMSMarker markerImageWithColor:color];
marker.map=mapView;
//地图视图\选定的标记=标记;
}
如果([CarArray count]>2){
多段线=[GMSPolyline polylineWithPath:currentPath];
polyline.geodesic=是;
折线.strokeWidth=5.f;
polyline.strokeColor=[UIColor greenColor];
polyline.map=mapView;
_长度=@[@([currentPath lengthOfKind:kGMSLengthGeodesic]/50)];
_多边形=@[多段线];
[self-SetupStyleWithColor:[UIColor greenColor]];
[自行勾选];
对于(int i=0;i<[currentPath count]-1;i++){
CLLocationCoordinate2D thisPoint=[currentPath CoordinateIndex:i];
CLLocationCoordinate2D nextPoint=[currentPath CoordinateIndex:i+1];
NSLog(@“下一点s纬度%ff”,下一点纬度);
NSLog(@“下一个点的经度%ff”,下一个点的经度);
NSLog(@“本点纬度%ff”,本点纬度);
NSLog(@“本点经度%ff”,本点经度);
[自绘制箭头线:地图视图:此点:下一点:[UIColor GREENCLOR]:i+1:false];
[self-CreatedDashedline:此点:下一点:[UIColor greenColor]];
}
GMSMutablePath*路径2=[GMSMutablePath];
GMSMutablePath*路径3=[GMSMutablePath];
path2=path.mutableCopy;
[path2 removeLastCoordinate];
路径3=路径2;
polylineC=[GMSPolyline polylineWithPath:path3];
多段线测地线=是;
折线行程宽度=5.f;
NSArray *_styles;
NSArray *_lengths;
NSArray *_polys;
double _pos, _step;
- (void) createDashedLine:(CLLocationCoordinate2D )thisPoint:(CLLocationCoordinate2D )nextPoint:
(UIColor *)colour
{

    double difLat = nextPoint.latitude - thisPoint.latitude;
    double difLng = nextPoint.longitude - thisPoint.longitude;
    double scale = camera.zoom * 2;
    double divLat = difLat / scale;
    double divLng = difLng / scale;
    CLLocationCoordinate2D tmpOrig= thisPoint;

    GMSMutablePath *singleLinePath = [GMSMutablePath path];

    for(int i = 0 ; i < scale ; i ++){
        CLLocationCoordinate2D tmpOri = tmpOrig;
        if(i > 0){
            tmpOri = CLLocationCoordinate2DMake(tmpOrig.latitude + (divLat * 0.25f),
                                                tmpOrig.longitude + (divLng * 0.25f));
        }
        [singleLinePath addCoordinate:tmpOri];
        [singleLinePath addCoordinate:
         CLLocationCoordinate2DMake(tmpOrig.latitude + (divLat * 1.0f),
                                        tmpOrig.longitude + (divLng * 1.0f))];


        tmpOri = CLLocationCoordinate2DMake(tmpOrig.latitude + (divLat * 1.0f),
                                            tmpOrig.longitude + (divLng * 1.0f));

    }

     GMSPolyline *polyline ;
     polyline = [GMSPolyline polylineWithPath:singleLinePath];
     polyline.geodesic = NO;
     polyline.strokeWidth = 5.f;
     polyline.strokeColor = colour;
     polyline.map = mapView_;

    //Setup line style and draw
    _lengths = @[@([singleLinePath lengthOfKind:kGMSLengthGeodesic] / 100)];
    _polys = @[polyline];
    [self setupStyleWithColour:colour];
    [self tick];
}

- (void)tick {
    //Create steps for polyline(dotted polylines)
    for (GMSPolyline *poly in _polys) {
        poly.spans =
        GMSStyleSpans(poly.path, _styles, _lengths, kGMSLengthGeodesic, _pos);
    }
    _pos -= _step;
}

-(void)setupStyleWithColour:(UIColor *)color{

    GMSStrokeStyle *gradColor = [GMSStrokeStyle gradientFromColor:color toColor:color];

    _styles = @[
                gradColor,
                [GMSStrokeStyle solidColor:[UIColor colorWithWhite:0 alpha:0]],
                ];
    _step = 50000;
}
GMSMutablePath *path = [GMSMutablePath path];

for (...) {
    // add coordinate to your path
    [path addCoordinate:CLLocationCoordinate2DMake(latitude, longitude)];
}

GMSPolyline *polyline = [GMSPolyline polylineWithPath:path];
polyline.map = self.mapView;
polyline.strokeWidth = 3.0;

NSArray *styles = @[[GMSStrokeStyle solidColor:[UIColor greenColor]],
                    [GMSStrokeStyle solidColor:[UIColor clearColor]]];

NSArray *lengths = @[@25, @20];

polyline.spans = GMSStyleSpans(polyline.path, styles, lengths, kGMSLengthRhumb);
NSArray *lengths = @[@10, @10];
func updateLine() {
    let styles = [
        GMSStrokeStyle.solidColor(UIColor.blackColor()),
        GMSStrokeStyle.solidColor(UIColor.clearColor())
    ]
    let scale = 1.0 / mapView.projection.pointsForMeters(1, atCoordinate: mapView.camera.target)
    line.spans = GMSStyleSpans(line.path!, styles, [15.0 * scale, 10.0 * scale], kGMSLengthRhumb)
}
//Returns a GMSPath parsed from gpx file
        path = GpxProcessor(fileNames: "test.gpx").getPolygons()
        redPolyline = GMSPolyline(path: path)
        redPolyline.geodesic = true

        redPolyline.map = mapView

        let styles = [GMSStrokeStyle.solidColor(.clear),
                      GMSStrokeStyle.solidColor(.red)]
        let lengths: [NSNumber] = [10, 10]

        redPolyline.spans = GMSStyleSpans(redPolyline.path!, styles, lengths,GMSLengthKind.rhumb)
func updateLine() {
    let styles: [GMSStrokeStyle] = [.solidColor(.red), .solidColor(.clear)]
    let scale = 1.0 / mapView.projection.points(forMeters: 1, at: mapView.camera.target)
    let solidLine = NSNumber(value: 15.0 * Float(scale))
    let gap = NSNumber(value: 10.0 * Float(scale))
    line.spans = GMSStyleSpans(line.path!, styles, [solidLine, gap], GMSLengthKind.rhumb)
}