【问题标题】:Fit entire Google Map in zoom level in Swift project在 Swift 项目中以缩放级别调整整个谷歌地图
【发布时间】:2015-06-19 01:22:20
【问题描述】:

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

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 个坐标

谢谢

【问题讨论】:

    标签: ios swift google-maps


    【解决方案1】:

    您可以使用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()
        }
    }
    

    【讨论】:

      【解决方案2】:

      遍历你的观点。西南角是最小的经纬度。东北角是最大纬度和经度。一旦你有了这两点,就将它们传递给你的 cameraForBounds 方法。

      【讨论】:

        【解决方案3】:

        尝试通过以下方式在谷歌地图上找到最佳查看框:

        -单击您认为将覆盖浏览器中坐标的区域的东北角。注意纬度和经度。

        -然后单击您认为将包含所有坐标的同一区域的东南角并注意纬度和经度。

        将纬度和经度放在下面代码的各个变量中:

        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;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-09-08
          • 1970-01-01
          • 1970-01-01
          • 2019-05-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多