MKPolyline只绘制点

时间:2014-07-22 21:46:49

标签: ios ios7

我正在尝试为相应的lat / lng点数组绘制多个MKPolylines。但是,当我将addOverlay添加到我的mapView时,绘制了点,但没有连接。

-(void)addAllRoutes:(NSData *)routedata{

NSDictionary *json = [NSJSONSerialization JSONObjectWithData:routedata options:0 error:NULL];



for (NSDictionary *annnotationobject in json) {

    NSArray *polyarray = [[NSArray alloc] initWithArray:[annnotationobject objectForKey:@"polyline"]];
    NSDictionary *polyDict = [[NSDictionary alloc] initWithDictionary:[polyarray objectAtIndex:0]];
    //NSLog(@"keys = %@",[polyDict allKeys]);
    //NSLog(@"values = %@",[polyDict allValues]);

    NSInteger pointsCount = polyarray.count;

    CLLocationCoordinate2D pointsToUse[pointsCount];

    for(int i = 0; i < pointsCount; i++){
        NSString *lat = polyDict[@"lat"];
        NSString *lng = polyDict[@"lng"];
        CLLocationDegrees latitude = [lat doubleValue];
        CLLocationDegrees longitude = [lng doubleValue];
        pointsToUse[i] = CLLocationCoordinate2DMake(latitude, longitude);


    }


    MKPolyline *myPolyline = [MKPolyline polylineWithCoordinates:pointsToUse count:pointsCount];

    [self.mapView addOverlay:myPolyline];


}

}

路线数据来自json文本:

    "polyline": [
        {
            "lat": 43.02038, 
            "lng": -87.897706
        }, 
        {
            "lat": 43.008363, 
            "lng": -87.892578
        }, 
        {
            "lat": 43.006454, 
            "lng": -87.891977
        }, 
        {
            "lat": 43.005188, 
            "lng": -87.891827
        }, 
        {
            "lat": 43.004029, 
            "lng": -87.891891
        }, 
        {
            "lat": 43.00302, 
            "lng": -87.89202
        }, 
        {
            "lat": 43.00184, 
            "lng": -87.892106
        }
    ], 

每个点都与预期完全一致,只是没有画线来连接它们。很难找到处于类似情况的其他人。欢迎提供所有帮助/建议。如有必要,可以提供其他代码。

1 个答案:

答案 0 :(得分:1)

&#34;折线&#34; element是一个字典数组(每个字典都有该行中每个点的坐标)。

pointsCount设置为&#34;折线&#34;中的点数。然后for-i循环填充pointsToUse C数组。

问题是坐标始终取自polyDict,其中 永远不会在循环内发生变化。

polyDict设置为折线中的第一个坐标,并且永远不会在for-i循环中更新。
因此,您最终会得到一条折线,其中所有点都具有相同的坐标。

如果您有多条折线,最终会得到&#34;点图&#34;。


要解决此问题,删除此行

NSDictionary *polyDict = [[NSDictionary alloc] initWithDictionary:
                             [polyarray objectAtIndex:0]];

for-i之前的NSString *lat = ...循环中添加此行:

NSDictionary *polyDict = [polyarray objectAtIndex:i];

现在polyDict将在循环迭代时指向i坐标。


此外,我假设您已经实施了rendererForOverlay并设置了地图视图delegate(否则不会显示任何内容)。


<小时/> 不相关但请注意,您不需要alloc + initNSDictionary polyDict - 只需获取对polyarray的引用即可已经在polyarray

annotationobject同样如此 - 只需引用NSArray *polyarray = [annnotationobject objectForKey:@"polyline"]; 中的那个:

{{1}}