获取从用户位置到 GMSPath 上最近点的距离

Get distance from user's location to nearest point on GMSPath

我正在使用 Google 地图 API 并在地图上绘制了 GMSPolyline。我知道地图上哪个 "node"(转折点的纬度和经度位置)最接近用户的位置,并且我知道下一个即将到来的节点。鉴于这些信息,如何才能获得从用户当前位置到最近路径上最近点的距离?在下图中,当我们知道三个GPS坐标时,我们如何得到x?

将此视为几何问题而不是编程问题可能会使这更容易一些。可能存在一个库或 API 只需几行代码即可完成此操作,但这种方法仍应产生几乎没有开销的结果。 免责声明:此方法仅适用于直线。

你有两个点在你的路径上,一个点不在路径上。使用一些 basic algebra 你可以找到一条平行于路径并穿过用户位置的线,然后反转该线以找到用户位置和路径之间的最短线。然后它只是找到两条线的交点。

需要注意的一点是,节点之间的距离越大,欧式距离就越不准确。对于距离小于 ~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 
}

.