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



我正在尝试查看我的某些范围(最大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应该包含我的区段时,它们从未包含过。

如果我用MKMapRectWorld替换mapView.visibleMapRect,那么它将包含我的扩展数据块"mapRect"。

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

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

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

相关内容

  • 没有找到相关文章

最新更新