2011-10-17 16 views
0

私のアプリケーションでは、MapViewを定期的に更新し、新しい場所ごとにマップ上のパスを再描画したいと考えています。 MKMapViewを使用することは可能ですか?Mapviewを定期的に更新するにはどうすればよいですか?

これは、マップビューの描画と注釈のための私のdidload methoです。それだけ連続訪問にviewWillappear等のようなメソッドに制御を与えるその後ビューがロードされたとき

- (void)viewDidLoad 
{ 

NSString *url=[NSString stringWithFormat:@"xxxxx.php?uid=%@&buddy_uid=%@",UserUID,buddyUid]; 
NSLog(@"%@",url); 
NSLog(@"%@",url); 
NSString * jsonString = [[NSString alloc] initWithContentsOfURL:[NSURL URLWithString:url] encoding:NSUTF8StringEncoding error:nil]; 
NSLog(@"return data %@",jsonString); 
NSDictionary *jsonDic = [jsonString JSONValue]; 
buddyLocation = [[NSString alloc] initWithFormat:@"%@,%@",[jsonDic objectForKey:@"Lattitude"],[jsonDic objectForKey:@"Longitude"]]; 

[super viewDidLoad]; 

locmanager = [[CLLocationManager alloc] init]; 
[locmanager setDelegate:self]; 
[locmanager setDesiredAccuracy:kCLLocationAccuracyBest]; 
//[locmanager startUpdatingLocation]; 
MKMapView *mapnew; 
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
{ 
    mapnew = [[MKMapView alloc] initWithFrame:CGRectMake(0, 0, 768, 1004)]; 
} 
else 
{ 
    mapnew = [[MKMapView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)]; 
} 

[mapnew setDelegate:self]; 
[self.view addSubview:mapnew]; 

MKCoordinateRegion region = { {0.0, 0.0 }, { 0.0, 0.0 } }; 
region.center.latitude = lat1 floatValue];//22.56574; 
region.center.longitude =lng1 floatValue];//73.74575; 
NSString *currentLocation = [[NSString alloc] initWithFormat:@"%@,%@",lat1,lng1]; 
NSLog(@"%@",currentLocation); 

DisplayMap *ann = [[DisplayMap alloc] init]; 
ann.title = @"Current Location"; 
ann.coordinate = region.center; 
[mapnew addAnnotation:ann]; 

NSLog(@"%@",jsonDic); 
region.center.latitude = [[jsonDic objectForKey:@"Lattitude"] floatValue];//23.56574; 
region.center.longitude = [[jsonDic objectForKey:@"Longitude"] floatValue];//72.74575; 

ann = [[DisplayMap alloc] init]; 
ann.title = @"Buddy Location"; 
ann.coordinate = region.center; 

    [mapnew addAnnotation:ann]; 
    KMLParser *kml = [KMLParser parseKMLAtURL:[NSURL URLWithString:[NSString 
    stringWithFormat:@"https://maps.google.com/maps?saddr=%@&daddr=%@& 
    output=kml",currentLocation,buddyLocation]]]; 
    NSArray *overlays = [kml overlays]; 
    [mapnew addOverlays:overlays]; 

    MKMapRect flyTo = MKMapRectNull; 
    for (id <MKOverlay> overlay in overlays) 
    { 
     if (MKMapRectIsNull(flyTo)) 
     { 
      flyTo = [overlay boundingMapRect]; 
     } 
     else 
     { 
      flyTo = MKMapRectUnion(flyTo, [overlay boundingMapRect]); 
     } 
    } 

    mapnew.visibleMapRect = flyTo; 
    [mapnew release]; 
    mapnew =nil; 
} 

} 
-(MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay 
{   
MKPolylineView *line = [[[MKPolylineView alloc] initWithPolyline:overlay] autorelease]; 
line.strokeColor = [UIColor blueColor]; 
line.lineWidth =2.0; 
return line; 
} 
+0

あなたがしたいことを理解するのは少し難しいです。あなたはあなたの質問を拡大し、いくつかの例を加えるべきです。 –

+0

コードを投稿できませんか? –

+0

私のリストに載っている人を追跡したいと思います。 Mapviewでは、現在の場所と友達の場所との間にパスとピンを表示しています。 これは、初めてビューをロードするときに初めて描画されます。 しかし、特定の時刻にMapViewのパスを更新したいと思います。 –

答えて

0

ViewDidiLoad方法は一度だけ呼び出されます。あなたがしなければならないことは、viewDidLoadから位置データを解析し、配列をオブジェクトに設定するメソッドを分離することです。このメソッドを呼び出すと、これらのコンテンツはMap上でリセットされます。つまり、以前のアノテーションやオーバーレイを削除してから新しいアノテーションを追加します。問題が解決しました。これらのメソッドはタイマーなどを使って一定の間隔で呼び出すことができます。私はこれが助けてくれると思う。

+0

おそらく、MKMapViewまたはCLLocationデリゲートメソッドのいずれかで位置更新を受け取ることに最も適しており、前の場所から大幅に変更された場所を確認することをお勧めします。 –

+0

はい、ユーザーの所在地のみを確認している場合にのみ役立ちます。彼はまた友人を監視したいと思う –

+0

まあ、彼は更新されるべきである彼の "現在の場所"を参照しています。 PHPコールが友人の場所を見つけているかどうかは不明です。そうであれば、それをタイマーで呼んでください。しかし、ロケーションの更新も同様に追跡する必要があります。 –

関連する問題