2013-08-21 3 views
0

Я пытаюсь увидеть, если некоторые экстенты (max x, max y, min x, min y координат) Я нахожусь в текущем видном виде карты.Создание MKMapRect из координат и с помощью mapView.visibleMapRect

Я принимаю мои экстентов и создать 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, тогда он будет содержать карту моих экстентов 'mapRect'.

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

ответ

0

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

+0

my mapRect полностью содержится в 'mapView.visibleMapRect'. Когда я заменяю видимый с помощью worldMapRect, его там в видимой области. – Padin215

1

D'oh!

Проблема была в том, что я использовал 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])); 

 Смежные вопросы

  • Нет связанных вопросов^_^