2011-10-19 15 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:メソッドは、MKMapPoint構造体のC配列をとります。

MKMapPointは、CLLocationCoordinate2D(緯度、経度)と同じではありません。 MKMapPointMakeを使ってMKMapPoint構造体を作成していますが、緯度と経度の値を与えています。このようなMKMapPointは予定された場所にありません。

いずれかは、おそらく容易緯度/経度座標又は、からMKMapPointを作成CLLocationCoordinate2D構造体のC配列を作成し、その代わりpolylineWithCoordinates:count:を呼び出すためにMKMapPointForCoordinateを使用します。

+0

完璧、私はそれを逃したと信じられない - ありがとう! –

+0

偉大な、クレイグは "欠けているアイテム"について良い点を作っている。ラッツ[iii]が0の場合はポイントを設定しません。[iii]マップビューが気に入らずクラッシュしたり、ポリラインが正しく表示されないゴミ値でポイント[iii]を残しています。なぜラット[iii]が0から始まっているのか、それらをポイント配列にまったく含まないのかを調べてみましょう。私はCraigが示唆していることは、そのプロセスはNSMutableArrayでより簡単になり、その結果をC配列に転送することだと思います。 (ちなみに、ゼロ緯度と経度は完全に有効で実際の場所です) – Anna

+0

私は、0緯度0の長い場所が有効な場所であることを知っていますが、正確にはセルの受信を受け取っていません。私は同意する、私は、データが最初に格納されるとき、ゼロ以外の緯度と経度だけが格納されるべきだと思う。 –

0

「サイズ」が間違っていますか?あなたのポイント配列はまた、ソースデータが0だったどこにも欠けているアイテムを持っています。私はNSMutableArrayに行き、それらが有効であると見なされるならばアイテムを追加し、最後に数えてpolylineWithPointsに渡します。

+0

これは、MKMapPointsがオブジェクトではないため、NSMutableArrayに配置するのが面倒です。 –

関連する問題