2016-07-22 2 views
2

Так что я работаю над проектом, который включает в себя множество применений, размещающих аннотации по всей карте. Появится аннотация, (который является обычаем изображения с гораздо большим круговым диапазоном) на экране и, в идеале, я хотел бы, чтобы пользователь:Как обнаружить пользователя в пределах аннотации

  1. уведомлен, если они находятся в пределах диапазона аннотации и
  2. Не допускается размещать другую аннотацию в пределах другой, если круглые штырьки перекрываются, скажем, более чем на 25%

Я думаю, что это довольно уникальный вопрос и должен быть забавой для кого-то чтобы помочь, так что получайте удовольствие! Спасибо всем!

+1

В качестве общего указателя, см up GeoFencing – LuigiPower

+1

Или, более конкретно, с MapKit, посмотрите [Мониторинг географических регионов] (https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/LocationAwarenessPG/RegionMonitoring/RegionMonitoring.html#//apple_ref/doc/uid/TP40009497-CH9-SW2) в руководстве по программированию на местах и ​​картах. Примечание. Я считаю, что существует ограниченное количество регионов, которые вы можете одновременно контролировать, но это возможный подход. Но правильное решение, как обсуждается другими, скорее всего, будет использовать метод 'distanceFromLocation' CLLocation'. – Rob

+0

Спасибо, что вы звоните в @Rob, я сейчас посмотрю! – Ethan

ответ

4

Вы можете проверить расстояние от каждой аннотации с помощью

- (CLLocationDistance)distanceFromLocation:(const CLLocation *)location 

Этот метод измеряет расстояние между двумя точками с помощью трассировки линии между ними, который следует за кривизну Земли. Результирующая дуга представляет собой плавную кривую и не учитывает конкретные изменения высоты между двумя местоположениями .

Для получения более подробной информации см Link

+0

@ user154248 Обновлено – AtWork

+0

Хммм это может сработать. Проблема в том, что все координаты аннотаций будут поступать с сервера. Это означало бы, что не было бы постоянной второй совокупности координат для измерения расстояния с. Интересно, может ли это быть адаптировано в какой-то сканер, чтобы проверить только аннотации на экране. – Ethan

+0

Вы можете нарисовать круг с любым диапазоном, который вы хотите установить, сначала пометить его центральную точку, а затем каждый раз, когда вы получаете новый объект местоположения с сервера, вы передаете его по указанному выше методу с помощью объекта центра местоположения и объекта местоположения сервера. _ ** CLLocationDistance distance = [centerInitialLocation distanceFromLocation: serverLocation]; ** _ – AtWork

1

Попробуйте это:

let location = CLLocation(latitude: 1, longitude: 1)//Or user's location 
let distance = location.distance(from: anotherLocation) 

Edit:

Как уже упоминалось в комментариях, вы хотите создать эквидистантный точку. Я предлагаю сделать это вручную:

Вычитаем местоположение аннотации из местоположения пользователя. Затем добавьте свое расстояние обратно к оригиналу. Например:

местоположение пользователя = (1, 1)

расположение аннотацию в = (3, 2)

Вертикальная разница будет 2

Горизонтальная разница будет 1

Тогда:

(3 + 2, 2 + 1)

Вашего результата: (5, 3)

Теперь вы бы две точки (тот, который вы только что создали и местоположение пользователя) на каждом конце с центральной точкой (оригинал аннотации)

+0

Я думаю, что местоположение и расстояние должны быть var, и я задаюсь вопросом, могу ли я установить расстояние, равное аннотации в координатах местоположения плюс допуск с конкретным многоразовым идентификатором? Может быть? – Ethan

+0

Вам не нужны, чтобы они были варами. Это будет вызываться каждый раз, когда вы обновляете местоположение (метод locationDidUpdate). Я отредактировал свой вопрос на основе новой точки. – penatheboss

Смежные вопросы