如何确定当前用户位置是否在我的MKCoordinateRegion内?

8

我有一个坐标区域,其中包含了我想在我的应用程序中展示的限制。我已经将其设置为MKCoordinateRegion,其中包括中心点的纬度、经度和跨度。如何确定当前的用户位置是否在我的坐标区域内?

3个回答

10

使用地图矩形。以下是一个示例,使用地图的当前可见矩形。关于您的问题,您可以使用 convertRegion: toRectToView: 先将您的区域转换为 MKMapRect

MKMapPoint userPoint = MKMapPointForCoordinate(mapView.userLocation.location.coordinate);
MKMapRect mapRect = mapView.visibleMapRect;
BOOL inside = MKMapRectContainsPoint(mapRect, userPoint);

哈,很有趣这么晚才得到答案!谢谢,你的回答很好,我会给你打分——convertRegion:toRectToView就是我缺少的东西。 - Alan Moore

2

firstresponder的答案的Swift 3版本:

let userPoint = MKMapPointForCoordinate(mapView.userLocation.coordinate)
let mapRect = mapView.visibleMapRect
let inside = MKMapRectContainsPoint(mapRect, userPoint)

基本上一样。这个API还没有进行Swift化(即,更新以符合Swift API设计准则)。它确实应该这样做...

let userPoint = mapView.userLocation.coordinate.mapPoint
let inside = mapView.visibleMapRect.contains(userPoint)

0

如果区域是由多边形定义的,使用射线投射算法可以轻松解决如何确定点是否在区域内的问题。详情请见此处http://en.wikipedia.org/wiki/Point_in_polygon

作为起始点,请使用一个保证在区域外部的位置,例如(地理上的)北极。


我真的在MapKit中寻找能为我完成工作的东西! - Alan Moore

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接