我有一个坐标区域,其中包含了我想在我的应用程序中展示的限制。我已经将其设置为MKCoordinateRegion,其中包括中心点的纬度、经度和跨度。如何确定当前的用户位置是否在我的坐标区域内?
我有一个坐标区域,其中包含了我想在我的应用程序中展示的限制。我已经将其设置为MKCoordinateRegion,其中包括中心点的纬度、经度和跨度。如何确定当前的用户位置是否在我的坐标区域内?
使用地图矩形。以下是一个示例,使用地图的当前可见矩形。关于您的问题,您可以使用 convertRegion: toRectToView:
先将您的区域转换为 MKMapRect
。
MKMapPoint userPoint = MKMapPointForCoordinate(mapView.userLocation.location.coordinate);
MKMapRect mapRect = mapView.visibleMapRect;
BOOL inside = MKMapRectContainsPoint(mapRect, userPoint);
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)
如果区域是由多边形定义的,使用射线投射算法可以轻松解决如何确定点是否在区域内的问题。详情请见此处http://en.wikipedia.org/wiki/Point_in_polygon
作为起始点,请使用一个保证在区域外部的位置,例如(地理上的)北极。