, एल्गोरिथ्म है कि तथ्य को ध्यान में रखना करने की आवश्यकता है अक्षांश और रेखांश एक गोलाकार समन्वय प्रणाली में हैं और नक्शा एक 2 आयामी समन्वय प्रणाली का उपयोग करता है। समाधान अब तक तैनात में से कोई भी समय इसे ध्यान में है और इस तरह एक गलत सीमांकन आयत के साथ खत्म हो लेकिन सौभाग्य से यह "नया क्या है MapKit में" WWDC 2013 से इस नमूना कोड में पाया MKMapPointForCoordinate विधि का उपयोग कर एक मान्य समाधान बनाने के लिए काफी आसान है सत्र वीडियो
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);
आप आसानी से अगर आप पसंद करते एनोटेशन का एक NSArray पर काम करने की विधि बदल सकते हैं। जैसे
- (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);
}
मुझे यकीन है कि यह अब आपके पास न की बड़ी चिंता (2 साल बाद) है हूँ, लेकिन आपको पता होना चाहिए यह संभव है - कम से कम सिद्धांत रूप में - सभी सूचीबद्ध उत्तरों के लिए शानदार रूप से असफल होने के लिए। प्रशांत पर +170 के निचले बाएं एक्स और -170 के ऊपरी दाएं एक्स के साथ प्रशांत पर एक या अधिक बहुभुजों पर विचार करें। यह आपके दिमाग को आपके बाउंडिंग बॉक्स को फिट करने की कोशिश कर पिघलाएगा। यह आलेख: http://www.stonybrook.edu/libmap/coordinates/seriesa/no2/a2.htm (ग्लोबल गॉटचास सेक्शन) का तात्पर्य है कि समस्या नहीं हो सकती है, और हल करने की आवश्यकता नहीं है। – tomfumb