从坐标创建MKMapRect并使用mapView.visibleMapRect

时间:2013-08-21 16:05:01

标签: ios objective-c mkmapview mkmaprect

我正在尝试查看我所拥有的某些范围(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,那么它将包含我的范围'mapRect'。

我做错了吗?是mapView.visibleMapRect不是我认为的(屏幕上的可视区域)?

2 个答案:

答案 0 :(得分:1)

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]));

答案 1 :(得分:0)

mapView.visibleMapRect正是您的想法,地图视图显示的地图矩形。问题可能是MKMapRectContainsRect函数只告诉您一个map rect是否完全包含(完全封闭)在另一个中。您可能只想使用MKMapRectIntersectsRect,它只是告诉您地图矩形的一部分位于mapView.visibleMapRect