2011-10-19 28 views
0

由於某些原因,當我使用[mapView addOverlay:]時,沒有任何反應。調用[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中?如果需要,我可以發佈更多的代碼。謝謝!

回答

1

polylineWithPoints:count:方法需要C數組MKMapPoint結構。

MKMapPointCLLocationCoordinate2D(緯度,經度)不同。您正在使用MKMapPointMake創建MKMapPoint結構,但給出它的緯度和經度值。這樣的MKMapPoint不在預期的位置。

要麼使用MKMapPointForCoordinate創建從經度/緯度座標或者,可能更容易的MKMapPoint,創建的CLLocationCoordinate2D結構C數組和呼叫polylineWithCoordinates:count:代替。

+0

完美,不能相信我錯過了 - 謝謝! –

+0

太棒了,儘管克雷格對「缺失的物品」提出了一個很好的觀點。如果lats [iii]爲0,那麼您沒有設置點數[iii],從而導致地圖視圖將不喜歡並且崩潰或者折線看起來錯誤的垃圾值留下點[iii]。看看爲什麼lats [iii]是0開頭的和/或根本不包括它們在points數組中。我認爲Craig提出的建議是,使用NSMutableArray將該過程更容易,然後將結果傳輸到C數組。 (順便說一下,零緯度和經度是一個完全有效和真實的位置。) – Anna

+0

我知道0經度0長位置是一個有效的位置,但它不會完全接收信元接收。我同意,我認爲當數據存儲在第一位時,只應存儲非零緯度和經度。 –

0

難道是你的'大小'是錯的?你的points數組也會在源數據有0的地方丟失任何項目。如果他們被認爲是有效的,我會使用NSMutableArray並添加項目,然後在最後計算並將其傳遞給polylineWithPoints。

+0

這個問題是MKMapPoints不是對象,所以把它們放在一個NSMutableArray中很煩人。 –