Dado que el PO quiere utilizar el rectángulo delimitador para ajustar en el mapa, el algoritmo debe tener en cuenta el hecho de que la latitud y las longitudes están en un sistema de coordenadas esféricas y el mapa usa un sistema de coordenadas bidimensional. Ninguna de las soluciones publicadas hasta ahora tiene esto en cuenta y termina con un rectángulo delimitador incorrecto, pero afortunadamente es bastante fácil crear una solución válida utilizando el método MKMapPointForCoordinate que se encuentra en este código de ejemplo de la WWDC 2013 "¿Qué hay de nuevo en MapKit?" video de la sesión
MKMapRect MapRectBoundingMapPoints(MKMapPoint points[], NSInteger pointCount){
double minX = INFINITY, maxX = -INFINITY, minY = INFINITY, maxY = -INFINITY;
NSInteger i;
for(i = -; i< pointCount; i++){
MKMapPoint p = points[i];
minX = MIN(p.x,minX);
minY = MIN(p.y,minY);
maxX = MAX(p.x,maxX);
maxY = MAX(p.y,maxY);
}
return MKMapRectMake(minX,minY,maxX - minX,maxY-minY);
}
CLLocationCoordinate2D london = CLLocationCoordinate2DMake(51.500756,-0.124661);
CLLocationCoordinate2D paris = CLLocationCoordinate2DMake(48.855228,2.34523);
MKMapPoint points[] = {MKMapPointForCoordinate(london),MKMapPointForCoordinate(paris)};
MKMapRect rect = MapRectBoundingMapPoints(points,2);
rect = MKMapRectInset(rect,
-rect.size.width * 0.05,
-rect.size.height * 0.05);
MKCoordinateRegion coordinateRegion = MKCoordinateRegionForMapRect(rect);
Usted puede cambiar fácilmente el método para trabajar en un NSArray de anotaciones si lo prefiere. P.ej. aquí es el método que estoy utilizando en mi solicitud:
- (MKCoordinateRegion)regionForAnnotations:(NSArray*)anns{
MKCoordinateRegion r;
if ([anns count] == 0){
return r;
}
double minX = INFINITY, maxX = -INFINITY, minY = INFINITY, maxY = -INFINITY;
for(id<MKAnnotation> a in anns){
MKMapPoint p = MKMapPointForCoordinate(a.coordinate);
minX = MIN(p.x,minX);
minY = MIN(p.y,minY);
maxX = MAX(p.x,maxX);
maxY = MAX(p.y,maxY);
}
MKMapRect rect = MKMapRectMake(minX,minY,maxX - minX,maxY-minY);
rect = MKMapRectInset(rect,
-rect.size.width * 0.05,
-rect.size.height * 0.05);
return MKCoordinateRegionForMapRect(rect);
}
Estoy seguro de que esto ya no es de gran preocupación para usted (2 años después), pero debe saber que es posible - al menos en teoría - para que todas las respuestas enumeradas fallen espectacularmente. Considere uno o más polígonos sobre el Pacífico con una X inferior izquierda de +170 y una X superior derecha de -170. Derretirá tu cerebro tratando de hacer que tu caja de ajuste encaje. Este artículo: http://www.stonybrook.edu/libmap/coordinates/seriesa/no2/a2.htm (sección Global Gotchas) implica que el problema no puede, y no debería ser, resuelto. – tomfumb