Создание MKMapRect из координат и использование mapView.visibleMapRect

108
14

Я пытаюсь увидеть, есть ли какие-то экстенты (max x, max y, min x, min y координат), которые находятся в текущем видимом виде карты.

Я принимаю мои экстенты и создаю MKMapRect:

MKMapPoint upperLeft = MKMapPointForCoordinate(CLLocationCoordinate2DMake([boundary.extents.maxY floatValue], [boundary.extents.minY floatValue]));
MKMapPoint lowerLeft = MKMapPointForCoordinate(CLLocationCoordinate2DMake([boundary.extents.minY floatValue], [boundary.extents.minY floatValue]));
MKMapPoint upperRight = MKMapPointForCoordinate(CLLocationCoordinate2DMake([boundary.extents.maxY floatValue], [boundary.extents.maxY floatValue]));

MKMapRect mapRect = MKMapRectMake(upperLeft.x, upperLeft.y, fabs(upperLeft.x - upperRight.x), fabs(upperLeft.y - lowerLeft.y));

Теперь я хочу проверить, включен ли мой mapRect в mapView.visibleMapRect:

if (MKMapRectContainsRect(mapView.visibleMapRect, mapRect)) {
// do some stuff
}

Но мои экстенты никогда не содержатся в mapView.visibleMapRect когда я знаю, что они должны быть.

Если я заменил mapView.visibleMapRect на MKMapRectWorld, тогда он будет содержать mapEect моего экстента.

Я делаю что-то неправильно? is mapView.visibleMapRect не то, что я думаю (видимая область на экране)?

спросил(а) 2013-08-21T19:05:00+04:00 6 лет, 9 месяцев назад
1
Решение
53

D'о!

Проблема заключалась в том, что я использовал minY вместо minX.

MKMapPoint upperLeft = MKMapPointForCoordinate(CLLocationCoordinate2DMake([boundary.extents.maxY floatValue], [boundary.extents.**minX** floatValue]));
MKMapPoint lowerLeft = MKMapPointForCoordinate(CLLocationCoordinate2DMake([boundary.extents.minY floatValue], [boundary.extents.**minX** floatValue]));
MKMapPoint upperRight = MKMapPointForCoordinate(CLLocationCoordinate2DMake([boundary.extents.maxY floatValue], [boundary.extents.**maxX** floatValue]));

ответил(а) 2013-08-21T21:59:00+04:00 6 лет, 9 месяцев назад
38

mapView.visibleMapRect - это именно то, что вы думаете, это карта, отображаемая вашим видом карты. Вероятно, проблема состоит в том, что функция MKMapRectContainsRect сообщает только, что одна карта rect полностью содержится (полностью закрыта) в другой. Вероятно, вы просто хотите использовать MKMapRectIntersectsRect который просто говорит вам, что часть вашего прямоугольника карты находится внутри вашего mapView.visibleMapRect

ответил(а) 2013-08-21T19:47:00+04:00 6 лет, 9 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема