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

puk*_*978 3 google-maps ios swift

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

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))
Run Code Online (Sandbox Code Playgroud)

我希望地图根据点自动缩放到最佳水平但是我找不到任何与此相关的内容.

我有这个工作:

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
Run Code Online (Sandbox Code Playgroud)

但它只接受2个坐标,我可能最多100个

谢谢

zta*_*tan 7

您可以使用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))
        }
    }
Run Code Online (Sandbox Code Playgroud)

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()
    }
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述