如何在swift 3中使用谷歌地图跟踪用户实时位置?

时间:2017-10-11 12:10:31

标签: ios google-maps location

我是Swift的新手,谷歌地图可以任何人建议如何使用谷歌地图Swift 3跟踪用户的实时位置。

2 个答案:

答案 0 :(得分:3)

您需要考虑几个步骤。

总的来说,你需要:

  • 使用核心位置CLLocation
  • 获取位置更新
  • 初始化Google地图视图GMSMapView
  • 每次获得更新时,您都会将地图视图设置为新位置
  • 如果您想使用GMSPathGMSPolyline
  • 来跟踪路径

因此...

使用核心位置获取位置更新:

  • 您需要导入de library
  • 创建CLLocationManager的实例,该实例是管理更新的类
  • 实施CLLocationManagerDelegate方法以接收每次更新

您可以依赖Apple的文档here

初始化Google地图视图:

每次获得更新时,您都会将地图视图设置为新位置:

  • 这是进行跟踪的地方,每当您在CLLocationManagerDelegate的委托方法中获得更新时,您将获得CLLocation的数组,您可以使用此动画将地图设置为动画新的位置。

示例(内部委托方法):

...
 let newLocationCoordinate = locations.last!.coordinate
 self.mapView.animate(toLocation: newLocationCoordinate)
// mapView should be of type GMSMapView

如果您想使用GMSPathGMSPolyline跟踪路径:

  • 要执行此操作,您需要存储GMSPathGMSPolyline的实例,并在viewDidLoad或初始化代码中初始化它们。

  • 每次获得更新时,您都应该执行以下操作:

    // Say your GMSPath instance is called trackingPath:
    trackingPath.add(locations.last!.coordinate)
    // Say your GMSPolyline instance is called trackingPolyline:
    // You clear the mapView to remove obsolete polyline
    mapView.clear()
    // You update your polyline with the path
    trackingPolyline.path = path
    // You add the polyline to the UI by pointing its map atribute to your mapView
    trackingPolyline.map = mapView
    

这是一个非常粗略的整体你应该做的事情,但我希望它能让你了解要采取的步骤。 Google的指南非常完整,您可以关注它们以更好地了解其图书馆的运作方式。如果您的应用程序在美国跟踪用户,您也可以使用Apple的MapKit,我不推荐Apple的MapKit用于其他领域。 GoogleMaps在美国以外的地区更好地支持地址格式和街道准确性。

建议使用Singleton访问位置是您应该做的,如果多个视图访问位置使用Singleton来优化性能。整个应用中只有一个实例应该管理位置更新并将其传递给必要的视图。

答案 1 :(得分:0)

要完成此任务,您需要将Google Maps SDK集成到您的项目中。 This RayWenderlich tutorial是关于iOS版谷歌地图的入门。

但是,如果您不依赖Google地图,那就是您没有特定需求,请考虑使用Apple Maps(MapKit)。不要将不必要的依赖项集成到项目中。

您还需要CoreLocation。这是Apple的所有位置相关的库。由此得名。 :

前段时间,I wrote一个单例对象,用于检索项目范围内的用户位置。有了它,单个实体将检索位置信息,您可以通过项目访问它而无需重复。拥有多个CoreLocationManager或将其放入AppDelegate是一种不好的做法。起初,你可能不会得到它,但后来它就是你要走的路。