1

出于某种原因,当我使用 [mapView addOverlay:] 时,什么也没有发生。

代码:

NSData* dataLat = [[NSUserDefaults standardUserDefaults] objectForKey:@"latKey"];
NSArray* overlayLat = [NSKeyedUnarchiver unarchiveObjectWithData:dataLat];
double lats[overlayLat.count];
NSData* dataLong = [[NSUserDefaults standardUserDefaults] objectForKey:@"longKey"];
NSArray* overlayLong = [NSKeyedUnarchiver unarchiveObjectWithData:dataLong];
double longs[overlayLong.count];

for(int iii = 0; iii < overlayLat.count; iii++)
{
    NSNumber* a = (NSNumber*)[overlayLat objectAtIndex:iii];
    lats[iii] = [a doubleValue];
}

for(int iii = 0; iii < overlayLong.count; iii++)
{
    NSNumber* a = (NSNumber*)[overlayLong objectAtIndex:iii];
    longs[iii] = [a doubleValue];
}

int size = (sizeof(lats) / sizeof(lats[0]));

NSLog(@"%d", size);

MKMapPoint points[size];

for(int iii = 0; iii < overlayLong.count; iii++)
{
    MKMapPoint point = MKMapPointMake(lats[iii], longs[iii]);
    if(lats[iii] != 0)
        points[iii] = point;
}

for(int iii = 0; iii < 15; iii++)
{
    NSLog(@"Lat (x):%f", points[iii].x);
    NSLog(@"Long (y):%f", points[iii].y);
}

MKPolyline* line = [MKPolyline polylineWithPoints:points count:size];

[mapView addOverlay:line];

NSLog(@"finished");

绝大多数代码只是访问数据并将其转换为可用的坐标。我的问题是(因为我知道坐标是有效的,因为 NSLogs),为什么在调用 addOverlay: 时没有任何东西被添加到 mapView 中?如果需要,我可以发布更多代码。谢谢!

4

2 回答 2

2

polylineWithPoints:count:方法采用 CMKMapPoint结构数组。

AnMKMapPoint与 a CLLocationCoordinate2D(latitude, longitude) 不同。您正在使用但为其提供纬度和经度值来创建MKMapPoint结构。MKMapPointMake这样一个MKMapPoint不在预期的位置。

要么使用从纬度/经度坐标MKMapPointForCoordinate创建一个,或者可能更容易,创建一个 C结构数组并调用。MKMapPointCLLocationCoordinate2DpolylineWithCoordinates:count:

于 2011-10-19T02:56:48.953 回答
0

会不会是你的“尺寸”不对?您的点数组也会在源数据为 0 的任何地方缺少项目。我会使用 NSMutableArray 并在它们被认为有效的情况下添加项目,然后在最后计算并将其传递给 polylineWithPoints。

于 2011-10-19T03:00:43.037 回答