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)
}