Mapkit覆盖从Random坐标开始坐标

时间:2014-08-04 22:05:21

标签: ios objective-c mapkit mkpolyline

在我的应用中,我在地图上绘制折线叠加层,其中的点从用户位置开始,从didUpdateUserLocation:委托方法获得。

但由于某种原因,它总是从非洲开始。

可能是什么原因?我是否必须为折线指定任何起始坐标?

-(void)drawTheRoute{
    [self.mapViewTrace removeOverlay:self.polyline];
    CLLocationCoordinate2D coordinates[arrayOfPoint.count];
    int i = 1;
    for (TMPoint *point in arrayOfPoint) {
        coordinates[i] = point.coordinate;
        i++;
    }


    MKPolyline *polyline = [MKPolyline polylineWithCoordinates:coordinates count:arrayOfPoint.count];
    [self.mapViewTrace addOverlay:polyline];

    self.polyline = polyline;

    self.lineRenderer = [[MKPolylineRenderer alloc] initWithPolyline:self.polyline];
    self.lineRenderer.strokeColor = [UIColor redColor];
    self.lineRenderer.lineWidth = 5;

}

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation{
        TMPoint *point = [[TMPoint alloc] initWithCoordinate:userLocation.location.coordinate withSpeed:userLocation.location.speed];
        [arrayOfPoint addObject:point];
        [self drawTheRoute];
}

1 个答案:

答案 0 :(得分:0)

drawTheRoute方法中,C数组coordinates使用arrayOfPoint.count元素声明,for循环使用i初始化C数组的每个索引作为索引变量。

问题是i索引变量最初设置为1而不是0。

C数组的第一个索引(和NSArray s)是索引0 - 而不是1.

这使得coordinates的第一个坐标保持未初始化,并且内存恰好包含被解释为坐标0,0的值(有时候"随机"坐标)。

(另一个影响是,当arrayOfPoint只有一个对象时,C数组只有一个索引为0的元素。但是由于i初始化为1,{{1循环将最终设置C数组的索引1(第二个元素),即使只分配了一个内存元素,并且您将访问未分配给您的内存,这可能导致EXC_BAD_ACCESS。)

更改此行:

for

到此:

int i = 1;