0

Marker Movement from source to destinationマーカーをポリラインに沿って正確に移動する方法は?

画像マーカーが一方向のみの直線であるマーカー移動を示す画像です。 マーカー方向がポリライン方向に沿って変化するようにポリラインに沿ってマーカーを移動したい。これを達成する方法。

クラス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() 
} 

}

+0

これはどのように達成できますか?私に助けてください、どのようにアプローチするのですか? –

答えて

0

私の現在のコードは次のようですこれをお伝えしますので、簡単にこれを行うために使用できる手動アプローチの概要を説明します。

マーカーをポリラインに移動するには、マーカーが次のポイントに到達するために各ポイントから取る必要があるステップを計算する必要があります。で
1)あなたは直線の傾きを計算する際の支援が必要になった場合は、さらにhereを読むことができます 各2ポイントのラインf(x) = ax + bを定義します(a
1つのオプションは、ポリラインを定義して、個々の行のために次の操作を行うことです

2)マーカーがこの行の最後に到達するまで、マーカーが取るステップを定義します。行の長さを定数で割ると、定数はstepになります。これは理想的ではない。なぜなら、短くて長い行を移動するのに同じ数のステップを要するからだ。また、2つの緯度/経度の間の距離は球上にあり、2次元の場合ほど単純ではありません。詳細はhttps://en.wikipedia.org/wiki/Haversine_formulaをご覧ください。

3)最初の点(x1,y1)にマーカーを置き、(x1+step, f(x1+step))に移動します。
ライン上を左右に移動するかどうかを決定する必要があります。

4)マーカーを移動するたびに、現在の行の終点に達しているかどうかを確認し、次の行から開始します。

関連する問題