【问题标题】:Moving GMSMarker by X Meters Deflects将 GMSMarker 移动 X 米偏转
【发布时间】:2016-07-22 18:49:28
【问题描述】:

我正在使用适用于 iOS 的 Google Maps SDK。

我的项目需要能够将当前位置标记沿绘制在地图视图上的预定路径移动 x 米。因此,我从this question(Koray Birand 的回答)实现了以下方法:

func distance(distance: Double, AwayFromCoordinate origin: CLLocationCoordinate2D, WithBearing bearing: Double) -> CLLocationCoordinate2D {
  let earthRadius = 6372797.6   // in meters

  let radianDistance = distance / earthRadius
  let radianBearing = bearing * M_PI / 180.0

  let latitude = origin.latitude * M_PI / 180
  let longitude = origin.longitude * M_PI / 180

  let lat2 = asin(sin(latitude) * cos(radianDistance) + cos(latitude) * sin(radianDistance) * cos(radianBearing))
  let lon2 = longitude + atan2(sin(radianBearing) * sin(radianDistance) * cos(latitude), cos(radianDistance) - sin(longitude) * sin(lat2))

  return CLLocationCoordinate2DMake(lat2 * 180 / M_PI, lon2 * 180 / M_PI)
}

所以如果我像下面这样调用上述方法:

currentLocationMarker.position = distance(0.5, AwayFromCoordinate: currentLocationMarker.position, WithBearing: bearing)

这为我提供了一个距离当前位置 0.5 米的新位置。

但是有一个小问题,即使起点相同,运动也会像下面这样开始偏转:

我无法弄清楚为什么会发生这种偏转而不是直行。有什么想法吗?

【问题讨论】:

    标签: ios swift google-maps-sdk-ios


    【解决方案1】:

    我相信您从this answer 得到了这个解决方案,对吧? 如果是这样,请注意在计算 lon2you 时:

    let lon2 = longitude + atan2(sin(radianBearing) * sin(radianDistance) * cos(latitude), 
    cos(radianDistance) - sin(longitude) * sin(lat2))
    

    现在看看原始答案的代码:

    let lon2 = lon1 + atan2(sin(rbearing) * sin(distRadians) * cos(lat1), 
    cos(distRadians) - sin(lat1) * sin(lat2))
    

    注意最后一点...- sin(lat1) * sin(lat2)) 在您的代码中使用一个纬度和一个经度而不是纬度:...- sin(longitude) * sin(lat2))

    因此,正确的解决方案可能是:

    let lon2 = longitude + atan2(sin(radianBearing) * sin(radianDistance) * cos(latitude), 
    cos(radianDistance) - sin(latitude) * sin(lat2))
    

    也许这就是问题的根源??

    希望对你有帮助=)

    【讨论】:

      猜你喜欢
      • 2011-11-08
      • 1970-01-01
      • 1970-01-01
      • 2019-12-18
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 2019-05-16
      相关资源
      最近更新 更多