Estoy tratando de establecer la región del mapa (centro y tramo) para que el mapa muestre todas las anotaciones pin al mismo tiempo.iPhone MKMapView: establece la región del mapa para mostrar todos los pines en el mapa
Tengo problemas para convertir las coordenadas long/lat de NSString a double, resp. hacer cálculos con ellos. Aquí está el código que estoy usando:
- (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];
}
}
El resultado del logaritmo de la salida es:
centro larga: -1946827116, centro Latitud: 1075651472
max_long: -6267216, min_long: 1076018553, max_lat: 0, min_lat: 0
I thin k el problema proviene (incorrectamente) de convertir valores de NSString a double, sin embargo no puedo encontrar una manera de hacerlo funcionar ... El formato de las cadenas de ubicación es como '43 .5686473 '.
¿Alguna pista? Cheerz
sus valores de inicio para min max lat lon son incorrectos. Pruebe estos: double max_long = -360.0f; doble min_long = 360.0f; doble max_lat = -360.0f; doble min_lat = 360.0f; – igrek
y cálculos de rango? ¿por qué agregarlos? Y también ABS devuelve int no doble así que deben ser fabs: MKCoordinateSpan span = MKCoordinateSpanMake (fabs (max_lat - min_lat), fabs (max_long - min_long)); – igrek
gracias de todos modos, +1 me salvó un poco de tiempo – igrek