在Swift项目中以缩放级别适合整个Google Map

我有一大堆坐标的谷歌地图

path.addCoordinate(CLLocationCoordinate2DMake(-37.813047, 144.959911)) path.addCoordinate(CLLocationCoordinate2DMake(-37.814895, 144.960759)) path.addCoordinate(CLLocationCoordinate2DMake(-37.814361, 144.963140)) path.addCoordinate(CLLocationCoordinate2DMake(-37.812386, 144.962239)) 

我希望地图可以自动放大到基于点的最佳水平,但是我找不到与此有关的任何事情。

我有这个工作:

 var vancouver = CLLocationCoordinate2DMake(-37.813047, 144.959911) var calgary = CLLocationCoordinate2DMake(-37.814361, 144.963140) var bounds = GMSCoordinateBounds(coordinate: vancouver, coordinate: calgary) var camera = viewMap.cameraForBounds(bounds, insets:UIEdgeInsetsZero) viewMap.camera = camera 

但是它只接受2个坐标,我可能有100个坐标

谢谢

您可以使用GMSCoordinateBounds(path:)来适应所有的坐标。 但是,如果您在另一次更新之后立即更新相机,它将显示world size scale 。 所以你可以使用dispatch_after来解决问题。

  override func viewDidLoad() { super.viewDidLoad() self.view.backgroundColor = UIColor.whiteColor(); let camera = GMSCameraPosition.cameraWithLatitude(-37.813047, longitude: -72.8561644, zoom:5) mapView = GMSMapView.mapWithFrame(CGRectZero, camera:camera) let marker = GMSMarker() marker.position = camera.target marker.snippet = "Hello World" marker.appearAnimation = kGMSMarkerAnimationPop marker.map = mapView self.view = mapView delay(seconds: 2) { () -> () in let path = GMSMutablePath() path.addCoordinate(CLLocationCoordinate2DMake(37.36, -122.0)) path.addCoordinate(CLLocationCoordinate2DMake(37.45, -122.0)) path.addCoordinate(CLLocationCoordinate2DMake(37.45, -122.2)) path.addCoordinate(CLLocationCoordinate2DMake(37.36, -122.2)) path.addCoordinate(CLLocationCoordinate2DMake(37.36, -122.0)) let rectangle = GMSPolyline(path: path) rectangle.map = self.mapView let bounds = GMSCoordinateBounds(path: path) self.mapView!.animateWithCameraUpdate(GMSCameraUpdate.fitBounds(bounds, withPadding: 15.0)) } } 

delay方法使用dispatch_after

 func delay(#seconds: Double, completion:()->()) { let popTime = dispatch_time(DISPATCH_TIME_NOW, Int64( Double(NSEC_PER_SEC) * seconds )) dispatch_after(popTime, dispatch_get_main_queue()) { completion() } } 

在这里输入图像说明

尝试通过以下方式在Google地图上find最佳查看框:

– 点击该地区的东北angular,您将会看到浏览器中的坐标。 注意经纬度。

– 然后点击您认为将包围所有坐标的同一区域的东南angular,并注意经纬度。

把纬度和经度放在下面代码的各个variables中:

 var southWest = CLLocationCoordinate2DMake(latitide,longititude) var northEast = CLLocationCoordinate2DMake(latitude,longitude) var bounds = GMSCoordinateBounds(coordinate: northEast, coordinate: southWest) var camera = mapView.cameraForBounds(bounds, insets:UIEdgeInsetsZero) mapView.camera = camera; 

迭代你的观点。 西南angular是最低的经度和纬度。 东北angular是最大的经度和纬度。 一旦你有了这两点,把它们传入你的cameraForBounds方法。