GMSMapView 更新相机位置,以便在导航期间始终显示朝向顶部的方向

Posted

技术标签:

【中文标题】GMSMapView 更新相机位置,以便在导航期间始终显示朝向顶部的方向【英文标题】:GMSMapView update camera position so that it will always show direction towards top during navigation 【发布时间】:2019-04-15 04:28:20 【问题描述】:

我使用轴承属性在地图视图上旋转相机,但无法定位相机,使其始终显示顶部导航。

下面是google map app的截图,它在导航时会自动旋转,这样它总是会显示顶部的路线。

下面是我的应用程序的屏幕截图,它总是显示任何方向的路线。

我使用下面的代码来旋转相机,但真的不知道如何获得所需的方位角 s,它将始终显示在顶部方向。

            let cameraPosition = GMSCameraPosition.camera(withTarget: currentLocation, zoom: self.camera.zoom, bearing: MyRide.shared.bearing, viewingAngle: 45)
        let cameraUpdate = GMSCameraUpdate.setCamera(cameraPosition)

        CATransaction.begin()
        CATransaction.setValue(1.0, forKey: kCATransactionAnimationDuration)
        self.animate(with: cameraUpdate)
        CATransaction.commit()

【问题讨论】:

【参考方案1】:
let camera = GMSCameraPosition.camera(withTarget: CLLocationCoordinate2DMake(startLat, startLong), zoom: 17, bearing: getBearingBetweenTwoPoints(point1: CLLocationCoordinate2DMake(startLat, startLong), point2:CLLocationCoordinate2DMake(endLat, endLong)), viewingAngle: 45)

使用下面的方位计算方法,您将获得所需的起点到终点的方位。

func degreesToRadians(degrees: Double) -> Double  return degrees * .pi / 180.0 
func radiansToDegrees(radians: Double) -> Double  return radians * 180.0 / .pi 

func getBearingBetweenTwoPoints(point1 : CLLocationCoordinate2D, point2 : CLLocationCoordinate2D) -> Double 

    let lat1 = degreesToRadians(degrees: point1.latitude)
    let lon1 = degreesToRadians(degrees: point1.longitude)

    let lat2 = degreesToRadians(degrees: point2.latitude)
    let lon2 = degreesToRadians(degrees: point2.longitude)

    let dLon = lon2 - lon1

    let y = sin(dLon) * cos(lat2)
    let x = cos(lat1) * sin(lat2) - sin(lat1) * cos(lat2) * cos(dLon)
    let radiansBearing = atan2(y, x)

    return radiansToDegrees(radians: radiansBearing)

如果您想从路径动态获取方位,则必须根据需要获取当前路线的终点。

【讨论】:

以上是关于GMSMapView 更新相机位置,以便在导航期间始终显示朝向顶部的方向的主要内容,如果未能解决你的问题,请参考以下文章

如何在不移动地图的情况下更改 GMSMapView 填充

如何在 GMSMapView 中获取动画折线路线,以便在移动地图时随地图一起移动?

MapView 相机在 iOS Swift 中没有改变

在 GMSMapView 上确定适当的缩放级别以适合所有需要的位置?

如何使用 GMSMapView 在 iOS 中找到两个位置之间的最短路径并绘制锯齿形路径?

在状态转换错误期间无法更新-导航到另一个屏幕时使用挂钩对本机做出反应