Ponieważ PO chce użyć prostokąta ograniczającego ustawić na mapie, algorytm musi brać pod uwagę fakt, że szerokość i długości są w sferycznym układzie współrzędnych, a mapa używa dwuwymiarowego układu współrzędnych. Żadne z opublikowanych do tej pory rozwiązań nie bierze tego pod uwagę, a zatem kończy się błędem prostokąta, ale na szczęście całkiem łatwo jest stworzyć poprawne rozwiązanie za pomocą metody MKMapPointForCoordinate znalezionej w tym przykładowym kodzie z WWDC 2013 "Co nowego w MapKit" wideo sesji.
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);
Możesz łatwo zmienić metodę pracy na NSArray adnotacji, jeśli wolisz. Na przykład. tutaj jest metoda używam w mojej aplikacji:
- (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);
}
Jestem pewien, że to nie jest już wielkim problemem dla Ciebie (2 lata później), ale należy wiedzieć, że jest to możliwe - przynajmniej w teorii - aby wszystkie wymienione odpowiedzi zakończyły się niepowodzeniem. Rozważ jeden lub więcej wielokątów nad Pacyfikiem z lewym dolnym lewym X +170 i prawym górnym X -70. To stopi twój mózg, próbując sprawić, żeby twój pojemnik ograniczający pasował. Ten artykuł: http://www.stonybrook.edu/libmap/coordinates/seriesa/no2/a2.htm (sekcja Global Gotchas) sugeruje, że problem nie może i nie musi być rozwiązany. – tomfumb