Получить расстояние от местоположения пользователя до ближайшей точки на GMSPath

Я работаю с Google Maps API и нарисовал GMSPolylineс на карте. Я знаю, какой "узел" (широта и длинная позиция для точки поворота) на карте ближе всего к местоположению пользователя, и я знаю следующие ближайшие узлы. Учитывая эту информацию, как можно получить расстояние от текущего местоположения пользователя до ближайшей точки на ближайшем пути? На диаграмме ниже, как мы можем получить х, когда мы знаем три GPS-координаты?

2 ответа

Решение

Рассмотрение этого как проблемы геометрии вместо проблемы программирования может сделать это немного легче. Вероятно, существует библиотека или API, которые делают это с помощью нескольких строк кода, но такой подход все равно должен давать результат с минимальными накладными расходами. Отказ от ответственности: этот подход работает только с прямыми линиями.

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

Следует отметить, что чем больше расстояние между узлами, тем менее точным будет евклидово расстояние. Это должно быть незначительным для узлов ближе чем ~100 миль.

Попробуйте что-то вроде этого (swift 4.0)

func isApproaching(_ to:CLLocation, from:CLLocation? = nil, byDistanceInMeters:Double) -> Bool {

    guard let baseLocation = from ?? ThisIsMyDefaultUserLocationVariable.location else { return false }

    let delta = to.distance(from: baseLocation) as Double
    if delta < byDistanceInMeters { return true }
    return false
}

и вот как это назвать:

if isApproaching(lastLocation, byDistanceInMeters: 50.0) ) {
    // this is where you are in 50m perimeter
} else {
    // here you are outside 
}

,

Другие вопросы по тегам