Swift:如何在 2 个坐标之间平滑地移动 GMSMarker



我添加了一条路线,还添加了航点标记。 我想沿着路线将标记从一个 GPS 坐标点平稳地移动到另一个坐标点。 谁能帮我解决这个问题? 下面是用于添加标记的代码。

func configureMapAndMarkersForRoute() {
  viewGMap.camera = GMSCameraPosition.cameraWithTarget(mapTasks.originCoordinate, zoom: 9.0)
  originMarker = GMSMarker(position: self.mapTasks.originCoordinate)
  originMarker.map = self.viewGMap
  originMarker.icon = GMSMarker.markerImageWithColor(UIColor.greenColor())
  originMarker.title = self.mapTasks.originAddress
  destinationMarker = GMSMarker(position: self.mapTasks.destinationCoordinate)
  destinationMarker.map = self.viewGMap
  destinationMarker.icon = GMSMarker.markerImageWithColor(UIColor.redColor())
  destinationMarker.title = self.mapTasks.destinationAddress
  if waypointsArray.count > 0 {
    var i = 0
    for waypoint in waypointsArray {
      let lat: Double = (waypoint.componentsSeparatedByString(",")[0] as NSString).doubleValue
      let lng: Double = (waypoint.componentsSeparatedByString(",")[1] as NSString).doubleValue
      let marker = GMSMarker(position: CLLocationCoordinate2DMake(lat, lng))
      marker.map = viewGMap
      marker.icon = GMSMarker.markerImageWithColor(UIColor.purpleColor())
      marker.title = locationNameArray[i]
      markersArray.append(marker)
      i += 1
    }
  }
}

Swift:

func updateMarker(coordinates: CLLocationCoordinate2D, degrees: CLLocationDegrees, duration: Double) {
    // Keep Rotation Short
    CATransaction.begin()
    CATransaction.setAnimationDuration(0.5)
    marker.rotation = degrees
    CATransaction.commit()
    // Movement
    CATransaction.begin()
    CATransaction.setAnimationDuration(duration)
    marker.position = coordinates
    // Center Map View
    let camera = GMSCameraUpdate.setTarget(coordinates)
    mapView.animateWithCameraUpdate(camera)
    CATransaction.commit()
}

检查下面的代码...

[CATransaction begin];
[CATransaction setAnimationDuration:5.0];
CGPoint point = [mapView.projection pointForCoordinate:destCoordinate];
//    point.x = point.x + 100;
GMSCameraUpdate *camera =
[GMSCameraUpdate setTarget:[mapView.projection coordinateForPoint:point]];
[mapView animateWithCameraUpdate:camera];
markerToMove.position = destCoordinate;
[CATransaction commit];

循环遍历您获得的所有路径点..并将下一个目的地坐标设置为每个下一个点....

var driverPositionMarker: GMSMarker?
func displayDriverPosition(on mapView: GMSMapView, with coordinate: CLLocationCoordinate2D) {
        if let marker = driverPositionMarker {
            let heading = GMSGeometryHeading(marker.position, coordinate)
            marker.rotation = heading
            marker.position = coordinate
        } else {
            let marker = GMSMarker()
            marker.position = coordinate
            marker.iconView = UIImageView(image: #imageLiteral(resourceName: "CarMarker"))
            marker.map = mapView
            driverPositionMarker = marker
        }
}

最新更新