出于某种原因,当我使用[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?如果需要,我可以发布更多代码。谢谢!
答案 0 :(得分:1)
polylineWithPoints:count:
方法采用MKMapPoint
结构的C数组。
MKMapPoint
与CLLocationCoordinate2D
(纬度,经度)不同。您正在使用MKMapPoint
创建MKMapPointMake
结构,但会为其提供纬度和经度值。这样的MKMapPoint
不在预期的位置。
使用MKMapPointForCoordinate
从纬度/经度坐标创建MKMapPoint
,或者更容易创建CLLocationCoordinate2D
结构的C数组并改为调用polylineWithCoordinates:count:
。
答案 1 :(得分:0)
这可能是你的“尺寸”错了吗?你的点数组也会在源数据为0的任何地方都有丢失的项目。我会使用NSMutableArray并在它们被认为有效的情况下添加项目,然后在最后计算并将其传递给polylineWithPoints。