Swift mkmapview从纬度经度delta

时间:2017-06-21 11:32:28

标签: ios swift mkmapview

我很困惑,关于如何获得地图可见区域的缩放级别和半径(使用mapkit mapview)。

这是我正在寻找的(根据需要,他们中的任何一个或两者) -

  1. 缩放级别,是为了查看向用户显示的地图级别,并且使用该信息,我想在可见区域中显示自定义引脚。如果缩放级别很高,我需要将某些商店的实际徽标显示为引脚。如果缩放级别低,我需要显示彩色点而不是徽标。
  2. 截至目前,我正在使用let updatedRadius = (mapView.camera.altitude)/1000来获取相机的高度,并且如果updatedRadius值为> 25.0,我正在展示彩色圆点。低于25.0,我会显示徽标。我在regionDidChanged这样做 这种做法是否正确?

    1. Radius,将其作为参数发送到我的REST API以获取该半径内的位置列表。当用户缩小地图时,可见区域会增加,因此REST API需要更大的半径来返回该区域中所覆盖的位置。
    2. 最终,应该发生的是,每当用户缩小时,半径都会发生变化。我需要将此更改后的半径发送到我的REST以获取更新列表。

      1. 什么是纬度经度增量,我们可以使用这些值得到可见区域的半径/宽度吗?

        let latitudeDeltaVal = mapView.region.span.latitudeDelta let longitudeDeltaVal = mapView.region.span.longitudeDelta

      2. 有人可以说明需要做些什么吗?

1 个答案:

答案 0 :(得分:5)

由于您需要在区域更改时调用api,您需要在mapView的委托函数RegionDidChange中计算半径。

    func mapView(mapView: MKMapView, regionDidChangeAnimated animated: Bool) {
        let centralLocation = CLLocation(latitude: mapView.centerCoordinate.latitude, longitude:  mapView.centerCoordinate.longitude)
        self.centralLocationCoordinate = mapView.centerCoordinate

        print("Radius - \(self.getRadius(centralLocation))")

    }


    func getRadius(centralLocation: CLLocation) -> Double{
        let topCentralLat:Double = centralLocation.coordinate.latitude -  mapView.region.span.latitudeDelta/2
        let topCentralLocation = CLLocation(latitude: topCentralLat, longitude: centralLocation.coordinate.longitude)
        let radius = centralLocation.distanceFromLocation(topCentralLocation)
        return radius / 1000.0 // to convert radius to meters 
    }