Я использую Google maps , чтобы нарисовать путь между начальной и конечной точкой.он отлично работает, когда пользователь путешествует, обновляет текущее местоположение и рисует маршрут, используя эту функцию делегата.
public func mapView(_ mapView: GMSMapView, didChange position: GMSCameraPosition) {
drawPath()
}
Карты мерцают, я использую эту функцию для рисования пути
func drawPath()
{
let urlString = "https://maps.googleapis.com/maps/api/directions/json?origin=\(origin)&destination=\(destination)&mode=driving"
let url = URL(string: urlString)
URLSession.shared.dataTask(with: url!, completionHandler: {
(data, response, error) in
if(error != nil){
print("error")
}else{
DispatchQueue.main.async {
do{
let json = try JSONSerialization.jsonObject(with: data!, options:.allowFragments) as! [String : AnyObject]
let routes = json["routes"] as! NSArray
self.googleMapView?.clear()
for route in routes
{
let routeOverviewPolyline:NSDictionary = (route as! NSDictionary).value(forKey: "overview_polyline") as! NSDictionary
let points = routeOverviewPolyline.object(forKey: "points")
let path = GMSPath.init(fromEncodedPath: points! as! String)
let polyline = GMSPolyline.init(path: path)
polyline.strokeWidth = 8
polyline.strokeColor = #colorLiteral(red: 0.2420450151, green: 0.487836957, blue: 0.9020499587, alpha: 1)
let bounds = GMSCoordinateBounds(path: path!)
self.googleMapView!.animate(with: GMSCameraUpdate.fit(bounds, withPadding: 30.0))
polyline.map = self.googleMapView
}
}catch let error as NSError{
print("error:\(error)")
}
self.addMarker(loc: desti)
}
}
}).resume()
}
В другом случае без функций делегата пройденная полилиния маршрута не очищается, а обновляется текущее местоположение.
Может кто-нибудь подсказать способ, спасибо.