谷歌地图上的折线实时无法正常工作

时间:2016-06-29 14:24:38

标签: ios google-maps swift2 xcode7

我正在尝试实时绘制折线,向用户显示他们到目前为止所采用的路线。我使用谷歌地图api,到目前为止,它显示用户的当前位置没有问题。但折线不起作用(它根本不绘制折线)。我在检查授权后调用startMonitoringSignificantLocationChanges并在didupdatelocations中绘制折线。这是我的代码的相关部分:

extension MapViewController: CLLocationManagerDelegate {
    func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) {
        if status == .AuthorizedAlways {
           locationManager.startUpdatingLocation()
           mapView.myLocationEnabled = true
           mapView.settings.myLocationButton = true
           locationManager.startMonitoringSignificantLocationChanges()
    }
}

    func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        if let location = manager.location {
           mapView.camera = GMSCameraPosition(target: location.coordinate, zoom: 15, bearing: 0, viewingAngle: 0)
           path.addCoordinate(CLLocationCoordinate2D(latitude: location.coordinate.latitude,
           longitude: location.coordinate.longitude))
           let polyline = GMSPolyline(path: path)
           polyline.strokeColor = UIColor.redColor()
           polyline.strokeWidth = 3
           polyline.map = mapView

           locationManager.stopUpdatingLocation()

    }

}

UPDATE-1

在注释掉stopUpdatingLocation行后,它会绘制该行。但这条线路被破坏了。

UPDATE-2

我弄清楚为什么这条线是一团糟而不是一条直线。这是因为iphone一直在改变当前位置(即使它是固定的),因此,在一个小区域内绘制多条线。我如何阻止iphone这样做?

UPDATE-3

我刚发现“Jumpy”当前位置不仅发生在我的应用中。它也发生在GoogleMap应用中。所以这可能是Iphone / ios GPS问题。

1 个答案:

答案 0 :(得分:1)

您只需忽略无效的位置更新或更低精度的更新。

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
CLLocation *location = [locations lastObject];
    NSTimeInterval age = -[location.timestamp timeIntervalSinceNow];
    if (age > 120) return;    // ignore old (cached) updates
    if (location.horizontalAccuracy < 0) return;   // ignore invalid updates
    if (location.horizontalAccuracy <=10) //you can change 10 to 20 if you want more frequent updates
    {
     // this is a valid update
    }
}

希望这有帮助。