Карта Google мерцает при обновлении текущего местоположения пользователя - PullRequest
0 голосов
/ 26 июня 2018

Я использую 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()
}

В другом случае без функций делегата пройденная полилиния маршрута не очищается, а обновляется текущее местоположение.

Может кто-нибудь подсказать способ, спасибо.

1 Ответ

0 голосов
/ 26 июня 2018

Я предлагаю вам нарисовать маршрут только один раз или в viewdidload и просто обновить положение маркера при изменении местоположения.Так что это уберет мерцание рисования маршрута и просто переместит рынок при изменении позиции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...