2011-10-17 3 views
0

Dans mon application, je souhaite mettre à jour MapView périodiquement et redessiner le chemin sur la carte en fonction du nouvel emplacement. Est-il possible d'utiliser MKMapView?Comment mettre à jour Mapview périodiquement?

Ceci est mon metho didload pour le dessin et l'annotation sur mapview.

- (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

Il est un peu difficile de comprendre ce que vous voulez faire. Vous devriez développer votre question et ajouter quelques exemples. –

+0

Vous ne pouvez pas poster du code? –

+0

Je veux suivre la personne qui figure sur ma liste. Dans Mapview je montre le chemin et la broche entre mon emplacement actuel à l'emplacement d'un ami. Donc, il dessine pour la première fois lorsque je charge la vue. Mais je veux mettre à jour le chemin sur MapView à un moment précis. –

Répondre

0

méthode ViewDidiLoad est appelée une seule fois lorsque la vue est chargé après qu'il ne donner le contrôle à des méthodes telles que viewWillAppear etc sur les visites successives. Ce que vous devez faire est de séparer la méthode qui analyse les données de localisation de viewDidLoad, et de le faire définir un tableau ou des objets. Et appelez la méthode pour réinitialiser ces contenus sur la carte, c'est-à-dire supprimer les annotations précédentes ou la superposition, puis en ajouter de nouvelles. problème résolu. Vous pouvez appeler ces méthodes à intervalle fixe en utilisant le minuteur ou quelque chose comme ça. Je suppose que cela devrait aider.

+0

Il est probablement préférable de l'associer à la réception d'une mise à jour d'emplacement, que ce soit dans une méthode de délégation MKMapView ou CLLocation, et vérifiez que l'emplacement a changé de manière significative par rapport à l'emplacement précédent. –

+0

oui cela aiderait seulement s'il vérifie seulement l'emplacement des utilisateurs. Il veut également surveiller ses amis –

+0

Eh bien, il se réfère à son "emplacement actuel", qui devrait être mis à jour. Il n'est pas clair si l'appel php trouve l'emplacement de son ami; si c'est le cas, alors oui, appelez cela sur une minuterie. Mais les mises à jour de localisation doivent également être suivies. –

Questions connexes