Swift mkmapview从纬度经度增量获得可见地图区域的缩放级别,宽度或半径

Loh*_*olu 2 mkmapview ios swift

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

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

  1. 缩放级别,是为了查看向用户显示的地图级别,并且使用该信息,我想在可见区域中显示自定义引脚.如果缩放级别很高,我需要将某些商店的实际徽标显示为引脚.如果缩放级别低,我需要显示彩色点而不是徽标.

截至目前,我正在使用let updatedRadius = (mapView.camera.altitude)/1000相机的高度,如果updatedRadius值> 25.0,我将显示彩色圆点.低于25.0,我会显示徽标.我这样做regionDidChanged 这个方法是否正确?

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

最终,应该发生的是,每当用户缩小时,半径都会发生变化.我需要将此更改后的半径发送到我的REST以获取更新列表.

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

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

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

Ara*_*A R 6

由于您需要在区域更改时调用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 
    }
Run Code Online (Sandbox Code Playgroud)