2012-02-01 4 views
7

У меня есть область координат, которую я определил, содержит пределы того, что я хочу показать для своего приложения. Я установил это как MKCoordinateRegion с центральной точкой lat, долготой и диапазоном. Как определить, находится ли текущий userLocation внутри моего координатного региона?Как определить, находится ли текущее местоположение пользователя внутри моего MKCoordinateRegion?

ответ

9

Использование карт прямоугольников. Вот пример использования текущего видимого прямоугольника карты. Что касается вашего вопроса, вы можете использовать convertRegion:toRectToView:, чтобы сначала конвертировать свой регион в MKMapRect.

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

Ха, смешно, чтобы получить ответ так много позже! Спасибо, хороший ответ, поэтому я пойду дальше и дам вам знак - convertRegion: toRectToView - это то, чего мне не хватало. –

0

Существует простое решение, чтобы решить, если точка находится внутри области, если площадь дается многоугольник с использованием алгоритма луч литья: Смотрите здесь http://en.wikipedia.org/wiki/Point_in_polygon

В качестве отправной точки использовать место гарантированно будет вне ваш регион, например (географический) северный полюс.

+0

Я действительно искал что-то в MapKit, что будет делать работу за меня! –

2

Swift 3 вариант ответа firstresponder «s:

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

Практически то же самое. Этот API еще не был Swift-ified (т. Е. Обновлен в соответствии с руководящими принципами разработки Swift API). Это действительно должно быть ...

let userPoint = mapView.userLocation.coordinate.mapPoint 
let inside = mapView.visibleMapRect.contains(userPoint) 
Смежные вопросы