Swift3 如何准确地沿多段线移动标记?

Swift3 如何准确地沿多段线移动标记?,swift3,google-maps-markers,google-maps-sdk-ios,google-polyline,Swift3,Google Maps Markers,Google Maps Sdk Ios,Google Polyline,显示标记移动的图像,该移动仅在一个方向上与标记成直线。 我想沿多段线移动标记,标记方向应随多段线方向改变。如何做到这一点。 我当前的代码如下: 类MapScreenVC:BaseVC{ var path = GMSMutablePath() var arrayCoordinates : [CLLocationCoordinate2D] = [] var destCoord = CLLocationCoordinate2D() var marker = GMSMarker() var mapVie

显示标记移动的图像,该移动仅在一个方向上与标记成直线。 我想沿多段线移动标记,标记方向应随多段线方向改变。如何做到这一点。 我当前的代码如下:

类MapScreenVC:BaseVC{

var path = GMSMutablePath()
var arrayCoordinates : [CLLocationCoordinate2D] = []
var destCoord = CLLocationCoordinate2D()
var marker = GMSMarker()
var mapView : GMSMapView? = nil
override func viewDidLoad() {
    super.viewDidLoad()

    let camera = GMSCameraPosition.camera(withLatitude: 53.4545, longitude: -2.1811, zoom: 14)
    mapView = GMSMapView.map(withFrame: .zero, camera: camera)
    marker = GMSMarker()
    marker.position = CLLocationCoordinate2DMake(53.4387, -2.1827)
    marker.title = "Source"
    marker.snippet = "Source"
    marker.icon = UIImage(named: "car")
    marker.map = mapView



    let DestinationMarker = GMSMarker()
    self.destCoord = CLLocationCoordinate2DMake(53.4645, -2.1873)
    DestinationMarker.position = CLLocationCoordinate2DMake(53.4643, -2.1869)
    DestinationMarker.title = "Destination"
    DestinationMarker.snippet = "Destination"
    DestinationMarker.icon = UIImage(named: "home")
    DestinationMarker.map = mapView
//多段线

    path.addLatitude(53.4395, longitude:-2.1834)
    path.addLatitude(53.4403, longitude:-2.1854)
    path.addLatitude(53.4414, longitude:-2.1852)
    path.addLatitude(53.4428, longitude:-2.1832)
    path.addLatitude(53.4442, longitude:-2.1818)
    path.addLatitude(53.4449, longitude:-2.1801)
    path.addLatitude(53.4478, longitude:-2.1793)
    path.addLatitude(53.4504, longitude:-2.1798)
    path.addLatitude(53.4526, longitude:-2.1806)
    path.addLatitude(53.4545, longitude:-2.1811)
    path.addLatitude(53.4564, longitude:-2.1811)
    path.addLatitude(53.4584, longitude:-2.1811)
    path.addLatitude(53.4601, longitude:-2.1811)
    path.addLatitude(53.4617, longitude:-2.1821)
    path.addLatitude(53.4630, longitude:-2.1829)
    path.addLatitude(53.4632, longitude:-2.1851)
    path.addLatitude(53.4635, longitude:-2.1869)
    path.addLatitude(53.4638, longitude:-2.1882)
    path.addLatitude(53.4645, longitude:-2.1873)


    let polyline = GMSPolyline(path: path)
    polyline.strokeColor = .blue
    polyline.strokeWidth = 6.0
    polyline.geodesic = true
    polyline.map = mapView
    updateMarker(coordinates: destCoord)
    view = mapView
}

func updateMarker(coordinates: CLLocationCoordinate2D) {
    CATransaction.begin()
    CATransaction.setAnimationDuration(10.0)
    marker.position = coordinates
    CATransaction.commit()
}

}

我不熟悉能够提供此功能的库或类似库,因此我将概述一种手动方法,您可以使用它轻松完成此操作

要跨多段线移动标记,需要计算标记从每个点到下一点所需的步数。
一个选项是对定义多段线的每条线执行以下操作:
1) 为每2个点定义一条线
f(x)=ax+b
如果在计算直线斜率时需要帮助,您可以进一步阅读(
a
,在上述等式中)

2) 定义标记到达此行终点之前所采取的步骤。您可以将行的长度除以一个常数,该常数将为您提供一个常数
步数
。这并不理想,因为它需要相同数量的步骤来跨越短线和长线,但这只是一个开始。还要注意的是,两个lat/lng点之间的距离在球体上,而不像二维中那样简单。查看以了解更多信息

3) 将标记放在第一个点
(x1,y1)
,然后将其移动到
(x1+步进,f(x1+步进))

您需要确定是在线路上向左移动还是向右移动


4) 每次移动标记后,检查标记是否到达当前行的终点,然后重新开始下一行。

如何实现这一点?请帮帮我,怎么接近?