(пересмотренный ответ на основе комментария:)
Если вы хотите получить координаты ограничивающего прямоугольника для этого наложения круга, используйте свойство boundingMapRect
наложения:
//"theCircle" is the MKCircle overlay object
CLLocationCoordinate2D topLeftCoord =
MKCoordinateForMapPoint(theCircle.boundingMapRect.origin);
MKMapPoint bottomRightMapPoint = MKMapPointMake (
MKMapRectGetMaxX(theCircle.boundingMapRect),
MKMapRectGetMaxY(theCircle.boundingMapRect));
CLLocationCoordinate2D bottomRightCoord =
MKCoordinateForMapPoint(bottomRightMapPoint);
(Оригинальный ответ:) Во-первых, когда вы вызываете setRegion
на виде карты, вид карты почти всегда изменяет запрашиваемый регион.так что он вписывается в вид карты.Эта корректировка основана на форме вида карты и на том, может ли она правильно отображать запрошенный диапазон на одном из фиксированных уровней масштабирования.
Например, если ваш вид карты не квадратный, и вы просите пролет 10 миль в обоих направлениях, по крайней мере, один из пролетов определенно будет скорректирован.Даже если вы попросите промежуток, который вы установили на основе пропорций вида, он все равно может быть скорректирован, если вид карты не может отображать плитки с таким уровнем масштабирования (или, возможно, если вы не взяли Землюкривизна).
Далее latitudeDelta
и longitudeDelta
определяют всю высоту и ширину области ( не расстояние от центральной координаты).
Таким образом, ваш тест на скриншоте нельзя сравнивать с дельтой диапазона.На скриншоте вы вычисляете расстояние от центральной координаты до минимальной широты и долготы (нижний левый угол), но дельты пролета проходят весь путь справа налево и снизу вверх.(Из-за этого вы можете подумать, что расстояние от центра до угла должно быть меньше дельты - не больше. Оно короче, но дельта также увеличилась до более чем 10 по причинам, описанным выше.)
Наконец, чтобы получить угловые координаты (внизу слева и вверху справа), это, вероятно, более точный способ сделать это:
CLLocationCoordinate2D bottomLeftCoord =
[myMapView convertPoint:CGPointMake(0, myMapView.frame.size.height)
toCoordinateFromView:myMapView];
CLLocationCoordinate2D topRightCoord =
[myMapView convertPoint:CGPointMake(myMapView.frame.size.width, 0)
toCoordinateFromView:myMapView];