gpt4 book ai didi

ios Google SDK Map 无法创建点折线

转载 作者:可可西里 更新时间:2023-11-01 03:22:06 25 4
gpt4 key购买 nike

我已调用以下方法在标记之间绘制虚线折线。到执行的时候,显示只画了实线。你能告诉我如何在谷歌地图上画虚线吗?

enter image description here

- (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]];
}
}
}
}

最佳答案

在谷歌地图中创建一条虚线就是这么简单。这定义了一条具有绿色和透明交替图案的多段线。

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];

关于ios Google SDK Map 无法创建点折线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24384209/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com