iPhone MKMapView: jeu de carte de la région de montrer toutes les broches sur la carte

Je suis en train de définir la zone de la carte (centre et de la durée), de sorte que la carte montre tous les pin-annotations en même temps.

Je vais avoir du mal à convertir le long/lat coordonnées de NSString à double, resp. faire des calculs avec eux. Voici le code que j'utilise:

- (void)updateMemberPins{

//calculate new region to show on map
double center_long = 0.0f;
double center_lat = 0.0f;
double max_long = 0.0f;
double min_long = 0.0f;
double max_lat = 0.0f;
double min_lat = 0.0f;

for (Member *member in members) {

    //find min and max values
    if ([member.locLat doubleValue] > max_lat) {max_lat = [member.locLat doubleValue];}
    if ([member.locLat doubleValue] < min_lat) {min_lat = [member.locLat doubleValue];}
    if ([member.locLong doubleValue] > max_long) {max_long = [member.locLong doubleValue];}
    if ([member.locLong doubleValue] < min_long) {min_long = [member.locLong doubleValue];}

    //sum up long and lang to get average later
    center_lat = center_lat + [member.locLat doubleValue];
    center_long = center_long + [member.locLong doubleValue];
}

//calculate average long /lat
center_lat = center_lat / [members count];
center_long = center_long / [members count];

NSLog(@"center long: %d, center lat: %d", center_long, center_lat);
NSLog(@"max_long: %d, min_long: %d, max_lat: %d, min_lat: %d", max_long, min_long, max_lat, min_lat);

//create new region and set map
CLLocationCoordinate2D coord = {latitude: center_lat, longitude: center_long};
MKCoordinateSpan span = MKCoordinateSpanMake(abs(max_lat) + abs(min_lat), abs(max_long) + abs(min_long));
MKCoordinateRegion region = {coord, span};
[resultMapView setRegion:region];

//remove all pins from map
[resultMapView removeAnnotations:resultMapView.annotations];

//show member pins
for (id member in members) {
    [resultMapView addAnnotation:(Member *) member];
}

}

Le résultat de la connexion de sortie est:

centre de long: -1946827116, centre lat: 1075651472

max_long: -6267216, min_long: 1076018553, max_lat: 0, min_lat: 0

Je pense que le problème vient (à tort) de la conversion des valeurs de NSString à double, cependant je ne peux pas trouver un moyen de le faire fonctionner... Le format de l'emplacement-les chaînes est comme "43.5686473'.

Un indice? Cheerz

vos valeurs de départ pour min max lat lon sont mauvais. Essayez ces: double max_long = -360.0 f; double min_long = 360.0 f; double max_lat = -360.0 f; double min_lat = 360.0 f;
et la durée de calculs? pourquoi en rajouter? Et aussi abs int renvoie pas de double-ci doit donc être fabs: MKCoordinateSpan span = MKCoordinateSpanMake(fabs(max_lat - min_lat), fab(max_long - min_long));
merci quand même, +1 il m'a sauvé un peu de temps
et aussi, pas besoin d'accumuler des lats lons-le-saunier dans une boucle. Ceux-ci peuvent être calculées à partir des valeurs min max: center_lat = (min_lat + max_lat) / 2.0; center_long = (min_long + max_long) / 2.0;

OriginalL'auteur pawi | 2011-02-18