2016-12-06 80 views
0

enter image description here现在我正在使用Google地图,我有要求在源和目标之间绘制路线。我正在使用GMSPolyline绘制路线,但对于行走模式,我想显示为谷歌地图的虚线。如果有人知道,请帮助我。在此先感谢如何使用GMSMapView为行走模式绘制虚线圆形路径路线?

dispatch_async(dispatch_get_main_queue(){

 let path = GMSPath(fromEncodedPath: rout) 
     var polilin = GMSPolyline(path: path) 
     polilin = GMSPolyline(path: path) 
     polilin.title = "WALK" 
     polilin.strokeWidth = 4.0 
     polilin.strokeColor = UIColor.redColor() 
     polilin.map = self.mapView 
     polilin.tappable = true 

    }) 
+0

https://developers.google.com/maps/documentation/ios-sdk/reference/interface_g_m_s_style_span。使用样式来获取它。 –

回答

2

你可以绘制点线使用。

- (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; 
} 
+0

谢谢你的回复,你有没有在迅速 –

+0

欢迎您 没有先生,我没有在迅速 – rvios

0

rvios's answer斯威夫特版本(与Swiftify)的帮助:

func createDashedLine(thisPoint: CLLocationCoordinate2D, nextPoint: CLLocationCoordinate2D, color: UIColor) { 
    let difLat = nextPoint.latitude - thisPoint.latitude 
    let difLng = nextPoint.longitude - thisPoint.longitude 
    let scale = camera.zoom * 2 
    let divLat = difLat/scale 
    let divLng = difLng/scale 
    let tmpOrig = thisPoint 

    var singleLinePath = GMSMutablePath() 

    for i in 0 ..< scale { 
     var tmpOri = tmpOrig 
     if i > 0 { 
      tmpOri = CLLocationCoordinate2DMake(tmpOrig.latitude + (divLat * 0.25), tmpOrig.longitude + (divLng * 0.25)) 
     } 

     singleLinePath.addCoordinate(tmpOri) 
     singleLinePath.addCoordinate(CLLocationCoordinate2DMake(tmpOrig.latitude + (divLat * 1.0), tmpOrig.longitude + (divLng * 1.0))) 
     tmpOri = CLLocationCoordinate2DMake(tmpOrig.latitude + (divLat * 1.0), tmpOrig.longitude + (divLng * 1.0)) 
    } 

    let polyline = GMSPolyline(path: singleLinePath) 
    polyline.geodesic = false 
    polyline.strokeWidth = 5.0 
    polyline.strokeColor = color 
    polyline.map = mapView 

    //Setup line style and draw 

    lengths = [(singleLinePath.lengthOfKind(kGMSLengthGeodesic)/100)] 
    polys = [polyline] 
    setupStyle(with: color) 
    tick() 
} 

func tick() { 
    for poly in polys { 
     poly.spans = GMSStyleSpans(poly.path, styles, lengths, kGMSLengthGeodesic, pos) 
    } 

    pos -= step 
} 

func setupStyle(with color: UIColor) { 
    let gradColor = GMSStrokeStyle.gradient(from: color, to: color) 
    styles = [gradColor, GMSStrokeStyle.solidColor(.white)] 
    step = 50000 
} 
相关问题