Как преобразовать MKUserLocation в CLLocation? - быстрый
Мне нужен способ конвертировать MKUserLocation в CLLocation, чтобы я мог найти расстояние между местоположением пользователя и другим предопределенным CLLocation, используя метод distanceFromLocation в swift.
3 ответа
MKUserLocation имеет свойство location, которое имеет тип CLLocation.
Тем не менее, есть несколько вещей, которые вы должны поставить на место в первую очередь.
- Вы должны спросить пользователя о разрешении использовать его местоположение. Это включает в себя вызов requestWhenInUseAuthorization от CLLocationManager и проверку асинхронного результата.
- Добавление записи NSLocationWhenInUseUsageDescription к вашей информации (описано по ссылке выше), чтобы сообщить пользователю, что вы хотите делать с информацией
- Скорее всего, вам нужно получить местоположение асинхронно. Для этого в вашем контроллере представления должен быть реализован MKMapViewDelegate, и вы будете использовать func mapView(mapView: MKMapView!, didUpdateUserLocation userLocation: MKUserLocation!) Для определения местоположения пользователя.
Я думаю, что вы получаете ваш MKUserLocation из mapView правильно?
Так что вам придется выполнить следующие шаги:
- убедитесь, что у вас есть права пользователя и системы для отображения местоположения пользователя
- как только у вас отобразится местоположение пользователя на вашем mapView, установите ваш контроллер в качестве делегата mapView.
реализовать метод:
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
// Code - (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation { [userLocation.location distanceFromLocation:_yourOtherLocation]; }
Xcode 6.4, для iOS 8.4, ARC включен
Хорошие ответы уже выложены здесь; однако никто не приводит конкретные примеры в кратчайшие сроки. Вот несколько вещей, которые нужно иметь в виду:
Класс MKUserLocation определяет конкретный тип аннотации, который идентифицирует текущее местоположение пользователя. Вы не создаете экземпляры этого класса напрямую. Вместо этого вы извлекаете существующий объект MKUserLocation из свойства userLocation представления карты, отображаемого в вашем приложении.
Свойство location доступно только для чтения!
var location: CLLocation! { get }
Таким образом, используя это свойство, можно использовать distanceFromLocation: напрямую, но не использовать местоположение текущего пользователя, потому что оно, очевидно, вернет 0 метров. Скорее всего, вам придется инициализировать новый CLLocation для измерения.
func distanceFromLocation(_ location: CLLocation!) -> CLLocationDistance
Надеюсь это поможет! Приветствия.