0

我正在尝试查看我拥有的某些范围(最大 x、最大 y、最小 x、最小 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.visibleMapRectMKMapRectWorld那么它将包含我的范围“mapRect”。

难道我做错了什么?不是mapView.visibleMapRect我想的那样(屏幕上的可视区域)?

4

2 回答 2

1

哦!

问题是我使用了 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-21T18:59:06.987 回答
0

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

于 2013-08-21T16:47:56.290 回答